周末加班,ssh登入伺服器超慢,top查看系統負載,達到12以上。跟蹤發現,是其他同事利用周末,跑了一堆程式。
系統反應慢,怎麼辦?
兩種辦法:
(一)降低其他使用者程式的優先順序。
執行top命令:
1 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND2 20211 lix 20 0 5703m 3.4g 558m S 473.4 43.6 662:41.75 datai3 5748 zhangren 20 0 133m 45m 2324 R 56.8 0.6 2572:29 nxagent4 2684 kdm 20 0 261m 3380 2184 S 6.3 0.0 45:46.62 kdm_greet5 28597 zhangren 30 10 31388 1772 1432 S 6.3 0.0 0:03.75 fuzzyflakes6 28610 root 20 0 23292 1596 1092 R 6.3 0.0 0:00.01 top7 1 root 20 0 10636 24 0 S 0.0 0.0 0:13.57 init
解釋如下:
USER : 代表執行者的身份
PID : 代表這個進程的代號
PR:代表這個進程可被執行的優先順序,其值越小越早被執行
NI :代表這個進程的nice值
這裡的前面的兩個個資訊,我們都是比較好容易理解的,但是後面的兩個奇怪的資訊,一個是PR,一個是NI,這到底是什麼東西?相對而言,PR也還是比較好理解的,即進程的優先順序,或者通俗點說就是程式被CPU執行的先後順序,此值越小進程的優先順序別越高。那NI呢?就是我們所要說的nice值了,其表示進程可被執行的優先順序的修正數值。如前面所說,PR值越小越快被執行,那麼加入nice值後,將會使得PR變為:PR(new)=PR(old)+nice。這樣,當nice值為負值的時候,那麼該程式將會優先順序值將變小,即其優先順序會變高,則其越快被執行。
到目前為止,更需要強調一點的是,進程的nice值不是進程的優先順序,他們不是一個概念,但是進程nice值會影響到進程的優先順序變化。
修改進程優先順序的命令主要有兩個:nice,renice
1、一開始執行程式就指定nice值:nice
nice -n -5 /usr/local/mysql/bin/mysqld_safe &
nice 命令詳解
功能說明:設定優先權。
語 法:nice [-n <優先等級>][--help][--version][執行指令]
補充說明:nice指令可以改變程式執行的優先權等級。
參 數:-n<優先等級>或-<優先等級>或–adjustment=<優先等級> 設定欲執行的指令的優先權等級。等級的範圍從-20-19,其中-20最高,19最低,只有系統管理者可以設定負數的等級。
–help 線上協助。
–version 顯示版本資訊。
—————————————————————————
2.1、調整已存在進程的nice:renice
renice -5 -p 5200
#PID為5200的進程nice設定為-5(而不是在原值上-5)
renice 命令詳解
功能說明:調整優先權。
語 法:renice [優先等級][-g <程式群組名稱>...][-p <程式識別碼>...][-u <使用者名稱稱>...]
補充說明:renice指令可重新調整程式執行的優先權等級。預設是以程式識別碼指定程式調整其優先權,您亦可以指定程式群組或使用者名稱稱調整優先權等級,並修改所有隸屬於該程式群組或使用者的程式的優先權。等級範圍從-20–19,只有系統管理者可以改變其他使用者程式的優先權,也僅有系統管理者可以設定負數等級。注意:nice值越大,進程優先順序值越大,CPU上啟動並執行機會就越小。
參 數:
-g <程式群組名稱> 使用程式群組名稱,修改所有隸屬於該程式群組的程式的優先權。
-p <程式識別碼> 改變該程式的優先權等級,此參數為預設值。
-u <使用者名稱稱> 指定使用者名稱稱,修改所有隸屬於該使用者的程式的優先權。
http://blog.csdn.net/codestinity/article/details/7496962
我使用如下命令降低某個使用者的所有程式的優先順序:
renice +20 -u zhangrenxxxxx
恢複正常:
renice 0 -u zhangrenxxxxx
(二)降低其他使用者程式的優先順序後,系統負載短時間內還沒有降下來,於是嘗試:使用skill暫停其他使用者的所有進程。
skill -STOP -u zhangrenxxxx
暫停使用者zhangrenxxxx的所所有進程。
skill -CONT -u zhangrenxxxxx
恢複使用者zhangrenxxxx的所所有進程。
參考資料:http://www.jb51.net/LINUXjishu/57935.html
至此,系統負載回複正常了。
注意:最後別忘了恢複其他使用者程式的正常狀態哦。
linux使用sed截取檔案:
sed -n '起始行號,結束行號p' 檔案名稱
注意:起始行號是從1開始的,而非0。
例如:sed -n '1,2000p' a.txt