一次cpu使用率高调优过程

最近产品组更新了一个包,做压测的时候发现不管用4核cpu还是16核cpu压测,总利用率都是100%多,吞吐量为2/SEC。

如果部署多个springboot实例,则cpu使用率会提升。

然后将问题反馈给项目组,项目组发现代码中有锁,去掉锁修改相关代码后,测试。

 

用jmeter压测5000并发()发现16核cpu空闲率达到40%,虽然吞吐量上去了 达到12/SEC,但是单个请求才560ms,按道理,吞吐量应该

能达到20-30/sec。

 

按之前经验,修改application.properties中:

hystrix.threadpool.default.coreSize=10/1000/5000

都无效果。

 

然后用stack -l xxx查看发现:

以http-nio-9900开头都线程200个,其中有大量处理waitting,通过代码栈查看到大量线程在等待锁,为

OutputStreamAppender.subAppend 210 查看源代码发现有lock.lock代码。

 

原来最近为了调试日志,有大量日志打印,导致写日志的时候锁定,后将日志级别改成error。吞吐量达到30/sec

 

 

知识点:1、容器默认200个线程处理请求,tomcat.maxThreads。

               2、总200个,有9个线程正在执行业务代码,1个线程写入logback文件,其他的等待锁。并不是只有10个线程处理。

               3、C1 CompilerThread知识点,编译器优化线程。详见https://blog.csdn.net/chenxiusheng/article/details/74007750

               4、转16进制

                    

jstack -l 4796 | grep 1367 -A 20

并将线程号2129和2130转换成16进制(printf "%x\n" 2129)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值