為了讓系統能夠支援更大的併發,除了必須安裝event擴充套件之外,最佳化linux核心也是重中之重,以下最佳化每一項都非常非常重要,請務必按逐一完成。
引數解釋:
max-file: 表示系統級別的能夠開啟的檔案控制代碼的數量。是針對整個OS而言,並不是針對使用者的。
ulimit -n: 表示控制程序級別能夠開啟的檔案控制代碼的數量。針對當前
shell
的當前使用者及其啟動的程序的可用檔案控制代碼控制。
檢視系統級別能夠開啟的檔案控制代碼的數量: cat /proc/sys/fs/file-max
開啟檔案 /etc/sysctl.conf,增加以下設定
#該引數設定系統的TIME_WAIT的數量,如果超過預設值則會被立即清除 net.ipv4.tcp_max_tw_buckets = 20000 #定義了系統中每一個埠最大的監聽佇列的長度,這是個全域性的引數 net.core.somaxconn = 65535 #對於還未獲得對方確認的連線請求,可儲存在佇列中的最大數目 net.ipv4.tcp_max_syn_backlog = 262144 #在每個網路介面接收資料包的速率比核心處理這些包的速率快時,允許送到佇列的資料包的最大數目 net.core.netdev_max_backlog = 30000 #此選項會導致處於NAT網路的客戶端超時,建議為0。Linux從4.12核心開始移除了 tcp_tw_recycle 配置,如果報錯"No such file or directory"請忽略 net.ipv4.tcp_tw_recycle = 0 #系統所有程序一共可以開啟的檔案數量 fs.file-max = 6815744 #防火牆跟蹤表的大小。注意:如果防火牆沒開則會提示error: "net.netfilter.nf_conntrack_max" is an unknown key,忽略即可 net.netfilter.nf_conntrack_max = 2621440 net.ipv4.ip_local_port_range = 10240 65000
執行 sysctl -p
即刻生效。
說明:
/etc/sysctl.conf 可設定的選項很多,其它選項可以根據自己的環境需要進行設定
開啟檔案數
設定系統開啟檔案數設定,解決高併發下 too many open files
問題。此選項直接影響單個程序容納的客戶端連線數。
Soft open files 是Linux系統引數,影響系統單個程序能夠開啟最大的檔案控制代碼數量,這個值會影響到長連線應用如聊天中單個程序能夠維持的使用者連線數, 執行ulimit -n
能看到這個引數值,如果是1024,就是代表單個程序只能同時最多隻能維持1024甚至更少(因為有其它檔案的控制代碼被開啟)。如果開啟4個程序維持使用者連線,那麼整個應用能夠同時維持的連線數不會超過4*1024個,也就是說最多隻能支援4x1024個使用者線上可以增大這個設定以便服務能夠維持更多的TCP連線。
Soft open files 修改三種方法:
第一種:在終端直接執行 ulimit -HSn 102400
,然後重啟workerman。
這只是在當前終端有效,退出之後,open files 又變為預設值。
第二種:在/etc/profile
檔案末尾新增一行 ulimit -HSn 102400
,這樣每次登入終端時,都會自動執行。更改後需要重啟workerman。
第三種:令修改open files的數值永久生效,則必須修改配置檔案:/etc/security/limits.conf
. 在這個檔案後加上:
* soft nofile 1024000 * hard nofile 1024000 root soft nofile 1024000 root hard nofile 1024000
這種方法需要重啟伺服器才能生效。