jvm性能监控与故障排查
首先我们了解一下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回收查看进行排查。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2021-04-14 [已解决]Linux下Java生成图片中文乱码问题
2021-04-14 linux > 和 >> < 区别
2021-04-14 CentOS 7 安装 Jenkins
2021-04-14 lunix下find命令使用
2021-04-14 lunix 下安装maven
2021-04-14 RocketMQ 安装部署教程详解
2021-04-14 rocketmq启动broker报错解决