如何确保我的Reactive应用程序以事件循环样式运行

时间:2018-11-14 08:53:13

标签: spring-boot spring-webflux project-reactor

我正在使用Spring Boot 2.0.4.RELEASE。我的疑问是我的应用程序是否以事件循环样式运行。我正在使用tomcat作为服务器。

我正在应用程序中运行一些性能测试,经过一段时间后,我看到了奇怪的行为。请求达到500 req / second后,我的应用程序无法提供超过500 req / second的服务。通过prometheus,我能够确定tomcat的最大线程默认为200。看起来所有线程都被消耗掉了,这就是为什么,它不能处理超过500 req / second。如果有错,请纠正我。

tomcat服务器可以事件循环方式运行吗? 如果可能的话,如何更改tomcat服务器的事件循环大小。

试图将其更改为码头仍然是同样的问题。想知道我的应用程序是否以事件循环风格运行。

2 个答案:

答案 0 :(得分:0)

嘿,我认为您在项目中做错了什么,也许您的依赖项之一不支持反应式编程。如果您想从异步编程(响应式)中受益,即使出于安全性考虑,您的代码也必须是100响应式的,您必须使用响应式Spring安全性。 通常,响应式spring应用程序将在非tomcat的netty上运行,因此请检查您的依赖关系,因为tomcat不响应

答案 1 :(得分:-1)

更多是分析。在本地计算机上运行了一些性能测试后,我能够弄清楚应用程序内部实际发生了什么。

我所做的是,在本地计算机上进行了性能测试,并通过JConsole分析了应用程序。

正如我所说,我将所有阻塞dB呼叫都调度到了scheduler.elastic。我意识到这是造成瓶颈的原因。由于我的dB连接受到限制,并且我在连接池中使用了hikari,因此我在弹性池中创建的线程数量无关紧要。 由于反应式编程更多地是用较少的线程数来最大程度地消耗资源,因此,由于线程是以无界的方式创建的,因此它与常规应用程序没有什么不同。

因此,作为解决方案的一部分,我将本应用于dB调用的线程数限制为100个。爆炸数字从500 tps跃升至2300 tps。

我知道这不是响应式应用程序应该具有的功能,它具有更多的功能。从现在起,我别无选择,只能忍受非反应性驱动程序。正在等待生产级可用性的mssql服务器反应性驱动程序。