![CentOS 服务器中的高磁盘 I/O 活动](https://linux22.com/image/565909/CentOS%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%AD%E7%9A%84%E9%AB%98%E7%A3%81%E7%9B%98%20I%2FO%20%E6%B4%BB%E5%8A%A8.png)
我在 CentOS 专用服务器上有大约 16 个网站,在高流量时段遇到了一些问题,似乎是高磁盘 I/O 活动导致了整体速度下降。
我已经安装在顶部,这是我在底部看到的(服务器已重新启动,这就是值如此低的原因):
*** system and process activity since boot ***
PID RDDSK WRDSK WCANCL DSK CMD 1/18
2176 1.7G 7.3G 854.4M 39 mysqld
671 1248K 3.0G 0K 13 flush-8:0
566 0K 1.1G 0K 5 jbd2/sda2-8
2401 124.2M 529.1M 22408K 3 crond
2032 2.2G 502.0M 0K 12 nginx
2360 425.8M 115.3M 4188K 2 httpd
flush-8:0 和 jbd2/sda2-8 是我看到的进程iotop在 IO> 列中使用了 99%,它们是在硬盘上写入最多的进程(在 mysql 之后)。从我在 google 上看到的信息来看,这可能是由一些与 ext4 相关的错误引起的,当前内核是:
Linux srvr.com 2.6.32-71.29.1.el6.x86_64 #1 SMP 2011 年 6 月 27 日星期一 19:49:27 BST x86_64 x86_64 x86_64 GNU/Linux
我要求托管支持人员更新内核,他们也尝试过了,但现在他们说服务器无法使用新安装的内核启动,他们不得不回到以前的版本,但他们并没有提供太多帮助。
有人知道如何解决由 flush-8:0 和 jbd2/sda2-8 进程导致的高磁盘使用率问题吗?
答案1
你没有给我们足够的信息让我告诉,但我的第一个预感是你过度使用 RAM,并搅动交换。使用 atop,向我们显示内存列表(按 m),包括标题部分。
不要责怪你的支持。你的内核和 ext4 不太可能是问题所在。
答案2
flush-8:0
是内核线程,用于刷新dirty
RAM 缓冲区和/或swap
磁盘,jbd2/sda2-8
是内核线程,用于文件系统日志记录 - 它们是密集型 IO结果, 不是原因您的问题。
看起来你的问题是 mysql 对磁盘的大量使用。当 JBD 正在使用时 - 看起来正在进行多个写入操作。
检查哪些文件被 mysql 更改或检查其日志、数据库使用情况、表优化以及 mysql 守护进程是否配置为使用尽可能多的 RAM 进行缓存。
您可以使用mysqltuner以获得一般性建议。
如果写入仍然存在,则可能需要增加磁盘速度来获得更多的 IOPS。
检查哪些文件被更频繁地写入。不仅 MB/s 速率很重要,您可能会写入 20 MB,但会比其他人在 200MB 时消耗更多的 IO 操作。
答案3
显然 mysql 不喜欢 ext4。升级内核或将 mysql 数据目录更改为 ext3 分区应该可以解决此问题。 http://ubuntuforums.org/showthread.php?t=1313834&page=2