Linux Socket连接上限的查看及配置

Posted on Fri 10 June 2011 in 我用(IT)

查看Socket连接上限

有测试工具,叫ttcp。不过对于线上的服务器,靠实测实在是过于狼虎的方法了。 http://renoir.csc.ncsu.edu/ttcp/

除了实测,还可以通过观察监控日志来找到这个上限值,不过往往已经损失惨重了。 拿Cacti来说,观察"Open Sockets"图表,不同负载情况的total socke 的 maxinum如果是一个定值的话,显然已经达到上限了。 http://docs.cacti.net/ Cacti的这个监控就是调用了sar的监控结果,其实就是把sar -n SOCK(sysstat)进行了汇总并生成了图像查询界面

5秒钟采样一次,一共统计2次的输出结果如下

$ sar -n SOCK 5 2 Linux 2.6.18-164.el5 (baiqi) 06/10/2011

06:16:15 PM totsck tcpsck udpsck rawsck ip-frag 06:16:20 PM 383 92 9 0 0 06:16:25 PM 380 92 9 0 0 Average: 382 92 9 0 0

totsck:被使用的socket的总数目 tcpsck:当前正在被使用于TCP的socket数目 udpsck:当前正在被使用于UDP的socket数目 rawsck:当前正在被使用于RAW的socket数目 ip-frag:当前的IP分片的数目

配置(增大)连接上限

制约系统成功建立更多连接的因素有很多种,Linux专家能够告诉你10个以上的因素来调整上限 http://stackoverflow.com/questions/410616/increasing-the-maximum-number-of-tcp-ip-connections-in-linux

消化再消化之后,把学到的东西再这里记录一下,欢迎大侠们拍砖 http://unknownerror.net/2011-05/linux-modify-a-tcp-connection-number-14718

调整允许文件数上限

linux中的是通过文件方式来管理系统的,因此系统能承载多少TCP连接和系统文件打开数目能力是相关的。

每个进程允许打开的文件数上限

ulimit -n

vi /etc/security/limits.conf

username, * means everybody

  • soft nofile 2048
  • hard nofile 2048

系统总体文件上限

cat /proc/sys/fs/file-max

调整本地端口号范围

一个Socket会占用一个端口,所以分配得少了肯定不够

cat /etc/sysctl.conf |grep net.ipv4.ip_local_port_range 如果不设置,会有默认值,通过下面的命令查看 sysctl -a |grep net.ipv4.ip_local_port_range --默认值 net.ipv4.ip_local_port_range = 32768 61000 --修改值 net.ipv4.ip_local_port_range = 1024 64000 # sysctl -p --修改生效

然后继续增加允许ip_table进行监控的端口数

net.ipv4.ip_conntrack_max = 10240

sysctl -p --修改生效

使用支持高并发网络I/O的编程技术

这里学的比较模糊了,应该默认是select方式,这种方式下一般来说也就能够支持1k左右的连接,比epoll方式轻松支持万级IO差得远。 但具体到我们的应用,怎样检查和设置呢? http://zhoulifa.bokee.com/5351040.html