我不擅长 linux / unix,所以希望大家能帮我解决我遇到的问题。我在 amazon ec2 上运行网站。我在一个 8gb RAM 的大型实例上运行 apache tomcat mysql。数据库很大,但我没有遇到性能问题,而且机器上有大约 3gb 的可用内存。我注意到大约每小时一次,机器几乎冻结,因此网站没有响应,甚至 ssh shell 也非常慢。我启用了性能监控,发现亚马逊报告说大约每小时都会出现巨大的磁盘 i/o 峰值。
我正在运行内核版本为 2.6.32-305-ec2 的 UBUNTU。因此我启动了使用 vmstat 的监视并注意到在正常运行中框报告大约 1.5gb 的可用内存和 2gb 的缓存,并且缓存在逐渐增长。但是在某个时候缓存开始增长占用整个 RAM 只剩下 1mb 的空闲空间或类似的空间。然后我看到许多进程在等待磁盘并且所有依赖于驱动器 i/o 的进程都冻结了。它通常持续 3 到 5 分钟。我的理解是系统正在将缓存转储到驱动器并释放内存,这就是造成所有这些混乱的原因。我以前没有遇到过这个问题我认为它是最近在我向 mysql 中加载更多数据时开始的。但是同样有很多可用内存只是 Linux 对内存和缓存的管理导致了它。我读到它应该是无缝的并且有缓冲区缓存是件好事但是每小时网站宕机 5 分钟对我来说绝对是件坏事。请建议我有什么选择。我在网上找不到任何东西。
这就是vmstat
输出
r b swpd free buff cache si so bi bo in cs us sy id wa
0 30 0 45512 134300 4062404 0 0 437 685 31 40 11 4 74 6
5 31 0 47200 134328 4057136 0 0 28188 15508 1682 2255 13 9 2 66
3 33 0 46904 134328 4057048 0 0 16761 8785 1099 1523 4 3 0 89
0 35 0 48440 134344 4054908 0 0 23688 11572 1453 1782 6 3 0 85
答案1
看看 Greg Smith 的Linux 写缓存之谜。您可能需要降低 dirty_ratio 和 dirty_background_ratio。