我创建了客户端和服务器的 Web 服务。我想到了做性能测试。我尝试使用带有示例测试计划的 jmeter 来执行它。多达 3000 个请求 jboss 处理了请求,但是当请求超过 3000 个时,一些请求没有被处理(在无法打开连接的意义上:连接被拒绝)。我必须进行更改以同时处理超过 10000 个请求。是 jboss 问题还是系统吞吐量?
jmeter 配置:300 个线程,1 秒加速和 10 次循环。
系统(服务器配置):Windows 7,4G RAM
我创建了客户端和服务器的 Web 服务。我想到了做性能测试。我尝试使用带有示例测试计划的 jmeter 来执行它。多达 3000 个请求 jboss 处理了请求,但是当请求超过 3000 个时,一些请求没有被处理(在无法打开连接的意义上:连接被拒绝)。我必须进行更改以同时处理超过 10000 个请求。是 jboss 问题还是系统吞吐量?
jmeter 配置:300 个线程,1 秒加速和 10 次循环。
系统(服务器配置):Windows 7,4G RAM
我必须进行更改以同时处理超过 10000 个请求
Tomcat 中的10000 个并发请求(我相信它在 JBoss 中使用)是相当多的。在典型设置(使用阻塞 IO 连接器)中,每个 HTTP 连接需要一个线程。这对于普通的 JVM 来说太过分了。在 64 位服务器机器上,一个线程需要 1 MiB(签出-Xss
参数)。而你只有 4 GiB。
此外,上下文切换的数量会影响您的性能。您需要数百个内核才能有效地处理所有这些连接。如果您的请求是 I/O 或数据库绑定的 - 您会在其他地方看到瓶颈。
话虽如此,您需要一种不同的方法。尝试非阻塞 I/O 或异步 servlet(自 3.0 起)或...向外扩展。默认情况下,Tomcat 可以处理 100-200 个并发连接(合理的默认值),并且排队的连接数量相似。以上所有内容都被拒绝,您可能正在经历这种情况。
我想到了两个常见的问题。
首先,如果您以普通用户身份在 Linux 上运行 JBoss,如果您没有编辑 limits.conf 文件,您可能会遇到“打开的文件过多”。请参阅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,等等。