《Linux服務器調優》要點:
本文介紹了Linux服務器調優,希望對您有用。如果有疑問,可以聯系我們。
安裝一臺新的Linux服務器之后都要做些配置調整工作,優化一下系統,以前零零碎碎記錄過一些,這里集中整理一下.
Linux內核參數
http://space.itpub.net/17283404/viewspace-694350
net.ipv4.tcp_syncookies = 1
表示開啟SYN Cookies.當出現SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關閉;什么是SYN Cookies:http://www.ibm.com/developerworks/cn/linux/l-syncookie/
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_fin_timeout = 30
表示如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間.
net.ipv4.tcp_keepalive_time = 1200
表示當keepalive起用的時候,TCP發送keepalive消息的頻度.缺省是2小時.
net.ipv4.tcp_keepalive_probes = 5
TCP發送keepalive探測以確定該連接已經斷開的次數.(注意:保持連接僅在SO_KEEPALIVE套接字選項被打開是才發送.次數默認不需要修改,當然根據情形也可以適當地縮短此值.設置為5比較合適)
net.ipv4.tcp_keepalive_intvl = 15
探測消息發送的頻率,乘以tcp_keepalive_probes就得到對于從開始探測以來沒有響應的連接殺除的時間.默認值為75秒,也就是沒有活動的連接將在大約11分鐘以后將被丟棄.(對于普通應用來說,這個值有一些偏大,可以根據需要改小.特別是web類服務器需要改小該值,15是個比較合適的值)
net.ipv4.ip_local_port_range = 1024 65000
表示用于向外連接的端口范圍.缺省情況下很?。?2768到61000,改為1024到65000.
net.ipv4.tcp_max_syn_backlog = 8192
表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網絡連接數.
net.ipv4.ip_conntrack_max = 655360
在內核內存中netfilter可以同時處理的“任務”(連接跟蹤條目)another voice-不要盲目增加ip_conntrack_max: http://blog.csdn.net/dog250/article/details/7107537
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180
跟蹤的連接超時結束時間
net.ipv4.tcp_max_tw_buckets = 819200
表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除并打印警告信息.默認為180000.設為較小數值此項參數可以控制TIME_WAIT套接字的最大數量,避免服務器被大量的TIME_WAIT套接字拖死.
net.core.somaxconn = 262144
定義了系統中每一個端口最大的監聽隊列的長度, 對于一個經常處理新連接的高負載 web服務環境來說,默認的 128 太小了.
net.core.netdev_max_backlog = 262144
該參數決定了, 每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目, 不要設的過大
net.ipv4.tcp_max_orphans = 262144
系統所能處理不屬于任何進程的TCP sockets最大數量.假如超過這個數量,那么不屬于任何進程的連接會被立即reset,并同時顯示警告信息.之所以要設定這個限制﹐純粹為了抵御那些簡單的 DoS 攻擊﹐千萬不要依賴這個或是人為的降低這個限制,更應該增加這個值(如果增加了內存之后).每個孤兒套接字最多能夠吃掉你64K不可交換的內存.
net.ipv4.tcp_orphan_retries = 3
本端試圖關閉TCP連接之前重試多少次.缺省值是7,相當于50秒~16分鐘(取決于RTO).如果你的機器是一個重載的WEB服務器,你應該考慮減低這個值,因為這樣的套接字會消耗很多重要的資源.參見tcp_max_orphans.
net.ipv4.tcp_timestamps = 0
時間戳,0關閉, 1開啟,在(請參考RFC 1323)TCP的包頭增加12個字節, 關于該配置對TIME_WAIT的影響及可能引起的問題: http://huoding.com/2012/01/19/142 , Timestamps 用在其它一些東西中﹐可以防范那些偽造的 sequence 號碼.一條1G的寬帶線路或許會重遇到帶 out-of-line數值的舊sequence 號碼(假如它是由于上次產生的).Timestamp 會讓它知道這是個 ‘舊封包’.(該文件表示是否啟用以一種比超時重發更精確的方法(RFC 1323)來啟用對 RTT 的計算;為了實現更好的性能應該啟用這個選項.)
net.ipv4.tcp_synack_retries = 1
tcp_synack_retries 顯示或設定 linux 核心在回應 SYN 要求時會嘗試多少次重新發送初始 SYN,ACK 封包后才決定放棄.這是所謂的三段交握 (threeway handshake) 的第二個步驟.即是說系統會嘗試多少次去建立由遠端啟始的 TCP 連線.tcp_synack_retries 的值必須為正整數,并不能超過 255.因為每一次重新發送封包都會耗費約 30 至 40 秒去等待才決定嘗試下一次重新發送或決定放棄.tcp_synack_retries 的缺省值為 5,即每一個連線要在約 180 秒 (3 分鐘) 后才確定逾時.
net.ipv4.tcp_syn_retries = 1
對于一個新建連接,內核要發送多少個 SYN 連接哀求才決定放棄.不應該大于255,默認值是5,對應于180秒左右時間.(對于大負載而物理通信良好的網絡而言,這個值偏高,可修改為2.這個值僅僅是針對對外的連接,對進來的連接,是由tcp_retries1 決定的)
net.ipv4.tcp_retries1 = 3
放棄回應一個TCP連接哀求前﹐需要進行多少次重試.RFC 規定最低的數值是3﹐這也是默認值﹐根據RTO的值大約在3秒 - 8分鐘之間.(注意:這個值同時還決定進入的syn連接)
net.ipv4.tcp_retries2 = 15
在丟棄激活(已建立通訊狀況)的TCP連接之前﹐需要進行多少次重試.默認值為15,根據RTO的值來決定,相當于13-30分鐘(RFC1122規定,必須大于100秒).(這個值根據目前的網絡設置,可以適當地改小,我的網絡內修改為了5)
net.ipv4.tcp_sack = 1
使 用 Selective ACK﹐它可以用來查找特定的遺失的數據報— 因此有助于快速恢復狀態.該文件表示是否啟用有選擇的應答(Selective Acknowledgment),這可以通過有選擇地應答亂序接收到的報文來提高性能(這樣可以讓發送者只發送丟失的報文段).(對于廣域網通信來說這個選項應該啟用,但是這會增加對 CPU 的占用.)
net.ipv4.tcp_fack = 1
打開FACK擁塞避免和快速重傳功能.(注意,當tcp_sack設置為0的時候,這個值即使設置為1也無效)
net.ipv4.tcp_dsack = 1
允許TCP發送”兩個完全相同”的SACK.
net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.all.rp_filter = 1
1 - do source validation by reversed path, as specified in RFC1812 Recommended option for single homed hosts and stub network routers. Could cause troubles for complicated (not loop free) networks running a slow unreliable protocol (sort of RIP), or using static routes.
0 - No source validation.
net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1
停用 ipv6 模塊
vm.swappiness=5
默認60, Swappiness can be set to values between 0 and 100 inclusive. A low value means the kernel will try to avoid swapping as much as possible where a higher value instead will make the kernel aggressively try to use swap space.
others:
# 避免放大攻擊
文件數限制
在繁忙的服務器上,必須要修改文件數限制,否則很快就會遇見too many open file的錯誤
使用limit -a 可以查看當前文件數限制, limit -n xxxx 修改的是當期用戶當期環境的限制,重啟和退出用戶就恢復了
與文件數相關的有三處
內核參數fs.file-max
file-max的值是內核所能分配到的最大句柄數.
內核參數fs.file-nr
它有三個值:
配置文件 /etc/security/limits.conf ,加入下面兩行
* soft nofile 65536
Nginx配置優化
介紹nginx變量和配置很好的文檔: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
nginx.conf
#運行用戶user www-data;#nginx進程數,建議和CPU總核心數相同worker_processes 4;pid /run/nginx.pid;#一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)與nginx進程數相除,但是nginx分配哀求并不均勻,所以建議與ulimit -n的值保持一致.worker_rlimit_nofile 65535;#工作模式與連接數上限events {
歡迎參與《Linux服務器調優》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/8006.html