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中設置。   本頁內容為:linux上限制用戶進程數、cpu占用率、內存使用率等,該文章本站轉載自網絡,如有侵權請告之,我們將會及時將其刪除,其正文內容如下:

edit /etc/pam.d/login
#%PAM-1.0 auth required /lib/security/pam_securetty.so auth required /lib/security/pam_pwdb.so shadow nullok auth required /lib/security/pam_nologin.so account required /lib/security/pam_pwdb.so password required /lib/security/pam_cracklib.so password required /lib/security/pam_pwdb.so shadow nullok use_authtok session required /lib/security/pam_pwdb.so session required /lib/security/pam_limits.so
you have to add the last two lines
edit /etc/security/limits.conf
可帶參數: issue=filename:指定其他配置文件,而不是缺省的/etc/issue. noesc:不對配置文件中的轉移字符進行解釋。
配置文件說明: debug:將調試信息寫入日志 conf=filename:指定配置文件
配置文件說明:該配置文件每一行(一個條目)的語法如下:
在這里 可以是 用戶名 用戶組名,采用@group的語法 通配符*,表示任何 可以是 soft-表示軟限制,可以超過該限制 hard-表示硬限制,有root設定,內核執行,不可以超過該限制 可以是 core-core文件大小 (KB) data-最大數據大小(KB) fsize-最大文件大小(KB) memlock-最大可用內存空間(KB) nofile-最大可以打開的文件數量 rss-最大可駐留空間(KB) stack-最大堆棧空間(KB) cpu-最大CPU使用時間(MIN) nproc-最大運行進程數 as-地址空間限制 maxlogins-某一用戶可以登錄到系統的最多次數 locks-最大鎖定文件數目 需要注意的是,如果無限制可以使用”-”號,並且針對用戶限制的優先級要比針對組的 優先級高。
實際上,在linux服務器中,用戶進程運行很長時間是可以接受的。而占用CPU過高則讓其他用戶無法忍受,而其很有可能是用戶程序有問題,這個時候系統應該自動阻止這樣的進程繼續消耗系統資源。
最簡單的方法就是通過ps發現CPU占用率超過某個限制的用戶進程,然后將該進程殺死,這種做法很暴力,而且用戶發現他的進程被殺以后很可能又啟動進程,這樣惡性循環。
有一種折中的方法,不是將目標進程殺死,而是適當調整其nice值,具體見如下shell程序:
renice +10 `ps aux | awk '{ if ($3 > 0.8 && id -u $1 > 500) print $2}'`
轉載地址:http://blog.sina.com.cn/s/blog_53689eaf0101b5xe.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM