Linux下TCP最大连接数受限问题
一、 文件數(shù)限制修改
1、用戶級(jí)別
查看Linux系統(tǒng)用戶最大打開文件限制:
# ulimit -n
1024
(1) vi /etc/security/limits.conf
mysql soft nofile 10240
mysql hard nofile 10240
其中mysql指定了要修改哪個(gè)用戶的打開文件數(shù)限制。
可用'*'號(hào)表示修改所有用戶的限制;soft或hard指定要修改軟限制還是硬限制;10240則指定了想要修改的新的限制值,即最大打開文件數(shù)(請(qǐng)注意軟限制值要小于或等于硬限制)。
(2) vi /etc/pam.d/login
session required /lib/security/pam_limits.so
這是告訴Linux在用戶完成系統(tǒng)登錄后,應(yīng)該調(diào)用pam_limits.so模塊來設(shè)置系統(tǒng)對(duì)該用戶可使用的各種資源數(shù)量的最大限制(包括用戶可打開的最大文件數(shù)限制)。
而pam_limits.so模塊就會(huì)從/etc/security/limits.conf文件中讀取配置來設(shè)置這些限制值。
2、Linux系統(tǒng)級(jí)別
查看Linux系統(tǒng)對(duì)同時(shí)打開文件數(shù)的硬限制:
# sysctl -a|grep file-max
fs.file-max = 65535
這表明這臺(tái)Linux系統(tǒng)最多允許同時(shí)打開(即包含所有用戶打開文件數(shù)總和)65535個(gè)文件,是Linux系統(tǒng)級(jí)硬限制,所有用戶級(jí)的打開文件數(shù)限制都不會(huì)超過這個(gè)數(shù)值。
通常這個(gè)系統(tǒng)級(jí)硬限制是Linux系統(tǒng)在啟動(dòng)時(shí)根據(jù)系統(tǒng)硬件資源狀況計(jì)算出來的最佳的最大同時(shí)打開文件數(shù)限制。
(1) vi /etc/sysctl.conf
fs.file-max = 1000000
立即生效:
# sysctl -p
二、 網(wǎng)絡(luò)端口限制修改
查看Linux系統(tǒng)最大追蹤TCP連接數(shù)量:
# sysctl -a | grep ipv4.ip_conntrack_max
net.ipv4.ip_conntrack_max = 20000
這表明系統(tǒng)將對(duì)最大跟蹤的TCP連接數(shù)限制默認(rèn)為20000。
查看Linux系統(tǒng)端口范圍:
# sysctl -a | grep ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 1024 30000
注意:
每個(gè)TCP客戶端連接都要占用一個(gè)唯一的本地端口號(hào)(此端口號(hào)在系統(tǒng)的本地端口號(hào)范圍限制中),如果現(xiàn)有的TCP客戶端連接已將所有的本地端口號(hào)占滿。將不能創(chuàng)建新的TCP連接。
(1) vi /etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024??? 65535
net.ipv4.ip_conntrack_max = 20000
如果按上述端口范圍進(jìn)行設(shè)置,則理論上單獨(dú)一個(gè)進(jìn)程最多可以同時(shí)建立60000多個(gè)TCP客戶端連接。
如果按上述參數(shù)進(jìn)行設(shè)置,則理論上單獨(dú)一個(gè)進(jìn)程最多可以同時(shí)建立20000多個(gè)TCP客戶端連接。
備注:
對(duì)mysql用戶可同時(shí)打開文件數(shù)設(shè)置為10240個(gè);
將Linux系統(tǒng)可同時(shí)打開文件數(shù)設(shè)置為1000000個(gè)(一定要大于對(duì)用戶的同時(shí)打開文件數(shù)限制);
將Linux系統(tǒng)對(duì)最大追蹤的TCP連接數(shù)限制為20000個(gè)(但是,建議設(shè)置為10240;因?yàn)閷?duì)mysql用戶的同時(shí)打開文件數(shù)已經(jīng)限制在10240個(gè);且較小的值可以節(jié)省內(nèi)存);
將linux系統(tǒng)端口范圍配置為1024~30000(可以支持60000個(gè)以上連接,不建議修改;默認(rèn)已經(jīng)支持20000個(gè)以上連接);
綜合上述四點(diǎn),TCP連接數(shù)限制在10140個(gè)。
這10240個(gè)文件中還得除去每個(gè)進(jìn)程必然打開的標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)錯(cuò)誤,服務(wù)器監(jiān)聽 socket,進(jìn)程間通訊的unix域socket等文件。
因此,當(dāng)需要對(duì)TCP連接數(shù)進(jìn)行調(diào)整時(shí)只需要調(diào)整ulimit參數(shù)。
?
Linux下查看tcp連接數(shù)及狀態(tài)命令:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
轉(zhuǎn)載于:https://www.cnblogs.com/luckyall/p/6557113.html
總結(jié)
以上是生活随笔為你收集整理的Linux下TCP最大连接数受限问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mapreduce shuffle过程
- 下一篇: ThinkPHP 中M方法和D方法的具体