Posted on 2010-12-27 20:19
S.l.e!ep.¢% 閱讀(1346)
評論(0) 編輯 收藏 引用 所屬分類:
Unix
前幾天在網易博客上發了一篇“linux中限制用戶進程CPU占用率”的文章,談到限制進程CPU占用率的問題,給出了一個shell腳本代碼如下:
renice +10 `ps aux | awk ’{ if ($3 > 0.8 && id -u $1 > 500) print $2}’`
? ? 其中用到ps獲取進程信息,其實ps中%CPU一列的意義是進程實際占有CPU時間和他存活時間的比值,這個值能反應進程對CPU的消耗,但不能準確反應進程所占CPU時間占整個系統CPU的百分比。而top輸出中的%CPU這一列正是進程所占CPU時間占整個系統CPU的百分比,用于限制進程CPU占用率更加合理,同時%MEM一列還反應了進程占用內存的百分比,能用于限制進程內存占用率。shell腳本代碼如下:
#!/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中設置。