總結一下linux效能調優

來源:互聯網
上載者:User

一.調整linux最大開啟檔案數
1.作業系統限制可以開啟的最大檔案數
cat /proc/sys/fs/file-max
2.查看目前使用者開啟檔案數
ulimit -a
ulimit -Hn
//硬限制
ulimit -Sn
//軟式節流
3.設定最大開啟檔案數
臨時設定:ulimit -n 10240 //設定為10240,可以把命令加入到使用者的profile檔案中,保證使用者登陸生效
使用者級設定:
vi /etc/security/limits.conf
添加如下行(第一列為使用者名稱,*號代碼對所有使用者生效):
user soft nofile 4096
user hard nofile 10240
說明:要使limits.conf生效,必須確保pam_limits.so檔案被加入到開機檔案中
查看/etc/pam.d/login檔案是否有記錄:session required /lib/security/pam_limits.so
系統級設定:
vi /etc/sysctl.conf
增加 fs.file-max=10240,運行/sbin/sysctl -p立即生效

二.網路參數調優
1.查看網路連接的狀態,各種狀態串連的數量
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
2.串連狀態 CLOSE_WAIT, TIME_WAIT, FIN_WAIT_2, FIN_WAIT_1, CLOSING (主要注意前3個)
TCP串連的關閉,需要4個packet
1.client --> FIN --> server  //client發送完處於狀態FIN_WAIT_1
2.server --> ACK --> client//server收到FIN發送ACK,處於CLOSE_WAIT狀態,client收到ack,狀態為FIN_WAIT_2
3.server --> FIN --> client  //server繼續發送FIN到client,server狀態置為last_ack狀態
4.client --> ACK --> server//client置為TIME_WAIT(主動關閉的最終狀態),這個狀態會持續2MSL(max segment lifetime)時間,然後關閉.
當client發送FIN時同時收到的也是FIN(沒收到ACK),則client狀態置為CLOSING,再收到ACK時置為TIME_WAIT
3.TIME_WAIT--的狀態是TCP設計者認為的關閉狀態,是TCP的癌症!TCP設計者建議MSL的值是120秒,具體實現會有所不同(暫時還不知道redhat中MSL值在哪查看或者設定).參考RFC 793
4.CLOSE_WAIT--的狀態是由於server在發送對用戶端的FIN的回複ACK,還沒有發送FIN到client端時的狀態,正常情況下,如果
 Server正常發送FIN狀態之後,會處於LAST_ACK的狀態(多久會釋放資源?).如果server端(被動關閉方)出現大量的close_wait狀態,
 則應該是在發送FIN之前,出了某些問題導致沒有發送FIN,串連就處於CLOSE_WAIT狀態!如果server出現大量的close_wait狀態的串連,
 首先應該檢查一下代碼,是否正確地關閉了網路連接,一般是程式的問題!
5.參數調優
 針對大量的CLOSE_WAIT狀態的串連:
前面說過大量的CLOSE_WAIT一般是程式沒有正確關閉網路連接造成,TCP對這種串連會使用keepalive timer來處理(TCP協議沒有規定,有些TCP實現使用,參考[電腦網路 第4版 清華大學出版社 472頁])
TCP在等待tcp_keepalive_time(redhat中預設為7200s,即2小時,類似參數不作說明,均為redhat中網路參數)時間後,會發起keep alive的探測,探測次數由tcp_keepalive_probes(預設9)設定,
探測間隔時間由tcp_keepalive_intvl(預設75)指定.即對於不活動的串連,在等7200s+75s*9=2小時11分15秒之後,TCP會終止串連!一般的WEB SERVER可以調低這幾個參數的值
如: net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_probes=5
redhat下添加以上設定到/etc/sysctl.conf執行/sbin/sysctl -p生效
 針對大量TIME_WAIT狀態的串連
net.ipv4.tcp_syncookies = 1  //表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,預設為0,表示關閉;
net.ipv4.tcp_tw_reuse = 1//重要!! 允許將TIME-WAIT sockets重新用於新的TCP串連,預設為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1 //重要!! 表示開啟TCP串連中TIME-WAIT sockets的快速回收,預設為0,表示關閉。
net.ipv4.tcp_max_tw_buckets = 15000 //表示系統同時保持TIME_WAIT通訊端的最大數量,如果超過這個數字,TIME_WAIT通訊端將立刻被清除並列印警告資訊.預設為180000.一般來說TIME_WAIT的串連佔用資源少,不會對系統造成很大影響
 另外還有一個參數
net.ipv4.tcp_fin_timeout = 30  //表示如果通訊端由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間.

幾個問題:1. 請描述TCP串連關閉的過程!

    2. TIME_WAIT狀態的作用,為什麼要有TIME_WAIT狀態

    3. net.ipv4.tcp_tw_reuse = 1 //將TIME_WAIT狀態的SOCKETS設為可重用,會導致什麼問題嗎?

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.