Tomcat性能调优

9

我正在优化Tomcat 7的性能。服务器配备了24个核心和32 GB内存。我的测试接口是一个不需要任何处理(立即响应)的RESTful服务,并且server.xml的配置如下:

<Connector port="8088" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           enableLookups="false"
           compression="off"
           maxConnections="8192"
           maxThreads="1000"
           tcpNoDelay="true"/>

以及JVM配置...

-Xms8192M -Xmx16384M.

JMeter的主机是另一台具有与上述服务器相同规格的计算机。

JMeter堆的配置为-Xms12218m -Xmx24426m

我的JMeter测试计划一次并发发送240个请求到RESTful接口,但我注意到前100个的平均响应时间不超过50毫秒,但下一个100个则增加到1秒,其余的则增加到3秒。

我很好奇这种现象是否存在配置错误或有什么建议?

提前感谢。


我认为建立一个拥有16-24 GB内存的进程不是一个好主意。为什么不将应用程序集群化,向多台服务器发送请求呢? - Stefan
谢谢您的回复。我需要了解单个节点的极限,这样我们才能使用最少的服务器来满足要求。 - JiaMing Lin
2个回答

7
你可以进行配置:
acceptCount="2048"

并且

maxConnections="1024"

maxConnections和maxThreads有关系,你需要配置maxThreads来匹配你的业务和CPU的核心数量,例如8X或16X。acceptCount是等待连接的数量。

请注意,maxConnections和maxThreads不是越大越好,要考虑服务器硬件的性能。


3
欢迎来到StackOverflow,感谢您的贡献。如果您能添加一些解释您建议的内容的简短文字,那么您的回答将会大幅改善。虽然对您来说很显然,但对提问者或其他寻求同样问题帮助的人可能不太明显。 - GreenAsJade

2
您的服务器需要处理的请求数越多,每个请求的处理时间就越长。这是正常的行为。
您是如何同时启动线程的?斜坡时间= 0还是1?
当您开始发射大量线程时,您的客户端需要更长时间来发出请求,并且您的服务器需要更长时间才能响应。
在启动时,服务器能够相对快速地响应所有请求,因为它没有其他事情要做,直到达到阈值。每个请求都会很快完成,同一线程将发送另一个请求。同时,服务器正在响应上一波线程,而更多线程正在排队等待。现在它必须管理队列并仍然响应请求,因此又达到了另一个阈值。
基本上,启动一堆线程并同时发出请求并不是服务器的非常现实的用例,除了少数情况外。当它相关时,您可以期望这种行为。

我们的案例是为设备提供身份验证和授权服务,将有超过一万个设备。我们的目标是响应时间小于1秒。 非常感谢您的回复。 - JiaMing Lin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接