Linux命令行
jvm
主要是Linux的JDK自带一些命令,用于观察jvm变化趋势,通过变化趋势观察是否存在性能问题。
jstack:线程栈,一般用于线程栈溢出、直接内存溢出。
jstat:GC变化趋势、jvm堆内存占用趋势,观察gc时间和趋势,得到是否存在内存泄漏
jinfo:jvm配置参数信息
jmap:内存快照,获取这一时刻所有的内存对象,一般用与内存溢出、内存泄漏等问题
常用命令:
jstack -l 999 >jstack.log //打印进程id=999的java服务的瞬时线程栈,输出到jstack.log文件中
jstat -gcutil 999 1000 1000 | awk '{ print $0"\t" strftime("%H:%M:%S",systime()) } ' //随时间实时打印进程id=999的java服务的jvm GC详情,1000 1000表示每1000ms打印一次、打印1000次
jmap -dump:format=b,file=cs3devicedump_fullgc.hprof 999 //打印进程id=999的java服务的内存快照,输出到cs3devicedump_fullgc.hprof文件中
文本处理
主要用于过滤日志,统计次数,验证数据一致性和数据完整性
Linux三剑客:
awk
grep
sed
其他:
vim
head、tail
开源工具
arthas:阿里推出的开源工具,可监控jvm/线程、动态修改代码、抓取SQL、捕获java代码的调用耗时等,适用于你有较高的用户权限,强烈推荐。
jprofiler:图形化工具,可采样一段时间,并图形化输出采样期间的各种jvm数据、DB调用数据、耗时数据;也可实时显示性能数据。但需要破解(可能吃律师函),且通常只支持虚拟机环境,容器环境配置较麻烦。
jmeter:接口调试工具、开源压测工具,对于java代码的支持比较友好,适合二次开发,尤其是涉及TCP、MQTT等协议的压测、二次开发(完全开源,可进行自定义二次开发,强烈推荐)。
IBM三剑客:ja、ha、ga,分析线程栈、内存快照、gc日志的开源工具,由IBM公司推出。(强烈推荐,但需要一定jvm基础)。
付费工具
dynatrace:与jprofiler类似,图形化工具,采样一段时间,并图形化输出采样期间的各种jvm数据、DB调用数据、耗时数据。