Netty Spring云网关:RHEL上的高CPU利用率:可以从epoll切换到NIO

Netty Spring云网关:RHEL上的高CPU利用率:可以从epoll切换到NIO,netty,project-reactor,spring-cloud-gateway,reactor-netty,Netty,Project Reactor,Spring Cloud Gateway,Reactor Netty,正如在下一期中提到的,我们在RHEL上部署的spring云网关应用程序中看到了高cpu利用率。详情可在下面的链接中找到 根据@Spencergib的建议,我们尝试了最新版本的gateway和boot,但在PST期间仍然看到高cpu利用率。似乎大部分的利用是由reactor“epoll”线程完成的 是否有任何反应堆/网络优化可以尝试提高性能?似乎除了“epoll”之外,还有使用NIO的选项-这个切换可能吗 我可以在日志中看到下面的警告。这与cpu的高利用率有关吗- [2020-08-21 13:

正如在下一期中提到的,我们在RHEL上部署的spring云网关应用程序中看到了高cpu利用率。详情可在下面的链接中找到

根据@Spencergib的建议,我们尝试了最新版本的gateway和boot,但在PST期间仍然看到高cpu利用率。似乎大部分的利用是由reactor“epoll”线程完成的

是否有任何反应堆/网络优化可以尝试提高性能?似乎除了“epoll”之外,还有使用NIO的选项-这个切换可能吗

我可以在日志中看到下面的警告。这与cpu的高利用率有关吗-

[2020-08-21 13:45:38,537] [] [15854] [main] [DEBUG] [i.n.u.internal.NativeLibraryLoader] - Unable to load the library 'netty_transport_native_epoll_x86_64', trying other loading mechanism.
java.lang.UnsatisfiedLinkError: no netty_transport_native_epoll_x86_64 in java.library.path

[2020-08-21 13:45:38,567] [] [15884] [main] [DEBUG] [i.n.u.internal.NativeLibraryLoader] - Successfully loaded the library /tmp/libnetty_transport_native_epoll_x86_6488
16793540849624173.so
[2020-08-21 13:45:38,568] [] [15885] [main] [DEBUG] [r.netty.resources.DefaultLoopEpoll] - Default Epoll support : true
[2020-08-21 13:45:38,569] [] [15886] [main] [DEBUG] [r.netty.resources.DefaultLoopKQueue] - Default KQueue support : false
[2020-08-21 13:45:38,581] [] [15898] [main] [DEBUG] [i.n.c.MultithreadEventLoopGroup] - -Dio.netty.eventLoopThreads: 12

您可以通过系统属性或通过服务器/客户端级别的配置来控制将使用哪个传输。在SpringGateway中,最好通过系统属性来控制它。使用
-Dreactor.netty.native=false
。 您可以找到有关配置线程等的更多信息


对于Spring Gateway的链接问题,请尝试将JMeter与Spring Gateway分开。在同一台机器上运行JMeter是不合适的。

谢谢Violeta。交换机正在工作,因为我现在在日志中看到的是“reactor httpnio*”而不是“reactor httpepoll*”,但cpu利用率比以前更差。这次我从一台不同的机器上运行Jmeter。我也尝试过增加工作线程数,但也没有任何效果。在网关/反应器/网络/服务器级别是否还有其他优化我可以尝试?您可以禁用日志记录作为一个实验,然后再次运行该场景吗?是的,根日志记录处于调试阶段。一旦出错,只启用访问日志,利用率就会下降。在这个设置之上,如果我们为请求/响应主体日志添加过滤器,则利用率再次上升。用于测试的响应体尺寸显著较高。因此,从本质上讲,日志记录越多或记录的数据越大,利用率就越高。这是正确的吗?任何进一步的优化都可以围绕这一点进行,因为我们需要某种类型的日志记录来确定在生产中什么请求有任何问题。谢谢你的支持!还观察到,对于500个并行线程,爬升时间为10秒,延迟时间为1秒;在PST开始时,利用率上升到约200%,然后开始逐渐下降,直到在测试的其余部分达到约60-70%。我认为这可能与您仅对访问日志使用ch.qos.logback.classic.AsyncAppender有关,其余部分不是异步的。对吗?不建议在非阻塞应用程序中阻塞。