FGC排查基础知识

2021-09-02  本文已影响0人  markeNick

排查思路及常用命令

1、查看java进程

ps -ef | grep java

jps

2、检查JVM配置

ps aux | grep "applicationName=adsearch"

3、查看堆内存情况

jmap -heap 进程ID | head -n20

4、观察老年代的内存使用情况,推测可能原因

GC后的短时间能够恢复到一定值,即可排除是内存泄露

5、jmap查看堆内存中的对象信息

jmap -histo 进程ID | head -n20

6、dump堆内存文件

jmap -dump:format=b,file=heap 进程ID

7、用分析工具分析dump文件

jhat、JVisualVM

找到大对象

8、最后通过代码分析可疑对象

.

GC会对程序产生影响

.

导致FGC的原因

写完mybatis的SQL之后,一定要对各种 <if test> 进行空值考虑,我公司一次FGC就是因为这个导致的,另外部门定时推送过来的订单refId存在为空的情况,导致select的时候扫描全表几千万条数据(还是分库分表的。。。),导致产生了很多实体类对象和mybatis缓存对象。
所以对于只有查询一行的SQL语句,要加上limit 1,防止 <if test> 条件为空而导致扫描全表数据

.

排查总结

上一篇 下一篇

猜你喜欢

热点阅读