gpt4 book ai didi

java - 许多同时连接和扩展的 Tomcat 性能问题

转载 作者:行者123 更新时间:2023-11-28 23:34:35 24 4
gpt4 key购买 nike

我在 Ubuntu 14.04LTS 服务器上运行一个带有 Spring REST 服务的 Tomcat 7.0.55 实例。我正在用 Gatling 进行性能测试。我使用访问 REST 后端的前端应用程序创建了一个模拟。

我的配置是:

Total RAM: 512MB, 1 CPU, JVM options: -Xms128m -Xmx312m -XX:PermSize=64m -XX:MaxPermSize=128m

环境似乎不是很高效,但如果我没有超过约 700 个用户的限制(我在 7 分钟内处理 90k 个请求),我会非常快速地成功处理所有请求。

当同时连接太多时,我开始遇到问题。失败的场景是 7 分钟内有大约 120k 个请求。当大约有 800 个并发用户在玩时,问题就开始出现了。在用户数量达到 600-700 之前,一切正常,但在这个限制之后我开始出现异常:

java.util.concurrent.TimeoutException: Request timed out to /xxx.xxx.xxx.xxx:8080 of 60000 ms
at com.ning.http.client.providers.netty.timeout.TimeoutTimerTask.expire(TimeoutTimerTask.java:43) [async-http-client-1.8.12.jar:na]
at com.ning.http.client.providers.netty.timeout.RequestTimeoutTimerTask.run(RequestTimeoutTimerTask.java:43) [async-http-client-1.8.12.jar:na]
at org.jboss.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:556) [netty-3.9.2.Final.jar:na]
at org.jboss.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:632) [netty-3.9.2.Final.jar:na]
at org.jboss.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:369) [netty-3.9.2.Final.jar:na]
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) [netty-3.9.2.Final.jar:na]
at java.lang.Thread.run(Unknown Source) [na:1.7.0_55]
12:00:50.809 [WARN ] c.e.e.g.h.a.GatlingAsyncHandlerActor - Request 'request_47'
failed : GatlingAsyncHandlerActor timed out

我认为这可能与小型 jvm 有关。但是,当我将环境升级到:

Total RAM: 2GB, 2CPUs, JVM options: -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m

我仍然得到非常相似的结果。失败请求的差异是微不足道的..

我一直在尝试设置 Tomcat 连接器但没有效果。当前的 tomcat 设置是:

<Connector enableLookups="false" maxThreads="400" maxSpareThreads="200" minSpareThreads="60" maxConnections="8092" port="8080" protocol="org.apache.coyote.http11.Http11Protocol" connectionTimeout="20000" keepAliveTimeout="10000" redirectPort="8443" />

操纵线程数、连接数、keepAliveTimeout 对让 800 个并发用户无超时工作完全没有帮助。我计划扩展该应用程序以处理至少 2k 个并发用户,但到目前为止我可以看到垂直扩展和升级 env 没有给我任何结果。我也没有通过 jvisualvm 看到任何内存问题。操作系统不应该是限制,ulimits 设置为无限或高值。数据库不是瓶颈,因为所有 REST 都使用内部缓存。

在我的案例中,tomcat 似乎无法处理超过 800 个连接的用户。您对如何解决这些问题有什么想法吗?我希望能够扩展到至少 2k 用户,并尽可能降低失败率。我将不胜感激我如何解决的任何想法和技巧。如果您需要更多详细信息,请发表评论。

干杯亚当

最佳答案

是否增加打开的文件数。每个连接消耗一个打开的文件项。

关于java - 许多同时连接和扩展的 Tomcat 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25763548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com