Tomcat API:当客户端在每个请求后关闭连接时,如何提高性能?

时间:2020-09-17 10:25:12

标签: api http tomcat connection

我有一个简单的Tomcat API,我的目标是管理更高数量的请求/秒。

我的问题如下:

场景1:当客户端使用某些持久连接时,我使用单个API实例设法达到了约20000 req / sec。服务器已加载,服务器的CPU几乎已用完。

方案2:当客户端在每个请求之后关闭连接时,API仅管理600 req / sec,并且根本不使用服务器资源。因此,我想全球连接数或服务器每秒可管理的连接数都存在瓶颈。

我想知道的是,是否存在可以更改的配置(在tomcat或在服务器上),以提高方案2的性能。 如果没有,那么哪种资源受到限制?我可以通过部署1个CPU服务器来解决此问题吗?

我目前正在寻找的东西:

  • Tomcat配置中的线程和连接数: 我已将这些数目从默认值调整为200个线程和2000个连接,在方案2中看不到任何作用。

  • Ulimit设置为无限制

  • JVM的配置如下:JAVA_OPTS:-Xmx8g

1 个答案:

答案 0 :(得分:2)

如果您提供有关部署的更多信息会更好,但是通常有一些工作可以帮助您获得更好的性能。
首先,您应该衡量每个请求的成本并尽可能地对其进行优化。例如,如果您的API与每个请求一起在本地数据库上执行查询,并且此查询消耗大量CPU使用量,则您应该优化查询。这样做可以使服务器在cpu变为100%之前允许更多请求。
请注意,诸如JProbe之类的一些工具可以帮助您优化API。
其次,在测试过程中监视您的资源,并找出其中哪一个已被充分使用。在测试期间,您应该检查网络连接磁盘内存 CPU ,并确定资源的不足。跟踪线程块和死锁,因为它们对性能很重要。 您可以根据此信息扩展服务器资源,或者决定实施分布式体系结构,或者为解决方案添加负载均衡器,或者为项目添加缓存策略。
在Tomcat配置中,有一些设置可以改善您的性能,例如:
配置连接器
将maxThreads设置为足够高的值
将acceptCount设置为足够高的值
配置缓存
将cacheMaxSize属性设置为适当的值。
配置内容压缩
启用内容压缩并使用GZIP压缩