liu_F_87 2025-09-30 13:17 采纳率: 0%
浏览 13

springcloud gateway响应式编程压测跑不满CPU

微服务系统网关用的spring cloud gateway(采用响应式编程调用其他业务的spring boot微服务),当使用jmeter压测CPU只有50%左右,但是qps怎么也上不去了,但是当我把gateway服务实例从1个改为2个的时候qps能再增加一些(接近翻倍);

如果跳过网关单独测试下游服务的接口qps能达到2000++ (服务器CPU有60~70%),但是同样的接口走网关压测qps只有300, 并且CPU只有50%,感觉瓶颈在网关这层,抓了下火焰图,看着很多调用栈都是reactor这里,占用最高的是网关对请求接口做鉴权判断的处理

网关这个问题该怎么优化呢?

img

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-09-30 13:17
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题分析

    你使用Spring Cloud Gateway作为网关,采用响应式编程来调用其他业务的Spring Boot微服务。通过JMeter压测时,CPU负载仅有50%左右,但QPS无法达到预期值。这可能是由于一些限制或问题导致的性能瓶颈。

    解决方案

    1. 检查线程池配置: 确保gateway的线程池配置合理,足够处理任务。可以通过配置server.tomlapplication.yml文件中的spring.cloud.gateway.inbound-routes thread-pool的线程数来调整。
    spring:
      cloud:
        gateway:
          inbound-routes thread-pool:
            type: fixed
            max-threads: 100
            queue-capacity: 1000
    
    1. 排查阻塞代码: 使用堆dump或线程池中的阻塞线程列表工具来检查是否有阻塞代码,尤其是在使用异步编程或 IO 等待等情况下。
    2. 优化数据库连接池: 如果是数据库IO相关的瓶颈,可以尝试提高数据库连接池的大小,减少连接耗时。
    spring:
      datasource:
        max-active: 10
        max-idle: 5
        initial-size: 5
    
    1. 减少http请求次数: 如果有可能,减少http请求次数,可以通过合并一些API或者使用更高效的数据传输协议。
    2. 压测工具配置: 检查JMeter配置,确保压测的参数(如并发请求数、时间间隔等)合理,可以尝试使用不同的压测工具(如Apache Bench、Locust等)来对比结果。
    3. 监控和诊断工具: 使用像Prometheus、Grafana等监控和诊断工具来实时监控系统的性能指标,定位出瓶颈。
    4. 优化系统配置:检查系统的内存、CPU等资源配置是否足够,是否有资源消耗较高的线程池。

    建议

    在压测过程中要监控系统的负载、CPU、内存等资源,及时调整配置或代码以释放瓶颈。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月30日