据我了解,当系统接近没有可用内存时,内核应开始终止进程以重新获得一些内存。但是在我的系统中这根本不会发生。
假设一个简单的脚本分配的内存比系统中的可用内存多得多(例如,包含数百万个字符串的数组)。如果我以普通用户的身份运行这样的脚本,它将获得所有内存,直到系统完全死机为止(只有SysRQ REISUB可以工作)。
奇怪的是,当计算机死机时,无论是否安装了交换分区,硬盘驱动器指示灯都会打开并一直保持这种状态,直到计算机重新启动为止!
所以我的问题是:
- 这是正常现象吗?奇怪的是,以普通用户身份执行的应用程序可能会以这种方式使系统崩溃...
- 有什么办法可以使Ubuntu在内存过多(或最多)时自动杀死那些应用程序?
附加信息
- Ubuntu 12.04.3
- 内核3.5.0-44
RAM:4GB到3.7GB(与图形卡共享)。*
$ tail -n+1 /proc/sys/vm/overcommit_* ==> /proc/sys/vm/overcommit_memory <== 0 ==> /proc/sys/vm/overcommit_ratio <== 50 $ cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 4194300 344696 -1
Allocation failed
)。但是,如果不进行交换,它将冻结计算机。应该以这种方式工作(仅在使用swap时杀死)吗?
tail -n+1 /proc/sys/vm/overcommit_*
添加输出。另请参阅此处:如何配置oom-killer