Linux內(nèi)核調(diào)優(yōu)
為了讓系統(tǒng)能夠支持更大的并發(fā),除了必須安裝event擴(kuò)展之外,優(yōu)化linux內(nèi)核也是重中之重,以下優(yōu)化每一項(xiàng)都非常非常重要,請(qǐng)務(wù)必按逐一完成。
參數(shù)解釋:
max-file: 表示系統(tǒng)級(jí)別的能夠打開的文件句柄的數(shù)量。是針對(duì)整個(gè)OS而言,并不是針對(duì)用戶的。
ulimit -n: 表示控制進(jìn)程級(jí)別能夠打開的文件句柄的數(shù)量。針對(duì)當(dāng)前
shell
的當(dāng)前用戶及其啟動(dòng)的進(jìn)程的可用文件句柄控制。
查看系統(tǒng)級(jí)別能夠打開的文件句柄的數(shù)量: cat /proc/sys/fs/file-max
打開文件 /etc/sysctl.conf,增加以下設(shè)置
#該參數(shù)設(shè)置系統(tǒng)的TIME_WAIT的數(shù)量,如果超過默認(rèn)值則會(huì)被立即清除
net.ipv4.tcp_max_tw_buckets = 20000
#定義了系統(tǒng)中每一個(gè)端口最大的監(jiān)聽隊(duì)列的長(zhǎng)度,這是個(gè)全局的參數(shù)
net.core.somaxconn = 65535
#對(duì)于還未獲得對(duì)方確認(rèn)的連接請(qǐng)求,可保存在隊(duì)列中的最大數(shù)目
net.ipv4.tcp_max_syn_backlog = 262144
#在每個(gè)網(wǎng)絡(luò)接口接收數(shù)據(jù)包的速率比內(nèi)核處理這些包的速率快時(shí),允許送到隊(duì)列的數(shù)據(jù)包的最大數(shù)目
net.core.netdev_max_backlog = 30000
#此選項(xiàng)會(huì)導(dǎo)致處于NAT網(wǎng)絡(luò)的客戶端超時(shí),建議為0。Linux從4.12內(nèi)核開始移除了 tcp_tw_recycle 配置,如果報(bào)錯(cuò)"No such file or directory"請(qǐng)忽略
net.ipv4.tcp_tw_recycle = 0
#系統(tǒng)所有進(jìn)程一共可以打開的文件數(shù)量
fs.file-max = 6815744
#防火墻跟蹤表的大小。注意:如果防火墻沒開則會(huì)提示error: "net.netfilter.nf_conntrack_max" is an unknown key,忽略即可
net.netfilter.nf_conntrack_max = 2621440
net.ipv4.ip_local_port_range = 10240 65000
運(yùn)行 sysctl -p
即刻生效。
說明:
/etc/sysctl.conf 可設(shè)置的選項(xiàng)很多,其它選項(xiàng)可以根據(jù)自己的環(huán)境需要進(jìn)行設(shè)置
打開文件數(shù)
設(shè)置系統(tǒng)打開文件數(shù)設(shè)置,解決高并發(fā)下 too many open files
問題。此選項(xiàng)直接影響單個(gè)進(jìn)程容納的客戶端連接數(shù)。
Soft open files 是Linux系統(tǒng)參數(shù),影響系統(tǒng)單個(gè)進(jìn)程能夠打開最大的文件句柄數(shù)量,這個(gè)值會(huì)影響到長(zhǎng)連接應(yīng)用如聊天中單個(gè)進(jìn)程能夠維持的用戶連接數(shù), 運(yùn)行ulimit -n
能看到這個(gè)參數(shù)值,如果是1024,就是代表單個(gè)進(jìn)程只能同時(shí)最多只能維持1024甚至更少(因?yàn)橛衅渌募木浔淮蜷_)。如果開啟4個(gè)進(jìn)程維持用戶連接,那么整個(gè)應(yīng)用能夠同時(shí)維持的連接數(shù)不會(huì)超過4*1024個(gè),也就是說最多只能支持4x1024個(gè)用戶在線可以增大這個(gè)設(shè)置以便服務(wù)能夠維持更多的TCP連接。
Soft open files 修改三種方法:
第一種:在終端直接運(yùn)行 ulimit -HSn 102400
,然后重啟workerman。
這只是在當(dāng)前終端有效,退出之后,open files 又變?yōu)槟J(rèn)值。
第二種:在/etc/profile
文件末尾添加一行 ulimit -HSn 102400
,這樣每次登錄終端時(shí),都會(huì)自動(dòng)執(zhí)行。更改后需要重啟workerman。
第三種:令修改open files的數(shù)值永久生效,則必須修改配置文件:/etc/security/limits.conf
. 在這個(gè)文件后加上:
* soft nofile 1024000
* hard nofile 1024000
root soft nofile 1024000
root hard nofile 1024000
這種方法需要重啟服務(wù)器才能生效。