文章插图
通过top -Hp PID命令可以看到占用CPU比较高的线程 , 如图:
文章插图
再次通过jstack PID>log.txt , 输出堆栈信息即可进行排查定位 。
2、jstatjstat命令是分析JVM运行状况的常用命令 。
jstat -options-class 用于查看类加载情况的统计-compiler 用于查看HotSpot中即时编译器编译情况的统计-gc 用于查看JVM中堆的垃圾收集情况的统计-gccapacity 用于查看新生代、老生代及持久代的存储容量情况-gcmetacapacity 显示metaspace的大小-gcnew 用于查看新生代垃圾收集的情况-gcnewcapacity 用于查看新生代存储容量的情况-gcold 用于查看老生代及持久代垃圾收集的情况-gcoldcapacity 用于查看老生代的容量-gcutil 显示垃圾收集信息-gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次仅当前正在发生的垃圾收集的原因-printcompilation 输出JIT编译的方法信息以jstat -gcutil为例:
[root@hadoop ~]# jstat -gcutil 3346 #显示垃圾收集信息S0 S1 E O M CCS YGC YGCT FGC FGCT GCT52.97 0.00 42.10 13.92 97.39 98.02 8 0.020 0 0.000 0.020
- S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
- S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
- E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
- O:old代已使用的占当前容量百分比
- M:元数据区已使用的占当前容量百分比
- CCS:压缩类空间已使用的占当前容量百分比
- YGC :从应用程序启动到采样时年轻代中gc次数
- YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)
- FGC :从应用程序启动到采样时old代(全gc)gc次数
- FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
- GCT:从应用程序启动到采样时gc用的总时间(s)
3.1 被监控的程序运行时给虚拟机添加一些运行的参数
无需认证的远程监控配置-Dcom.sun.management.jmxremote.port=60001//监控的端口号-Dcom.sun.management.jmxremote.authenticate=false//关闭认证-Dcom.sun.management.jmxremote.ssl=false-Djava.rmi.server.hostname=192.168.1.23.2 客户端连接被监控程序找到 JDK 安装路径 , 打开bin文件夹 , 双击jconsole.exe , 在已经打开的JConsole界面操作“连接->新建连接->选择远程进程->输入远程主机IP和端口号->点击“连接
文章插图
文章插图
4、jvisualvmjvisualvm与jConsole连接方式一致 , 连接后界面如下:
文章插图
【JAVA系列之JVM内存调优】
经验总结扩展阅读
- java中GC的日志认识详解
- Learning Records JavaScript进阶
- 31 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取Android系统中Flutter应用程序的包
- iphone13系列电池容量_iphone13系列续航对比
- 红魔手机6SPro多少钱_红魔手机6SPro价格多少
- 西瓜为什么叫西瓜呢
- 《上传那些事儿之Nest与Koa》——文件格式怎么了!
- 4 Java多线程:ThreadLocal
- C++算法之旅、02 从木棒切割问题领悟二分法精髓
- 特别特别透彻的签名 有道理的霸气签名