一、性能瓶颈分析与排查经验
1、内存溢出
1. 堆内存溢出
现象:
- 压测执行一段时间后,系统处理能力下降。这时用JConsole、JVisualVM等工具连上服务器查看GC情况,每次GC回收都不彻底并且可用堆内存越来越少。
- 压测持续下去,最终在日志中有报错信息:java.lang.OutOfMemoryError.Java heap space。
排查手段:
- 使用jmap -histo pid > test.txt命令将堆内存使用情况保存到test.txt文件中,打开文件查看排在前50的类中有没有熟悉的或者是公司标注的类名,如果有则高度怀疑内存泄漏是这个类导致的。
- 如果没有,则使用命令:jmap -dump:live,format=b,file=test.dump pid生成test.dump文件,然后使用MAT进行分析。
- 如果怀疑是内存泄漏,也可以使用JProfiler连上服务器在开始跑压测,运行一段时间后点击“Mark Current Values”,后续的运行就会显示增量,这时执行一下GC,观察哪个类没有彻底回收,基本就可以判断是这个类导致的内存泄漏。
解决方式:优化代码,对象使用完毕,需要
本文详细介绍了系统性能瓶颈的分析与排查经验,包括内存溢出、CPU过高、线程死锁等问题,并提供了性能分析流程与思路,如CPU、内存、网络和I/O的定位分析,帮助解决性能问题。
订阅专栏 解锁全文

2万+

被折叠的 条评论
为什么被折叠?



