[编织消息框架][优化系统]突破连接上限(上)
把测试代码ServerAio.class,ClientAio.class打包成jar,丢给linux系统跑server,window跑client
其中添加两个shell文件,因为原系统装有java6,建立个sh不同版本java共存
java8.sh
/down/jdk1.8.0_131/bin/java $@
systeminfo.sh
echo "系统" head -n 1 /etc/issue echo cpu cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep "physical id" echo "内存" cat /proc/meminfo |grep MemTotal | awk 'BEGIN{sum=0} !/^d/{sum=$2} END{print "Memtotal is:",sum/1024,"M"}'
jdk:
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
system:
系统
CentOS release 5.5 (Final)
cpu
model name : Intel(R) Xeon(R) CPU E5606 @ 2.13GHz
model name : Intel(R) Xeon(R) CPU E5606 @ 2.13GHz
model name : Intel(R) Xeon(R) CPU E5606 @ 2.13GHz
model name : Intel(R) Xeon(R) CPU E5606 @ 2.13GHz
内存
Memtotal is: 7983.66 M
首次测试时出现异常:java.io.IOException: Too many open files
./java8.sh -cp testaio.jar com.eyu.onequeue.demo.aio.ServerAio
执行:ulimit -a
其中open files 选项允许每个用户打开最大文件数,因为linux是文件资源系统,设备、连接、文件、应用程序等都是以文件形成存在
修改打开文件描述符限制:软限制值要小于或等于硬限制
重启会丢效:ulimit -n 1000000
永久修改:vim /etc/security/limits.conf
在最后加入
* soft nofile 1000000
* hard nofile 1000000
* 是所有用户
修改可分配文件句柄限制:这台Linux系统最多允许同时打开(即包含所有用户打开文件数总和)
echo "fs.file-max = 2000000" >>/etc/sysctl.conf
执行生效:sysctl -p
初步测试结果:
linxu服务端打印:16344
window开两个client测试还是16344
那到底是client有限制还是server有限制呢?
是jdk问题还是system问题?
我们先排除系统问题:
在linux跑单个client或两个client.结果服务端支持连接数28232
window,linux同时跑client.结果服务端支持连接数44578
结果证明系统对用户程序有限制
./java8.sh -cp testaio.jar com.eyu.onequeue.demo.aio.ClientAio
修改网络端口限制
echo "net.ipv4.ip_local_port_range = 1024 65535" >>/etc/sysctl.conf
这表明将系统对本地端口范围限制设置为1024~65535之间。请注意,本地端口范围的最小值必须大于或等于1024;而端口范围的最大值则应小于或等于65535。
执行生效:sysctl -p
如不出问题执行结果为64507成功突破,实验证明:系统对tcp端口分配有最大限制,每个client connect tcp随机分配一个端口,最多65535 -1024 - 已使用,对于window默认是1.6W左右,但不知道如何修改
不成功则添加
echo "net.ipv4.ip_conntrack_max = 60000" >>/etc/sysctl.conf
这表明系统将对最大跟踪的TCP连接数限制默认为60000。请注意,此限制值要尽量小,以节省对内核内存的占用。
执行生效:sysctl -p
作者: | solq |
博客地址: | http://www.cnblogs.com/solq111 |
博客版权: | 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。 如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。 淘宝店: 海豚极货店 QQ群:9547527 |
如果你热爱生活、热爱编程、热爱吉他。扫一扫加我微信 |
我的新书《编织消息框架》目前进行中,感谢大家关注! |
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。 |