我正在针对在Netty服务器上运行的应用程序(4.0.28.Final)运行测试
如果不设置以下代码,则不支持并发客户端(1024) 连接
option(ChannelOption.SO_BACKLOG, 2048)
在此设置之后,我可以创建1000个并发客户端连接。
Q1将ulimit
设置为2048并将somaxcon
设置为2048无效,为什么?
$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 10000 pipe size (512 bytes, -p) 1 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 709 virtual memory (kbytes, -v) unlimited $ sysctl -a | grep files kern.maxfiles = 10000 kern.maxfilesperproc = 10000 kern.maxfiles: 10000 kern.maxfilesperproc: 10000 kern.num_files: 2098 $ sysctl -a | grep somax kern.ipc.somaxconn: 2048 Reference: http://stackoverflow.com/questions/5377450/maximum-number-of-open-filehandles-per-process-on-osx-and-how-to-increase
端口上的netstat
为我提供了正确的连接数(1024),但lsof给出了更小的值(175)。
以下设置适用于大型客户端连接
option(ChannelOption.SO_BACKLOG, 128)
os level
Ulimit = 65336
# sysctl -a | grep somax
net.core.somaxconn = 128
Q3我可以连接多个客户端。为什么/如何?注意:除ulimit之外的所有值都很高。
Q4设置backlog有什么作用?为什么在OSX上需要它并且对CentOS没有影响?
我的OSX上的Q4 Netty记录了此消息
23:17:09.060 [main] DEBUG io.netty.util.NetUtil - /proc/sys/net/core/somaxconn: 128 (non-existent)
我创建了/ proc / sys / net / core / somaxconn。日志开始显示新值,但它对并发线程数没有影响。
答案 0 :(得分:0)
抱歉所有的困惑。
echo limit maxfiles 10000 10000 | sudo tee -a /etc/launchd.conf,如另一个为我工作的线程所示。
lsof现在显示预期的计数,它适用于积压的128:)