现网问题排查小记

现网问题排查小记

排查过程

在测试环境,有一个服务的消费速度非常慢。

图片

希望提高消费者的线程数,来消费提高性能,但发现没有起到作用,本地测试了一下,发现有一哥方法占用cpu时间非常高

图片(1)

涉及的具体的代码如下:

图片(2)

这边首先怀疑是不是replaceAll() 正则替换引起的,测试机的cpu在70%左右经过测试,将该方法的逻辑删除,返回改成固定的静态值,消费速度确实大幅提高。

经过高人指点,决定使用火焰图进行性能分析,查看比较慢的方法:

图片(3)

YoungGC频繁 10次/s

image-20210708181548033

找到了对应的方法 readXML(),做了响应优化(左边是优化前的)

主要原因还是读取的XML文件比较大,在读取的过程,产生了大量String对象,引起了频繁的Young GC, 从而影响了吞吐。

图片(4)

优化后吞吐明显提升:

图片(6)

图片(7)

YongGC 下降明显

image-20210708181734411

加线程无法提高效率的原因也找到了,String每次会创建多个对象,每个线程在消费的时候,都会去读取文件,这样如果增加消费线程,那么创建的String对象也多了,young gc 的频率也提升了(要花更多的cpu时间来做gc),所以导致加线程也无法提高吞吐。

总结

在操作大文本时,一定要使用StringBuffer

提问

下图中,用红色方框圈起来的方法表示什么含义

图片(8)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值