设为首页
收藏本站
开启辅助访问
切换到窄版
请
登录
后使用快捷导航
没有帐号?
立即注册
用户名
Email
自动登录
找回密码
密码
登录
立即注册
快捷导航
首页
开放免费注册
搜索
搜索
热搜:
活动
交友
discuz
本版
文章
帖子
群组
用户
仓酷云
»
社区
›
程序开发 Program
›
Linux
›
来一发CentOS下修正TCP毗连数
返回列表
查看:
497
|
回复:
8
[CentOS(社区)]
来一发CentOS下修正TCP毗连数
[复制链接]
变相怪杰
该用户已被删除
电梯直达
楼主
发表于 2015-1-14 20:29:53
|
只看该作者
|
倒序浏览
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有帐号?
立即注册
x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!
1、
文件数限定修正
(1)vi
/etc/security/limits.conf
到场:
*softnofile32768
*hardnofile32768
保留并加入。新登录一个ssh窗口(大概本机从头登录),ulimit-n,发明已变动过去。可是如许还不敷,当毗连凌驾1024后,仍是会报文件句柄毛病。这就必要变动内核参数了。
vi/ect/sysctl.conf
到场
fs.file-max=32768
(2)vi
/etc/pam.d/login
sessionrequired/lib/security/pam_limits.so
2、
收集端口限定修正
(1)vi/etc/rc.d/rc.local
/sbin/modprobeip_conntrack#
加载
ip_contrack
模块
#/sbin/sysctl
–p#
使
/etc/sysctl.conf
的设置失效,依据实践情形来决意是不是增加此下令
[root@AS4U8~]#sysctl-a|grep"net.ipv4.ip"
net.ipv4.ip_conntrack_max=16384
这标明将体系对最年夜跟踪的
TCP
毗连数限定默许为
16384
。请注重,此限定值要只管小,以节俭对内核内存的占用
(2)vi/etc/sysctl.conf
net.ipv4.ip_local_port_range=102465000
net.ipv4.ip_conntrack_max=10240
此限定值要只管小,以节俭对内核内存的占用。
-------------------------------------------------------------------------------------------------
具体讲授
:
1
、修正用户历程可翻开文件数限定
在
Linux
平台上,不管编写客户端步伐仍是办事端步伐,在举行高并发
TCP
毗连处置时,最高的并发数目都要遭到体系对用户单一历程同时可翻开文件数目的限定
(
这是由于体系为每一个
TCP
毗连都要创立一个
socket
句柄,每一个
socket
句柄同时也是一个文件句柄
)
。可以使用
ulimit
下令检察体系同意以后用户历程翻开的文件数限定:
[speng@as4~]$ulimit-n
1024
这暗示以后用户的每一个历程最多同意同时翻开
1024
个文件,这
1024
个文件中还得撤除每一个历程一定翻开的尺度输出,尺度输入,尺度毛病,办事器监听
socket
,历程间通信的
unix
域
socket
等文件,那末剩下的可用于客户端
socket
毗连的文件数就只要也许
1024-10=1014
个摆布。也就是说缺省情形下,基于
Linux
的通信步伐最多同意同时
1014
个
TCP
并发毗连。
关于想撑持更高数目的
TCP
并发毗连的通信处置步伐,就必需修正
Linux
对以后用户的历程同时翻开的文件数目的软限定
(softlimit)
和硬限定
(hardlimit)
。个中软限定是指
Linux
在以后体系可以接受的局限内进一步限定用户同时翻开的文件数;硬限定则是依据体系硬件资本情况
(
次要是体系内存
)
盘算出来的体系最多可同时翻开的文件数目。一般软限定小于或即是硬限定。
修正上述限定的最复杂的举措就是利用
ulimit
下令:
[speng@as4~]$ulimit-n<file_num>
上述下令中,在
<file_num>
中指定要设置的单一历程同意翻开的最年夜文件数。假如体系回显相似于“
Operationnotpermitted
”之类的话,申明上述限定修正失利,实践上是由于在
<file_num>
中指定的数值凌驾了
Linux
体系对该用户翻开文件数的软限定或硬限定。因而,就必要修正
Linux
体系对用户的关于翻开文件数的软限定和硬限定。
第一步,修正
/etc/security/limits.conf
文件,在文件中增加以下行:
spengsoftnofile10240
spenghardnofile10240
个中
speng
指定了要修正哪一个用户的翻开文件数限定,可用
*
号暗示修正一切用户的限定;
soft
或
hard
指定要修正软限定仍是硬限定;
10240
则指定了想要修正的新的限定值,即最年夜翻开文件数
(
请注重软限定值要小于或即是硬限定
)
。修正完后保留文件。
第二步,修正
/etc/pam.d/login
文件,在文件中增加以下行:
sessionrequired/lib/security/pam_limits.so
这是告知
Linux
在用户完成体系登录后,应当挪用
pam_limits.so
模块来设置体系对该用户可以使用的各类资本数目的最年夜限定
(
包含用户可翻开的最年夜文件数限定
)
,而
pam_limits.so
模块就会从
/etc/security/limits.conf
文件中读取设置来设置这些限定值。修正完后保留此文件。
第三步,检察
Linux
体系级的最年夜翻开文件数限定,利用以下下令:
[speng@as4~]$cat/proc/sys/fs/file-max
12158
这标明这台
Linux
体系最多同意同时翻开
(
即包括一切用户翻开文件数总和
)12158
个文件,是
Linux
体系级硬限定,一切用户级的翻开文件数限定都不该凌驾这个数值。一般这个体系级硬限定是
Linux
体系在启动时依据体系硬件资本情况盘算出来的最好的最年夜同时翻开文件数限定,假如没有特别必要,不该该修正此限定,除非想为用户级翻开文件数限定设置凌驾此限定的值。修正此硬限定的***是修正
/etc/rc.local
剧本,在剧本中增加以下行:
echo22158>/proc/sys/fs/file-max
这是让
Linux
在启动完成后强即将体系级翻开文件数硬限定设置为
22158
。修正完后保留此文件。
完成上述步调后重启体系,一样平常情形下就能够将
Linux
体系对指定用户的单一历程同意同时翻开的最年夜文件数限定设为指定的数值。假如重启后用
ulimit-n
下令检察用户可翻开文件数限定仍旧低于上述步调中设置的最年夜值,这多是由于在用户登录剧本
/etc/profile
中利用
ulimit-n
下令已将用户可同时翻开的文件数做了限定。因为经由过程
ulimit-n
修正体系对用户可同时翻开文件的最年夜数限定时,新修正的值只能小于或即是前次
ulimit-n
设置的值,因而想用此下令增年夜这个限定值是不成能的。以是,假如有上述成绩存在,就只能往翻开
/etc/profile
剧本文件,在文件中查找是不是利用了
ulimit-n
限定了用户可同时翻开的最年夜文件数目,假如找到,则删除这行下令,大概将其设置的值改成符合的值,然后保留文件,用户加入偏重新登录体系便可。
经由过程上述步调,就为撑持高并发
TCP
毗连处置的通信处置步伐排除关于翻开文件数目方面的体系限定。
2
、修正收集内查对
TCP
毗连的有关限定
在
Linux
上编写撑持高并发
TCP
毗连的客户端通信处置步伐时,偶然会发明只管已排除了体系对用户同时翻开文件数的限定,但仍会呈现并发
TCP
毗连数增添到必定数目时,再也没法乐成创建新的
TCP
毗连的征象。呈现这类如今的缘故原由有多种。
第一种缘故原由多是由于
Linux
收集内查对当地端标语局限无限制。此时,进一步剖析为何没法创建
TCP
毗连,会发明成绩出在
connect()
挪用前往失利,检察体系毛病提醒动静是“
Cantassignrequestedaddress
”。同时,假如在此时用
tcpdump
工具监督收集,会发明基本没有
TCP
毗连时客户端发
SYN
包的收集流量。这些情形申明成绩在于当地
Linux
体系内核中无限制。实在,成绩的基本缘故原由在于
Linux
内核的
TCP/IP
协定完成模块对体系中一切的客户端
TCP
毗连对应的当地端标语的局限举行了限定
(
比方,内核限定当地端标语的局限为
1024~32768
之间
)
。当体系中某一时候同时存在太多的
TCP
客户端毗连时,因为每一个
TCP
客户端毗连都要占用一个独一的当地端标语
(
此端标语在体系的当地端标语局限限定中
)
,假如现有的
TCP
客户端毗连已将一切的当地端标语占满,则此时就没法为新的
TCP
客户端毗连分派一个当地端标语了,因而体系会在这类情形下在
connect()
挪用中前往失利,并将毛病提醒动静设为“
Cantassignrequestedaddress
”。有关这些把持逻辑能够检察
Linux
内核源代码,以
linux2.6
内核为例,能够检察
tcp_ipv4.c
文件中以下函数:
staticinttcp_v4_hash_connect(structsock*sk)
请注重上述函数中对变量
sysctl_local_port_range
的会见把持。变量
sysctl_local_port_range
的初始化则是在
tcp.c
文件中的以下函数中设置:
void__inittcp_init(void)
内核编译时默许设置的当地端标语局限大概太小,因而必要修正此当地端口局限限定。
第一步,修正
/etc/sysctl.conf
文件,在文件中增加以下行:
net.ipv4.ip_local_port_range=102465000
这标明将体系对当地端口局限限定设置为
1024~65000
之间。请注重,当地端口局限的最小值必需年夜于或即是
1024
;而端口局限的最年夜值则应小于或即是
65535
。修正完后保留此文件。
第二步,实行
sysctl
下令:
[speng@as4~]$sysctl-p
假如体系没有毛病提醒,就标明新的当地端口局限设置乐成。假如按上述端口局限举行设置,则实际上独自一个历程最多能够同时创建
60000
多个
TCP
客户端毗连。
第二种没法创建
TCP
毗连的缘故原由多是由于
Linux
收集内核的
IP_TABLE
防火墙对最年夜跟踪的
TCP
毗连数无限制。此时步伐会体现为在
connect()
挪用中堵塞,好像逝世机,假如用
tcpdump
工具监督收集,也会发明基本没有
TCP
毗连时客户端发
SYN
包的收集流量。因为
IP_TABLE
防火墙在内核中会对每一个
TCP
毗连的形态举行跟踪,跟踪信息将会放在位于内核内存中的
conntrackdatabase
中,这个数据库的巨细无限,当体系中存在过量的
TCP
毗连时,数据库容量不敷,
IP_TABLE
没法为新的
TCP
毗连创建跟踪信息,因而体现为在
connect()
挪用中堵塞。此时就必需修正内查对最年夜跟踪的
TCP
毗连数的限定,***同修正内查对当地端标语局限的限定是相似的:
第一步,修正
/etc/sysctl.conf
文件,在文件中增加以下行:
net.ipv4.ip_conntrack_max=10240
这标明将体系对最年夜跟踪的
TCP
毗连数限定设置为
10240
。请注重,此限定值要只管小,以节俭对内核内存的占用。