我创建了一个客户端和服务器的Web服务。我想过做性能测试。我尝试了一个带有样本测试计划的jmeter来执行它。高达3000请求jboss处理了请求但是当请求超过3000时,一些请求未被处理(在无法打开连接的意义上:连接被拒绝)。我必须在同一时间进行更改以处理超过10000个请求。要么是jboss问题还是系统吞吐量?
jmeter配置:300个线程,1秒加速和10个循环。
系统(服务器配置):Windows 7,4G RAM
答案 0 :(得分:9)
我必须在同一时间进行更改以处理超过10000个请求
在Tomcat中的1万个并发请求(我相信它在JBoss中使用)是非常多的。在典型设置中(使用阻塞IO连接器),每个HTTP连接需要一个线程。这对于普通的JVM来说太过分了。在64位服务器计算机上,一个线程需要1 MiB(检出-Xss
参数)。你只有4 GiB。
此外,number of context switches会扼杀你的表现。您需要数百个内核才能有效地处理所有这些连接。如果您的请求是I / O或数据库绑定 - 您将在其他地方看到瓶颈。
据说你需要一种不同的方法。尝试非阻塞I / O或异步servlet(从3.0开始)或...向外扩展。默认情况下,Tomcat可以处理100-200个并发连接(合理的默认值),并且排队的连接数量相似。上面的一切都被拒绝了,你可能正在经历这一点。
答案 1 :(得分:4)
我想到了两个常见的问题。
首先,如果您作为普通用户在Linux上运行JBoss,如果您没有编辑limits.conf文件,则可能会遇到“Too many open files”。见https://community.jboss.org/thread/155699。每个打开的套接字都算作Linux的“打开文件”,因此操作系统可以阻止你的连接。
其次,默认情况下,传入连接的最大线程池大小为200。这限制了并发请求数的数量,即同时正在进行的请求。如果你有jmeter做300个线程,jboss连接器线程池应该更大。您可以在jboss-web.sar / server.xml中的jboss6中找到它。在元素中查找“maxThreads”:http://docs.jboss.org/jbossweb/latest/config/http.html。
200是单核CPU的建议最大值。在此之上,上下文切换开始给予太多开销,就像Tomasz说的那样。因此,对于生产用途,双核上只增加到400,四核上只增加800等。