我正在尝试确定 MySQL 服务器进程因内存不足而被终止的原因,因此我正在查看 sylog。在“内存不足”之前,我看到很多行带有不同的数字,但我无法找出它们的含义。请问有人能解释一下我正在查看的内容,以及它是否能为我的问题提供任何线索。
Jun 29 15:21:33 serverpilottest kernel: [1320544.512442] [ 3158] 1000 3158 97824 2881 107 1172 0 php-fpm
Jun 29 15:21:33 serverpilottest kernel: [1320544.512443] [ 3160] 1000 3160 96548 1610 105 1194 0 php-fpm
Jun 29 15:21:33 serverpilottest kernel: [1320544.512445] [ 3161] 1000 3161 95737 806 104 1224 0 php-fpm
Jun 29 15:21:33 serverpilottest kernel: [1320544.512448] Out of memory: Kill process 1598 (mysqld) score 68 or sacrifice child
任何帮助都非常感谢。
答案1
有关输出的含义,请参阅这个答案。请注意,mysql 可能不是导致问题的原因。Linux 默认会过度使用内存,然后当进程真正开始使用内存时,它必须终止其他进程才能获得一些内存。
通常它会选择那些大而又不常用的进程。你可以这样做来保护进程不被杀死
echo -1000 > /proc/999/oom_score_adj
其中 999 是进程 ID。请参阅man proc
。该值介于 -1000 到 +1000 之间,用于偏向 oom killer(可能性从较小到较大),其中 -1000 = 永远不会被杀死。
您应该监视进程内存大小,例如使用top
(M
按内存排序类型)。
输出来自 oom 管理器。php-fpm
可能是 apache 的一部分。您通常可以配置 apache 来杀死增长过多的重用线程;这是在更快的 cgi 和更少的内存浪费之间做出的选择。
您可以使用以下方式暂时禁用过度使用内存
sysctl vm.overcommit_memory=2
那么占用大量内存的进程崩溃的可能性更大,而不是某个随机进程被终止。通常不建议将其作为永久设置。
答案2
这些看起来像分别是进程 ID、用户 ID 和进程 ID。看不到最后一列是什么,可能是一些内存使用情况的指示。