今日,一朋友问起,他的日本VPS的MySQL服务器的频繁死掉,经查证是因内存占用过多,导致其内核的自我优化,杀死了占用内存大的进程。这便是Linux的OOM-Killer(Out of Memory killer)机制,如果你分析日志(/var/log/messages)会发现这些:

...
Out of memory: Kill process 9682 (mysqld) score 9 or sacrifice child
Killed process 9682, UID 27, (mysqld) total-vm:47388kB, anon-rss:3744kB, file-rss:80kB
httpd invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
httpd cpuset=/ mems_allowed=0
Pid: 8911, comm: httpd Not tainted 2.6.32-279.1.1.el6.i686 #1
...
21556 total pagecache pages
21049 pages in swap cache
Swap cache stats: add 12819103, delete 12798054, find 3188096/4634617
Free swap  = 0kB
Total swap = 524280kB
131071 pages RAM
0 pages HighMem
3673 pages reserved
67960 pages shared
124940 pages non-shared

Linux本身是允许申请的内存大于实际的内存的,因为申请的内存,并不一定是立马就用的,所以–可以更好的节约资源,也就是说内核采用一种过度分配内存(over-commit memory)的办法来间接利用这部分空间。但是一旦实际空间不够用,就需要释放内存,去Kille 一些程序,但是–也不能随意Kill,需要有选择的去杀死,可是怎么选择呢?当内存不足,会触发out_of_memory(),可以参考Linux内核源码片段:

 

页面下部广告

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

鲁ICP备17018668号-1