有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Spring BOOT 1.5.6的java性能问题

Spring BOOT 1.5.6的性能问题

我们使用的是一个基于SpringBootJava的RESTAPI应用程序,其中包含以下SpringMVC异步参数。在重载情况下,当测试端点时,端点将返回平均30-50秒的API响应。这是发生在我们突然爆发10分钟的时候。我们的API响应75%的理想时间是1-2秒。下面是配置,我们使用6个C5x大型实例,每个实例有4个内核

spring.mvc.async.properties.web.executor.minPoolSize=50
spring.mvc.async.properties.web.executor.maxPoolSize=100
spring.mvc.async.properties.web.executor.maxQueueSize=50
#Hikari Data source properties.
spring.datasource.hikari.minimumIdle=25
spring.datasource.hikari.maximumPoolSize=90
spring.datasource.hikari.idleTimeout=600000

感谢您提出的任何可伸缩性建议

此外,我们还发现在一些调用中,dB调用需要花费时间,我们试图找出是否需要在查询中调整任何内容,但我认为线程正在等待dB响应。同样,使用策略为放弃策略的异步线程执行器,是否有可能拒绝任何提交的任务?我希望任务排队,而不是在负载下拒绝。我们从callerRuns策略转移到放弃策略。关于这一点,或者从spring启动端或线程池大小执行端需要的任何其他方面,您有什么想法吗?谢谢


共 (2) 个答案

  1. # 1 楼答案

    我认为,作为第一种手段,你应该设法找出这个流量的瓶颈

    这方面的关键工具是度量

    我看到您在这里使用Hikari,它自己自动公开度量。 也许数据库工作很努力,它会成为一个瓶颈,在这种情况下,从池中获取DB连接需要相对较长的时间

    另一个可能的问题是,如果对服务的实际请求包含大量内容(可能是一个“大文件上传”操作,我不知道这是否是一个案例,但仍然值得检查)

    因此,我建议使用指标(内置或自定义)。Spring boot与计量系统(用于Spring boot 2的千分尺和用于Spring boot 1.x的dropwizard metrics)具有极好的集成性

  2. # 2 楼答案

    谢谢你的答复。这是正确的Iam使用/度量查看测微计暴露的度量。此外,我们刚刚进行了修改,通过仅将核心池大小指定为100,并删除上述对最小池大小和最大池大小的自定义调整,来了解它是如何从有界队列变为无界队列的。我们现在拥有的数据库连接是90*6个实例。在负载下,它只能使用300+连接。该服务返回的有效负载介于1.8kb到最大2MB之间