. 问候,各位管理员。我发帖是希望阐明困扰我公司一台机器的 OOM 致死问题。我无法决定它们是否是合法的 OOM。
这是一个 Centos 6.x,内核为 2.6.32-279.1.1.el6.x86_64。
内存 8 GB,CPU athlon2-x4。
大进程是 mysql 和 vmware player 4,最大分别为 2 GB 和 4 GB 的 ram 不断分配加上一些开销。(Vmware 被杀死了,因为它的体积更大。)
除了这两个之外还有守护进程在运行,但它们非常小,而且负载很轻,所以我不明白剩下的 1/1.5 gig ram 会在哪里消失,不算巨大的交换......
此外,只有在夜间运行备份 cronjobs 时才会发生杀戮。(这些是带有标准工具的简单 shell 脚本,可以转储一些数据库并压缩一些 Web 和邮箱目录。)
例如,在这里,它正在执行 mysqldump —— 这是第一次发生在这个特定任务上。当我运行大目录树(约 100 万个小文件)的 rsyncs 或 zip 文件时,几乎每次都会发生这种情况,还伴随着“页面分配失败”。但是我用 zfs 将所有这些都移到了另一台机器上:在这次操作之后,凶手让我一个人呆了一段时间..
我讨厌在处理这个问题几个月后,阅读并重新阅读互联网上的每个线程后,我仍然无法将这些信息与我的案例联系起来。有交换,为什么不交换而不是杀死?谁拿走了所有的公羊?(一开始有几个合法的内存泄漏者,我得到了它们。)也不能碎片化,因为失败的请求是零阶的..
我在实际杀死日志之前粘贴了一些数据:
vm.swappiness = 100 vm.vfs_cache_pressure = 5000 vm.min_free_kbytes = 262144
(我添加了这些来尝试修复它,它们可能有点极端,但无论如何它运行顺利)
我也尝试过 overcommit_memory=2,但徒劳无功。这不是应该禁用杀手吗?
这是系统的正常内存状态。请注意,由于使用了 mmap 的 vmem,vmware 的 ram 算作缓存。顺便说一下,vmware 设置为允许回收/交换 vm 内存。它永远不会这样做。 …