JVM监控常用命令

总结一下项目中常用的几项JVM监控命令

项目中线上环境要定位问题,比如说遇到oom、stackoverflow、堆溢出、栈溢出,一般怎么排查问题?一些比较原始的监控Java程序的运行状态的JVM命令中,用的比较多的命令就是top命令,可以用来查看当前进程的使用情况、CPU占用率、内存使用情况、服务器负载状态等等。如果服务器报警,可以用top命令先看一看到底是哪个进程出了问题。

  • 第二个jps,和Linux上的ps命令类似,可以先查看本地运行了哪些Java程序。我一般先用top找到进程号,然后再用jps去看具体是哪个进程出的问题。

  • 第三个是jstat,这个就厉害了,可以用来监视JVM的各种堆,非堆的大小,内存的使用量,用的最多的就是看GC的回收情况,包括young GC、full GC(什么时候发生的,执行花了多久)。如果你需要JVM调优的话,这个命令肯定是少不了的,它能够帮助我们分析JVM设置的参数是否合理,选用的算法合适不合适,当然如果发生了oom内存溢出,它会出现频繁的GC,也可以通过jstat命令监测出来。

  • 第四个jstack,这个命令主要是来跟踪堆栈的,一般用来查看某个线程包含线程的情况,可以用来监测CPU过高的问题,如果出现了stackoverflow、栈溢出的情况,那就可以通过jstack进行问题的排查。

  • 第五个jmap,这个命令主要是用来查看JVM的内存使用情况,包括heap总大小,已使用的大小,空间大小等等,同时它还会输出堆内存中的各种对象所占用的空间大小以及数量,比如说类、字符数组、字符串等等,我们常见的dump文件,就是通过jmap来导出的,但是这个命令要慎用,因为这个命令在执行的过程中,整个的程序会暂停,如果你的dump文件比较大,导出耗时比较高,可能就会对线上的用户产生影响,所以尽量还是在测试环境来操作,不要用在生产环境!(完)

ps: 如果有任何疑问,欢迎评论区给我留言


已有 0 条评论

    感谢参与互动!