首先检查影响并发的几个参数:
1)ulimit -n 查看单个进程能够打开的最大文件数,一个socket连接会占用一个文件句柄。
2)内存:
系统能创建的线程数的计算公式如下:
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads
MaxProcessMemory 指的是一个进程的最大内存,64位系统可以认为无上限、只受限于物理可用内存
JVMMemory JVM内存
ReservedOsMemory 保留的操作系统内存
ThreadStackSize 线程栈的大小
有2个方法可以提高创建线程的数量:
减少JVM的heap size;
减少单个线程栈的大小,在JVM启动中使用-Xss参数。
以Jboss为例,设置Xss方式:编辑bin/standalone.conf,在最下方设置JAVA_OPTS="$JAVA_OPTS -Xss256k"
3)Web Server允许的最大连接数,以Jboss为例,编辑configuration/standalone.xml,设置max-connections:
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" max-connections="10000"/>
在Jmeter上创建Thread Group,10000个线程模拟10000并发,添加Http Request,访问地址为Jboss IP:8080,为减少流量,可将Jboss欢迎页面index.html内容删减。
启动测试,在jboss服务器通过命令查看当前连接数:
[root@as02 log]# netstat -na | grep ESTABLISHED | grep 8080 | wc -l
10000