tomcat在负载下响应时间慢

elcex8rz  于 2021-10-10  发布在  Java
关注(0)|答案(0)|浏览(290)

我们有一个web应用程序,它使用java 8 jax rs开发的rest服务和部署在apache tomcat 9上的war。最近,我们在生产中遇到了一个问题,tomcat在高流量下的响应速度非常慢,有时还会断开连接。因此,我们决定运行一些负载测试来确定系统的吞吐量。
我们在生产中使用以下规格-
带有64位jvm开放jdk的ubuntu 18.04
16核cpu和64 gb ram
雄猫9
我们的tomcat服务器xml配置是-

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
        maxThreads="300" minSpareThreads="50" acceptCount="250" acceptorThreadCount="2" enableLookups="false" SSLEnabled="true" scheme="https" secure="true"
        keystoreFile="/certficate/file/path.jks"
        keystorePass="password"
        clientAuth="false" sslProtocol="TLS" />

我们有一个RESTAPI,它是一个简单的“ping”方法,返回一个简单的json响应,返回200。

@GET
@Path("/ping")
@Produces(MediaType.APPLICATION_JSON)
public EdoServiceResponse ping() {
    return new EdoServiceResponse();
}

{ "status" 200, "responseText" : "OK" }

我们使用它来使用ApacheJMeter5.4.1执行负载测试。我们的调查结果:
1分钟内threadsavg响应时间(毫秒)总请求数5012243002100227270162504384729500764000481000124469712200022948800450005073369110000184374677
因此,正如我们所看到的,即使负载较小,例如100或250个线程,平均响应时间也开始增加。这是一个没有任何数据库连接或逻辑的简单RESTAPI。我们观察到,我们的cpu使用率从未超过40%,内存使用率在任何时候都保持在10%以下。tomcat进程占用的空间从未超过4GB。我们甚至检查了最大打开文件限制,但它设置为65000,这远远高于我们的要求。因此,我们无法找出瓶颈在哪里,这导致响应时间在没有线程的情况下成比例地减少。
我们尝试更改服务器xml参数,如maxthreads、acceptcount、maxconnections等,但没有重大更改。我们还尝试设置最大堆设置,但没有帮助。我们观察到性能略微提高了15-25%的唯一变化是在catalina.sh中添加了垃圾收集参数--xx:+useg1gc-xx:maxgcpausemillis=200-xx:parallelgcthreads=20-xx:congcthreads=5-xx:InitiatingHeapOccupencyPercent=70
我们需要弄清楚,在cpu和内存未充分利用的情况下,我们的系统处理负载的能力是什么,我们不知道为什么即使在100-200个线程的低并发性情况下,处理请求也需要更多的时间。我们不知道下一步要采取什么步骤来提高吞吐量。
任何帮助都将不胜感激。谢谢

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题