核心優化
net.ipv4.tcp_max_tw_buckets = 6000
timewait 的數量,預設是180000。
net.ipv4.ip_local_port_range = 1024 65000
允許系統打開的端口範圍。
net.ipv4.tcp_tw_recycle = 1
啟用timewait 快速回收。
net.ipv4.tcp_tw_reuse = 1
開啟重用。允許将TIME-WAIT sockets 重新用于新的TCP 連接配接。
net.ipv4.tcp_syncookies = 1
開啟SYN Cookies,當出現SYN 等待隊列溢出時,啟用cookies 來處理。
net.core.somaxconn = 262144
web 應用中listen 函數的backlog 預設會給我們核心參數的net.core.somaxconn 限制到128,而nginx 定義的NGX_LISTEN_BACKLOG 預設為511,是以有必要調整這個值。
net.core.netdev_max_backlog = 262144
每個網絡接口接收資料包的速率比核心處理這些包的速率快時,允許送到隊列的資料包的最大數目。
net.ipv4.tcp_max_orphans = 262144
系統中最多有多少個TCP 套接字不被關聯到任何一個使用者檔案句柄上。如果超過這個數字,孤兒連接配接将即刻被複位并列印出警告資訊。這個限制僅僅是為了防止簡單的DoS 攻擊,不能過分依靠它或者人為地減小這個值,更應該增加這個值(如果增加了記憶體之後)。
net.ipv4.tcp_max_syn_backlog = 262144
記錄的那些尚未收到用戶端确認資訊的連接配接請求的最大值。對于有128M 記憶體的系統而言,預設值是1024,小記憶體的系統則是128。
net.ipv4.tcp_timestamps = 0
時間戳可以避免序列号的卷繞。一個1Gbps 的鍊路肯定會遇到以前用過的序列号。時間戳能夠讓核心接受這種“異常”的資料包。這裡需要将其關掉。
net.ipv4.tcp_synack_retries = 1
為了打開對端的連接配接,核心需要發送一個SYN 并附帶一個回應前面一個SYN 的ACK。也就是所謂三次握手中的第二次握手。這個設定決定了核心放棄連接配接之前發送SYN+ACK 包的數量。
net.ipv4.tcp_syn_retries = 1
在核心放棄建立連接配接之前發送SYN 包的數量。
net.ipv4.tcp_fin_timeout = 1
如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2 狀态的時間。對端可以出錯并永遠不關閉連接配接,甚至意外當機。預設值是60 秒。2.2 核心的通常值是180 秒,3你可以按這個設定,但要記住的是,即使你的機器是一個輕載的WEB 伺服器,也有因為大量的死套接字而記憶體溢出的風險,FIN- WAIT-2 的危險性比FIN-WAIT-1 要小,因為它最多隻能吃掉1.5K 記憶體,但是它們的生存期長些。
net.ipv4.tcp_keepalive_time = 30
當keepalive 起用的時候,TCP 發送keepalive 消息的頻度。預設是2 小時。
使上述修改生效:/sbin/sysctl -p
網絡優化
啟用DNS緩存:NSCD( NSCD,Name Service Cache Daemon,是服務緩存守護程序,它為NIS和LDAP等服務提供更快的驗證。)
啟動DNS緩存後可以本地緩存DNS解析資訊,提高解析速度,但是這樣會造成DNS解析資訊滞後,是以不适合經常切換DNS的服務。如果域名解析需要更改,就需要手動重新整理緩存
配置DNS緩存,編輯
/etc/nscd.conf
檔案,增加如下一行可以開啟本地DNS Cache
enable-cache hosts yes
啟動NSCD程序,預設該服務在Redhat或Centos下是關閉的,可以通過以下指令開啟
> service nscd start
清除指定類型緩存,NSCD緩存DB檔案在
/var/db/nscd
> nscd -i passwd
> nscd -i group
> nscd -i hosts
檔案優化
linux 預設值 open files 和 max user processes 為 1024,當負載較大時,很容易遇到
error: too many open files
,是以需要将該值調大。
使用
ulimit -a
可以檢視目前系統的所有限制值,
使用ulimit -n
可以檢視目前的最大打開檔案數。
有如下四種修改方式:
-
echo 284289 > /proc/sys/fs/file-max
- 在/etc/rc.local 中增加一行
(需要機器重新開機才能生效)ulimit -SHn 65535
- 在/etc/profile 中增加一行
(執行ulimit -SHn 65535
即可生效)source /etc/profile
- 在/etc/security/limits.conf 最後增加:(重新登入即可生效)
- soft nofile 65535
- hard nofile 65535
- soft nproc 65535
- hard nproc 65535
線程優化
修改系統線程棧大小。無論是程序棧還是線程棧,當棧被耗盡時,俗稱”爆棧”時,都會觸發段錯誤segment falut。預設情況下,Linux線程棧大小為10240,即10M,可以通過
ulimit -s
檢視預設棧大小。
修改系統線程棧大小為1M,有兩種方式:
- 在
,加入/etc/rc.local
,需要機器重新開機才能生效ulimit -s 1024
- 在/etc/security/limits.conf 中 新增
,重新登入即可生效* soft stack 102400