首页 > 编程知识 正文

java多线程阻塞,java线程池的使用例子

时间:2023-05-06 12:26:06 阅读:22617 作者:1114

1 .问题

spring-cloud-gateway作为统一请求的入口,负责向对应的微服务转发请求。

采用的Spring Cloud版本为Finchley SR2。

测试一个接口的性能发现,如果tps只有1000 req/s左右,就会提高。

其中,post-test.lua的内容如下:

网关逻辑读取请求中的主体值,根据biz_code字段进行内存中的匹配路由,并将请求转发到相应的微服务。

2 .故障诊断

1、测试接口自身性能:

据悉,接口的tps将达到7000。

1、通过spring-boot-admin查找网关的cpu、内存等占用情况,查找发现所有不可用的线程的状态,发现reactor-http-nio线程组被阻止对于响应编程,reactor-http-nio线程块是灾难性的。

2、用jstack命令分析线程状态,确定被阻止的代码(第19行) :

要最终转到问题代码:

这里的逻辑是,必须读取请求中的body的值,将其转换为json,并根据其中的特定字段匹配和传输路由。 在这里,您首先选择了将exchange转换为默认服务器请求。 目的是使用此类的bodyToMono方法使其易于转换。

3 .解决

改写代码实现同样的功能:

然后进行测试,

发现tps从1000上升到5000,问题解决了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。