我在Linode.com上运行一个Ubuntu 7.04虚拟机来托pipe几个网站,电子邮件列表等等。它在很长一段时间里工作得非常完美。 我不修补它,或者真的注意它。
最近(过去几个月),随着频率的增加,盒子内存不足,我不得不重新启动它。 它configuration了350MB真实内存,外加64MB交换。 它运行Apache,Mysql,Postfix和mailman。
内存不足的症状是显而易见的,我在kernel.log中看到这些:
Jul 21 10:16:42 grendel kernel: Out of memory: kill process 30364 (apache2) score 11205 or a child Jul 21 10:16:42 grendel kernel: Killed process 30364 (apache2) Jul 21 10:16:42 grendel kernel: apache2 invoked oom-killer: gfp_mask=0xa01d2, order=0, oomkilladj=0
有没有银弹法来确定这里发生了什么? 我正在看“顶”,而我看到随着时间的推移可用的真实记忆下降,我没有看到明显的罪魁祸首。
也许configuration一个cron作业来发送类似ps auxh | sort -r --key=4 | head -5
的东西 ps auxh | sort -r --key=4 | head -5
每隔30分钟左右你ps auxh | sort -r --key=4 | head -5
?
这会让你知道前五的记忆消费者的东西,这可能有助于追查罪魁祸首的过程。 第四列是进程消耗的内存的百分比。
你可能会发现一段时间的趋势。
最后,尝试使用命令F o按虚拟(全部)图像大小进行sorting。 然后你会看到最大的进程。
如果Apache进程变得越来越大,例如,如果你正在通过mod_php运行PHP脚本,这些脚本有时可以处理大量的数据,那么你可能不会注意到任何一个进程都会大规模地增长(但是随着时间的推移,每个Apache进程都会增长一点)。 如果是这种情况,那么你可以尝试以下方法:
您也可以通过安装swapd来删除重新启动的要求,这将在内存不足的情况下自动创build交换文件。