jvm 优化记录

本文记录了一次JVM优化的过程,主要针对CPU使用率高和Young GC频繁的问题。通过分析,发现CPU高主要是由于`contains`方法的`indexOf`操作引起,而Young GC频繁则与内存分配和Map的使用有关。优化措施包括复用Map、调整Map初始容量、避免String的split操作等,实验结果显示CPU使用率和Young GC次数显著下降。
摘要由CSDN通过智能技术生成

1.背景

敏感词服务拆分后,在staging 环境压测。发现cpu 和 内存监控都飙高。在单机qps 200左右的情况下,cpu 使用率平均80+,young gc 次数平均200+ ,平均一次gc 耗时 20ms 左右 。

注:YGC是JVM GC 最为频繁的一种GC,一个高并发的服务在运行期间,会进行大量的YGC,发生YGC时,会进行STW,一般时间都很短。 不过如果次数太多,势必会影响服务所能承担的理论qps上限。同时如果再未来引入更高的业务复杂度时,很有可能会影响old 区,进而影响整个服务的可用性。

2. 过程

首先cpu 问题定位热点代码

通过工具定位到热点代码,containsSensitiveWord 。定位到代码中发现,这个方法一共做了两件事 1. 全表contains (index of )2. 正则表达式匹配。

初步怀疑是正则表达式比较消耗cpu 资源。

定位: 注释掉正则表达式的代码,观察压测报告,发现cpu load 和 young gc 基本没有变化。 再注释掉contains 的代码之后发现cpu 明显降低。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值