所以我一直在尝试解决我的 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 db 大小约为 220MB,在运行 mysqltuner.pl 并阅读了一些相关内容后,我被建议将 innodb_buffer_pool_size 设置为 220MB,但我根本无法承受这样做...我将其设置为 150MB。
我的问题有两个。
为什么 init 进程要进行那么多的磁盘读取操作?
为什么mysql要进行那么多的磁盘读取?
答案1
基于此禁用查询缓存http://mysql.rjweb.org/doc.php/memory(查询缓存部分)并将 innodb_buffer_pool 大小增加到 200MB 解决了问题。磁盘 IO 得到控制,但我的 vps 现在使用的交换比以前多得多(30-40MB vs 10-20MB)... 奇怪的是,交换被 Passenger 应用程序实例使用,而不是 mysql。