小型服务器(VPS)内存满溢,内存导致自行被Kill(未完成)
今日,一朋友问起,他的日本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内核源码片段:
页面下部广告