微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Netty 调试 Spring Cloud Gateway 的性能

如何解决使用 Netty 调试 Spring Cloud Gateway 的性能

我使用 Netty 运行 Spring Cloud Gateway(格林威治)。此应用程序接收请求,然后根据路由配置向下游应用程序发送请求。

随机很少的请求会花费很多时间(> 70 秒)。即使下游服务器在 5 秒内回复,Netty 线程(reactor-http-epoll-*)也没有收到响应。我已启用调试日志以查看这些线程在做什么。从初步分析来看,这些线程似乎正在处理其他事情,并且始终处于可运行状态。发生这种情况时,服务器的流量并没有异常,并且与之前相同。

我的问题是:

  • 为什么在收到响应时反应器线程没有处理响应(根据下游应用程序的日志,它发送了响应。但是,spring-cloud 应用程序在日志中接收响应的方式太晚了)。有没有可能所有线程都在忙着做其他事情。
  • 是否有任何关于如何调查此类问题的手册?
  • 日志中的某些地方我确实在日志中看到大量非活动连接,但不确定这是否会影响任何事情。 (通道已清理,现在有 56 个活动连接和 1400 个非活动连接)

任何有关如何进行调查以了解应用程序中发生随机缓慢的原因的一般指导都会真正有帮助。提前感谢您的帮助。

解决方法

好的,所以我最终做了以下事情,经过大量调查后,它开始对我正常工作。

  1. 启用日志记录。看看创建了多少连接。就我而言,创建了许多新连接,但它们没有得到重用。

    io.netty.leakDetectionLevel=偏执

    logging.level.reactor.netty=调试

    logging.level.reactor.netty.channel.FluxReceive=DEBUG

    spring.cloud.gateway.httpclient.wiretap=true

    spring.cloud.gateway.httpserver.wiretap=true

  2. 确保在 reactor-http-epoll-* 线程上没有运行阻塞代码。

  3. 我将 Spring Cloud 依赖项从 Greenwhich train 升级到最新版本的 Hoxton train。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。