Java性能问题总结工具篇

在解决Java性能问题时,首先要定位问题,必须要根据实实在在的数据、证据,才能明确问题,绝不能凭空瞎猜。而好的工具,会让我们事半功倍。下面介绍我用的很顺手的工具。

一、Jprofiler

当我们被安排分析一个性能问题时,可能对整个系统了解地不多,已经来不及分析代码了,这时候最好地工具就是jprofiler。其他开发语言也有类似的profiler工具。

jprofiler可以远程连接一个JVM,告诉我们用了多少内存、启动了多少线程、哪些线程在忙、线程在忙什么。遇到内存问题时,jprofiler也能告诉我们哪些内存在增长,我们根据一些统计信息判断是否出现了内存泄漏。

特别适合压力测试时流程比较长、或者对系统不了解时,快速定位。

 

二、Jdk command

使用Jprofiler有很多限制,比如需要远程连接JVM。如果问题出现在一个商用场景,我们就没有这个条件。这个时候,就只能依靠Jdk自带的工具。

一般长用的有jstack、jstat、jmap。jstack可以查看线程堆栈信息,特别适合用来解决死锁问题。jstat可以显示JVM内存分配信息,jmap用来生成堆内存快照和统计信息。我曾经用jmap -histo快速定位出一个内存增长问题。

但这些命令不适合发现性能的瓶颈。

三、日志

日志的优势在于精确、使用各种场景,劣势在于需要修改代码。

有时候一个数据处理流程并不是很长,同时又是多线程处理,使用jprofiler和jdk command,都不能很好地卡住时间点,也不能展现出处理过程中数据的变化,这时就需要添加日志。

添加什么样的日志呢?

  • 在合适的位置打印出某段流程的耗时。

  • 数据中哪些关键变化,比如查询数据库耗时多少、查询出多少数据。

  • 哪些数据走了A流程,哪些数据走了B流程,比例多少?

四、Jmeter

Jmeter是apache的一款专门用于测试的工具,功能强大,可以用来触发流程,特别适合复现问题、验证问题。

支持协议

最初是用来测试Web应用,后来逐渐扩展,现在可以测试很多协议,比如Http、Https、FTP、带JDBC的数据库、LDAP、消息中间件、邮件、TCP等。

测试流程设计

Jmeter的底层代码是Java,我们可以在测试用例中进行Java编程,实现复杂的测试流程。

比如第一步发送一个REST请求,得到请求结果,第二步使用Java代码判断请求结果是否正确,第三步,再根据第二步的情况执行REST请求或其他交互流程。

重复、多线程执行测试流程

性能测试时,我们需要长时间、高频率地触发流程,Jmeter支持设置测试次数,甚至永久测试,满足性能测试对时间和次数的要求。Jmeter还支持多线程并发测试,还支持同时进行多个测试流程,每个测试流程都是并发测试。

 

结束语

像这种性能问题、内存问题,一般不会经常出现,一旦出现,就很重要紧急。

工欲善其事必先利其器,想要成为高级程序员,一定要学会怎么快速定位这种问题,一定要不断升级自己的工具箱。

你可以先学会使用本文提到的工具,当问题来临时,只会青睐有准备的人。

posted @   小目标是一年  阅读(124)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示