linux優化

【轉】Linux進程優先級的調整方法沒有root,只能調高不能調低,鬱悶。。。
 
 
linux下的進程調度優先級是從-20到19,一共40個級別,數字越大,表示進程的優先級越低。默認時候,進程的優先級是0。查看進程優先級有兩個辦法:ps和top。top命令顯示的NI列的值。或者可以使用ps -efl來查看,也是在ni列表示了進程的優先級。
進程的優先級可以在程序運行的時候設置,也可以在程序運行過程中動態的修改。
運 行的時候設置進程的優先級可以使用nice命令,比如要使得top命令運行時候的優先級是5而不是默認的0,則可以使用nice -n 5 top,來使得top命令運行在5的優先級別。如果top命令已經在運行,則有兩個辦法可以動態的調整進程的級別。可以在top中輸入r命令,然後按照提 示輸入top命令對應的進程號,再按照提示輸入要調整到哪個級別。另一個方法是使用renice命令,幫助如下:
[oracle@rac1 ~]$ renice --help
usage: renice priority [ [ -p ] pids ] [ [ -g ] pgrps ] [ [ -u ] users ]
此 命令使用也很簡單,可以調整單個進程,一個用戶或者一個組的所有進程的優先級。示例如下:renice +10 -u oracle,此命令把oracle用戶的所有進程的優先級全部調爲10,包括新創建的和已經在運行的oracle用戶的所有進程。此處的+10並不是表 示在現有級別上再往上調整10個級別,而是調整到正10的級別,所以多次運行此命令,進程的優先級不會再發生變化,將一直停留在+10級別。
注意:如果不是root權限,則侄只能降調度優先級而不能提高,即使是自己用戶的進程,自己把它調高了後,優先級也不能再被調會原來的值了,除非使用root用戶來調回去。
系統重啓後,對進程優先級的調整全部失效,所有進程的調度回到默認的初始級別。
 
 
 
 
 
內核的優化跟服務器的優化一樣,應本着穩定安全的原則。下面以64位的Centos5.5下的Squid服務器爲例來說明,待客戶端與服務器端建立TCP/IP連接後就會關閉SOCKET,服務器端連接的端口狀態也就變爲TIME_WAIT了。那是不是所有執行主動關閉的SOCKET都會進入TIME_WAIT狀態呢?有沒有什麼情況使主動關閉的SOCKET直接進入CLOSED狀態呢?答案是主動關閉的一方在發送最後一個ACK後就會進入TIME_WAIT狀態,並停留2MSL(Max Segment LifeTime)時間,這個是TCP/IP必不可少的,也就是“解決”不了的。
  TCP/IP的設計者如此設計,主要原因有兩個:
  防止上一次連接中的包迷路後重新出現,影響新的連接(經過2MSL時間後,上一次連接中所有重複的包都會消失)。
  爲了可靠地關閉TCP連接。主動關閉方發送的最後一個ACK(FIN)有可能會丟失,如果丟失,被動方會重新發FIN,這時如果主動方處於CLOSED狀態,就會響應RST而不是ACK。所以主動方要處於TIME_WAIT狀態,而不能是CLOSED狀態。另外,TIME_WAIT並不會佔用很大的資源,除非受到***。
  在Squid服務器中可輸入查看當前連接統計數的命令,如下所示:
netstat -n| awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 
LAST_ACK 14 
SYN_RECV 348 
ESTABLISHED 70 
FIN_WAIT1 229 
FIN_WAIT2 30 
CLOSING 33 
TIME_WAIT 18122
  CLOSED:無連接是活動的或正在進行中的。
  LISTEN:服務器在等待進入呼叫。
  SYN_RECV:一個連接請求已經到達,等待確認。
  SYN_SENT:應用已經開始,打開一個連接。
  ESTABLISHED:正常數據傳輸狀態。
  FIN_WAIT1:應用說它已經完成。
  FIN_WAIT2:另一邊已同意釋放。
  CLOSING:兩邊同時嘗試關閉。
  TIME_WAIT:另一邊已初始化一個釋放。
  LAST_ACK:等待所有分組死掉。
  也就是說,這條命令可以把當前系統的網絡連接狀態分類彙總。
  在Linux下高併發的Squid服務器中,TCP TIME_WAIT套接字數量經常可達兩三萬,服務器很容易就會被拖死。不過,我們可以通過修改Linux內核參數來減少Squid服務器的TIME_WAIT套接字數量,命令如下所示:
vim /etc/sysctl.conf
  然後,增加以下參數:
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000 
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章