首先我们了解一下jdk有那些工具:
jcmd命令:jcmd命令是最全面,基本涵盖所有功能的命令
jstat:查看gc的使用情况
jstack:查看线程使用情况
这些大家可以一个一个敲,或者百度看详解,这边就不一一列举参数了。
我们来看一下jdk可视化工具吧,主要是监控内存,堆,线程等数据:
在使用可视化工具时先启动端口:jcmd pid ManagementAgent.start jmxremote.port=7777 jmxremote.rmi.port=7777 jmxremote.ssl=false jmxremote.authenticate=false
jvisualVM:它主要用于监控内存,堆,线程等数据,启动jvisualVM:
jmc:它的特色主要是飞行器,飞行器就是获取到一个时间段一分钟的jvm运行情况:
在项目启动添加-XX:+UnlockCommercialFeatures -XX:+FlightRecorder命令
启动jmc:
工具就介绍到这里吧,大家可以自行摸索,主要工具也没啥好讲的。。。慢慢摸吧,小博主也一样需要多摸索摸索啦。
故障排除之线程死锁问题:
在我们日常项目运行时可能会出现系统使用很卡的情况,这个时候我们首先需要关注我们服务器cpu使用情况,查看那个进程占用cpu较大,这里我们主要是查看java程序死锁的情况,检查步骤如下:
1:top查看进程使用情况:
2:打印该进程下,线程使用情况:top -H -p pid
看图中有许多的线程,但是每个线程占用的cpu又比较少,同时java进程的cpu又下不来,这个时候我们就要关注线程是否进行了死锁,这个也是比较典型的死锁问题。
3:将线程的pid转成16进制:printf “%x\n” 27212
4:使用jstack命令将线程使用情况输入到文件中:jstack -l 26416 >> a.log
5:打卡日志:vim a.log
整体线程死锁排查结束
故障排除之gc内存溢出问题:
除了线程死锁以外,我们还可能因为各种原因导致gc内存溢出,那么我们可以在启动jar时添加命令:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=路径 在内存溢出时,将日志文件输出到指定路径,然后我们可以通过各种工具进行gc内存溢出进行排查了,我这边使用的是Jprofile工具查看class类使用情况,结合https://gceasy.io进行gc回收查看进行排查。