如何限制linux所有进程可使用的总内存?

现在是一个24核机器上跑很多种程序 有的占用cpu多,有的占用内存多,cpu一直100%没问题,但是内存一到100%就死机,linux系统里可以设置什么东西使所有进程总共只能使用90%么,这样系统内存不耗尽就不会死机了。

下面的shell脚本可以实时的监控系统中各个进程的CPU和内存的占用情况,用于限制进程CPU占用 率更加合理。

#!/bin/sh
PIDS=`top -bn 1 | grep "^ *[1-9]" | awk â€™{ if($9 > 50 || $10 > 25 && id -u $2 > 500) print $1}’`
for PID in $PIDS
do
        renice +10 $PID
        echo "renice +10 $PID"
done

能够将这个脚本放到cron中运行,比如每分钟检查一次,只需以root身份添加crontab项:
#crontab -e
* * * * * limit.sh
    以后每个一分钟就会检查一次,调整占用50%以上CPU或25%内存的进程的nice值,从而使这样的进程优先级变低,被调度的机会减少,同时会向root发邮件提示该进程被调整过。
    但是,限制内存使用最好还是用PAM,RedHat能够在/etc/security/limits.conf中配置。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-01
LINUX内存一个是程序占用,一个是读写文件也需要占用内存,很多被占用的内存,并不是马上被释放,而是其他程序启动后自动释放给新程序用的,你的内存到100%就死,肯定是应用软件本身有问题。系统自己就有参数会控制内存使用不到100%的追问

比如说已经有很多进程在跑 用掉了90%的内存 突然又要跑一个大的任务 这个任务正常跑的时候要占用20%的内存 这么一来 投上去的话过会儿就死了 有没有什么方法能控制让其投上去也跑不起来或者其他样子能避免系统死机

另:我们自己写个了监控脚本 如果内存使用超过95%就kill一个最新投放的任务 但是这几次这个脚本都没来得及起作用 整个系统就死了 是不是资源都占用光了 连脚本都没法执行了呢

追答

内存这么紧张,你就扩内存吧

本回答被网友采纳
第2个回答  2011-05-04
可能是应用程序存在内存泄露吧,不过死机倒不至于,至多是操纵系统杀死占用内存过多的应用。

不行的话,就对应用程序设置资源限制,或者自己轮询来监测系统。追问

系统已经对键盘无响应了 怎么杀进程?

相似回答