【发布时间】:2015-05-22 10:20:40
【问题描述】:
我正在对运行在 Netty 服务器 (4.0.28.Final) 上的应用程序进行测试
在 OSX 上
不设置以下代码不支持并发客户端(1024) 连接
option(ChannelOption.SO_BACKLOG, 2048)
在此设置之后,我可以建立 1000 个并发客户端连接。
Q1 将 ulimit 设置为 2048 并将 somaxcon 设置为 2048 没有帮助,为什么?
端口上的 Q2 netstat 给了我正确的连接数(1024),但 lsof 给出的值要小得多(175)。
在 Centos 上
以下设置适用于大型客户端连接
option(ChannelOption.SO_BACKLOG, 128)
os level
Ulimit = 65336
# sysctl -a | grep somax
net.core.somaxconn = 128
Q3 我能够连接多个客户端。为什么/如何?注意:除 ulimit 之外的所有值都很高。
Q4 设置积压有什么作用?为什么在 OSX 上需要它而在 CentOS 上没有影响?
我的 OSX 上的 Q4 Netty 记录了这条消息
23:17:09.060 [main] 调试 io.netty.util.NetUtil - /proc/sys/net/core/somaxconn: 128(不存在)
我创建了 /proc/sys/net/core/somaxconn。日志开始显示新值,但对并发线程数没有影响。
【问题讨论】:
-
docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html 有关于 backlog 参数的详细信息。在 OSX 上增加此值以使其正常工作就像愚弄系统一样?队列变长,而不是实际的物理连接。当我以 ulimit 的设置值运行 nginx 并将其定位为高并发客户端时,我能够获得正确的 lsof 计数。
标签: netty