Posted on 2010-12-27 20:19
S.l.e!ep.¢% 閱讀(1348)
評論(0) 編輯 收藏 引用 所屬分類:
Unix
前幾天在網(wǎng)易博客上發(fā)了一篇“l(fā)inux中限制用戶進程CPU占用率”的文章,談到限制進程CPU占用率的問題,給出了一個shell腳本代碼如下:
renice +10 `ps aux | awk ’{ if ($3 > 0.8 && id -u $1 > 500) print $2}’`
? ? 其中用到ps獲取進程信息,其實ps中%CPU一列的意義是進程實際占有CPU時間和他存活時間的比值,這個值能反應(yīng)進程對CPU的消耗,但不能準確反應(yīng)進程所占CPU時間占整個系統(tǒng)CPU的百分比。而top輸出中的%CPU這一列正是進程所占CPU時間占整個系統(tǒng)CPU的百分比,用于限制進程CPU占用率更加合理,同時%MEM一列還反應(yīng)了進程占用內(nèi)存的百分比,能用于限制進程內(nèi)存占用率。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
? ? 以后每個一分鐘就會檢查一次,調(diào)整占用50%以上CPU或25%內(nèi)存的進程的nice值,從而使這樣的進程優(yōu)先級變低,被調(diào)度的機會減少,同時會向root發(fā)郵件提示該進程被調(diào)整過。
? ? 不過,限制內(nèi)存使用最佳還是用PAM,RedHat能在/etc/security/limits.conf中設(shè)置。