所以我一直在尝试找出我的 linode VPS 遇到的这个磁盘 IO 问题。在过去的一两天里,我刚刚离开
watch -n1 pidstat -d
在控制台窗口中运行,输出如下所示:
在过去几天对其进行监视,我注意到我的问题出在 init、searchd 和 mysql 进程上。Searchd 是 sphinx,它的所有索引都在磁盘上,所以磁盘 io 是不可避免的(显然)。
我不明白的是为什么mysql的磁盘读取(kB_rd/s)拒绝稳定并且一直在上升。它从昨天的 154 开始,取决于您在该屏幕截图中看到的内容。但磁盘写入 (kB_wr/s) 一直保持相当稳定。
我的 VPS 只有 768MB RAM,我的 mysql 数据库大小大约为 220MB,在运行 mysqltuner.pl 并阅读了一些相关内容后,有人建议我将 innodb_buffer_pool_size 设置为 220MB,但我根本负担不起那样做.. .我最多有150MB。
我的问题是双重的。
为什么 init 进程要读取那么多磁盘?
为什么 mysql 会进行如此多的磁盘读取?
基于这个http://mysql.rjweb.org/doc.php/memory(查询缓存部分)禁用查询缓存并将 innodb_buffer_pool 大小增加到 200MB 解决了这个问题。磁盘 IO 处于控制之下,但我的 vps 现在使用了比以前更多的交换空间(30-40MB 对比 10-20MB)……奇怪的是,乘客应用程序实例而不是 mysql 使用交换空间。