仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 498|回复: 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,历程间通信的unixsocket等文件,那末剩下的可用于客户端socket毗连的文件数就只要也许1024-10=1014个摆布。也就是说缺省情形下,基于Linux的通信步伐最多同意同时1014TCP并发毗连。


关于想撑持更高数目的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指定了要修正哪一个用户的翻开文件数限定,可用*号暗示修正一切用户的限定;softhard指定要修正软限定仍是硬限定;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。请注重,此限定值要只管小,以节俭对内核内存的占用。

第二步,实行sysctl下令:

[speng@as4~]$sysctl-p

假如体系没有毛病提醒,就标明体系对新的最年夜跟踪的TCP毗连数限定修正乐成。假如按上述参数举行设置,则实际上独自一个历程最多能够同时创建10000多个TCP客户端毗连。


3、利用撑持高并发收集I/O的编程手艺


Linux上编写高并发TCP毗连使用步伐时,必需利用符合的收集I/O手艺和I/O事务分拨机制。


可用的I/O手艺有同步I/O,非堵塞式同步I/O(也称反响式I/O),和异步I/O。在高TCP并发的情况下,假如利用同步I/O,这会严峻堵塞步伐的运转,除非为每一个TCP毗连的I/O创立一个线程。可是,过量的线程又会因体系对线程的调剂形成伟大开支。因而,在高TCP并发的情况下利用同步I/O是不成取的,这时候能够思索利用非堵塞式同步I/O或异步I/O。非堵塞式同步I/O的手艺包含利用select()poll()epoll等机制。异步I/O的手艺就是利用AIO


I/O事务分拨机制来看,利用select()是分歧适的,由于它所撑持的并发毗连数无限(一般在1024个之内)。假如思索功能,poll()也是分歧适的,只管它能够撑持的较高的TCP并发数,可是因为其接纳“轮询”机制,当并发数较高时,其运转效力相称低,并大概存在I/O事务分拨不均,招致局部TCP毗连上的I/O呈现“饥饿”征象。而假如利用epollAIO,则没有上述成绩(初期Linux内核的AIO手艺完成是经由过程在内核中为每一个I/O哀求创立一个线程来完成的,这类完成机制在高并发TCP毗连的情况下利用实在也有严峻的功能成绩。但在最新的Linux内核中,AIO的完成已失掉改善)


综上所述,在开辟撑持高并发TCP毗连的Linux使用步伐时,应只管利用epollAIO手艺来完成并发的TCP毗连上的I/O把持,这将为提拔步伐对高并发TCP毗连的撑持供应无效的I/O包管。

如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!
再见西城 该用户已被删除
沙发
发表于 2015-1-16 18:42:12 | 只看该作者

来一发CentOS下修正TCP毗连数

随着实验课程的结束,理论课也该结束了,说实话教OS的这两位老师是我们遇到过的不错的老师(这话放这可能不太恰当).
透明 该用户已被删除
板凳
发表于 2015-1-22 17:27:24 | 只看该作者
硬盘安装及光盘安装,清楚了解安装Linux应注意的有关问题,如安装Linux应在最后一个分区内,至少分二个分区。
再现理想 该用户已被删除
地板
发表于 2015-1-31 14:52:07 | 只看该作者
Linux只是个内核!这点很重要,你必须理解这一点。只有一个内核是不能构成一个操作系统的。
深爱那片海 该用户已被删除
5#
发表于 2015-2-6 20:50:04 | 只看该作者
对Linux命令熟悉后,你可以开始搭建一个小的Linux网络,这是最好的实践方法。Linux是网络的代名词,Linux网络服务功能非常强大,不论是邮件服务器、Web服务器、DNS服务器等都非常完善。
不帅 该用户已被删除
6#
发表于 2015-2-18 19:30:11 | 只看该作者
Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。
小女巫 该用户已被删除
7#
发表于 2015-3-6 11:00:56 | 只看该作者
用户下达的命令解释给系统去执行,并将系统传回的信息再次解释给用户,估shell也称为命令解释器,有关命令的学习可参考论坛相关文章,精通英文也是学习Linux的关键。
山那边是海 该用户已被删除
8#
发表于 2015-3-13 01:09:42 | 只看该作者
和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。
只想知道 该用户已被删除
9#
发表于 2015-3-20 09:45:53 | 只看该作者
Linux只是个内核!这点很重要,你必须理解这一点。只有一个内核是不能构成一个操作系统的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 09:50

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表