【问题标题】:Netty - number of concurrent client connectionsNetty - 并发客户端连接数
【发布时间】:2015-05-22 10:20:40
【问题描述】:

我正在对运行在 Netty 服务器 (4.0.28.Final) 上的应用程序进行测试

在 OSX 上

不设置以下代码不支持并发客户端(1024) 连接

option(ChannelOption.SO_BACKLOG, 2048)

在此设置之后,我可以建立 1000 个并发客户端连接。

Q1 将 ulimit 设置为 2048 并将 somaxcon 设置为 2048 没有帮助,为什么?

$ ulimit -a 核心文件大小(块,-c)0 数据段大小 (kbytes, -d) 无限制 文件大小(块,-f)无限制 最大锁定内存 (kbytes, -l) 无限制 最大内存大小 (kbytes, -m) 无限制 打开文件 (-n) 10000 管道大小(512 字节,-p)1 堆栈大小(千字节,-s)8192 cpu时间(秒,-t)无限制 最大用户进程 (-u) 709 虚拟内存 (kbytes, -v) 无限制 $ sysctl -a | grep 文件 kern.maxfiles = 10000 kern.maxfilesperproc = 10000 内核.maxfiles:10000 kern.maxfilesperproc:10000 kern.num_files: 2098 $ sysctl -a | grep somax kern.ipc.somaxconn: 2048 参考:http://stackoverflow.com/questions/5377450/maximum-number-of-open-filehandles-per-process-on-osx-and-how-to-increase

端口上的 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


【解决方案1】:

抱歉给大家带来了困惑。

echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.conf 如另一个线程中所示为我工作。

lsof 现在显示预期计数,它适用于积压 128 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 2015-09-20
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多