我尝试找出我的服务器每隔几周就会出现内存不足并调用 OOM 终止程序的原因。似乎是内存使用量稳定了大约 2 周,然后逐渐上升了 2 周。然后内存使用量大幅上升,导致调用 OOM。
徒步旅行前的内存使用情况:
Wed Jun 3 08:50:01 EDT 2015
COMMAND %MEM
tor 14.7
mysqld 11.8
spamd child 5.5
apache2 4.6
spamd child 4.5
apache2 4.4
apache2 4.4
apache2 4.2
apache2 4.2
apache2 3.3
Memory Space Details
Total Memory space : 1250 MB
Used Memory Space : 964 MB
Free Memory : 285 MB
Swap memory Details
Total Swap space : 255 MB
Used Swap Space : 81 MB
Free Swap : 174 MB
这是在调用 OOM 之前的内存使用情况。
Wed Jun 3 09:10:02 EDT 2015
COMMAND %MEM
tor 13.4
mysqld 11.2
spamd child 5.2
apache2 3.8
apache2 3.6
apache2 3.3
apache2 2.6
apache2 2.5
apache2 2.5
spamd child 2.4
Memory Space Details
Total Memory space : 1250 MB
Used Memory Space : 873 MB
Free Memory : 376 MB
Swap memory Details
Total Swap space : 255 MB
Used Swap Space : 178 MB
Free Swap : 77 MB
系统调用OOM:
1 Time(s): /usr/sbin/spamd invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
TOR 进程已被终止。
重启后,内存使用率下降,系统可正常运行几周。
OMMAND %MEM
tor 12.0
mysqld 7.8
/usr/sbin/spamd 6.2
spamd child 6.1
spamd child 6.1
apache2 4.4
apache2 2.9
apache2 2.9
apache2 2.5
apache2 2.0
Memory Space Details
Total Memory space : 1250 MB
Used Memory Space : 659 MB
Free Memory : 590 MB
Swap memory Details
Total Swap space : 255 MB
Used Swap Space : 0 MB
Free Swap : 255 MB
内核输出: http://pastebin.com/rBvbFcyt
内存突然增加从何而来?为什么内存使用量在两周内逐渐增加?内存泄漏?
答案1
根据提供的信息,很难说出是什么导致了这种跳跃或逐渐增加。
提供的快照表明,内存占用最高的用户实际上表现得很好 - 他们的内存占用是降低在内存紧缩期间,就在 OOM 杀手攻击之前。这表明其他一些进程实际上也导致了紧缩(可能与某些用户活动有关,可能是某些 cron 内容,可能是某些瞬态条件突然比平时持续更长时间?)。
不幸的是,OOM 终止程序不够智能,会盲目地终止顶部内存用户进程 - 在我看来,对于具有专用功能的服务器来说,这是一个相当没有创意的决定。
需要进行更详细的监控才能发现导致内存紧缩的进程。我会从定期顶部处决信息泄露全部将进程保存到一个文件中,以便以后检查。为什么是所有进程?因为进程数量的突然激增或逐渐增加(即使每个进程占用的内存很小)也可能解释内存使用率的变化,就像您报告的那样。