写在前面
我们写的代码都是运行在JVM上面的,虽然代码的逻辑我们是知道的,但是JVM对我们来讲就像是一个黑盒。通常情况下会用qps、rt这些指标来反应程序性能和质量,但是在出现性能问题的时候我们怎么取查看到底是哪里处理问题?
jstat
这应该是最常用也是最方便的工具,用法如下:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
通过option参数可以看到不同的数据,不过大部分都是来看GC的情况。比如:
jstat -gcutil 12728 10000 10
其他类似的option有:
- gcnew
- gcnewcapacity
- gcold
- gcoldcapacity
- gcpermcapacity
- gccause
另外,多数情况下Full GC会跟加载的Class太多有关系,jstat也可以进行查看:
jstat -class 12728 10000 10
在运行时,如果有大量的字节码会被编译成本地代码的话,这部分的工作也比较耗时间(Server模式下启动较慢,但是启动之后比Client模式运行的快):
jstat -compiler 12728 10000 10
jstat -printcompilation 12728 10000 10