使用ulimit进行资源限制

2013年12月08日

写代码的水平不到家发生内存泄漏,或者有其他程序消耗过多的内存资源啥的,往往会造成Linux卡死,直到系统内存和swap都给用完,系统强制终止该程序后,基本上系统才对你的Ctrl+C啊之类的产生反应.

我一台2G内存的笔记本,你一个firefox就占掉1G的内存,不把你干掉等死机啊?!一淘的那个读取价格变化的js脚本貌似就老是出问题,不停地申请内存,这个时候也不能叫死机,系统忙着处理它的内存请求了,没时间响应我的键盘输入.貌似有说用about:configbrowser.cache.memory.capacity的值来限制内存用量的,但是看官方文档这玩意儿好久之前貌似就没用了.我设置了也没啥办法.

有一个命令ulimit可以限制一个进程及其子进程最多可以使用的系统资源.于是写了个脚本替换掉firefox的启动程序

#!/bin/bash

ulimit -v 800000
/usr/bin/firefox-real

参数-v表示限制虚拟内存使用量,后面的数字是以KB为单位的.

用ulimit只限制当前进程及子进程的资源实用,限制用户(组)可以修改/etc/security/limits.conf.还有cgroups也有此功能.