前言
上一篇介绍了一些简单的java命令,这次难度稍微加深一点点,介绍几个高级一点的java命令jinfo和jstack。
jinfo
也许当你运行jinfo命令时,可能会遇到java.lang.InternalError:Metadata does not appear to be polymorphic的异常,如下图:

解决方式就是安装相应的jdk debug包。因为我的环境是Ubuntu和openjdk1.8的环境,所以执行以下命令,安装openjdk-8-dbg包
sudo apt-get install openjdk-8-dbg
–flags查看jvm参数
执行jinfo -flags命令可以查看java进程的相关参数,包括jvm默认缺省的参数也显示出来了,这个是jps -lv是查看不到的。
jinfo -flags pid

-sysprops查看系统参数
执行jinfo -sysprops 命令可以查看系统相关参数
jinfo -sysprops 312

动态修改jvm参数
先查看那些jvm参数可以修改
java -XX:PrintFlagsFinal -version | grep manageable

能调整的jvm参数并不多,比较实用就PrintGC,下面试试吧
jinfo -flag PrintGC=1 312
运行后可以看到参数确实被修改了

jstack
jstack命令是非常实用的一个命令,可以查看死锁和一些线程特别高的问题。
死锁
先写一个死锁的java程序
public class DeadThread {
static final Object lockOne = new Object();
static final Object lockTwo = new Object();
public static void main(String[] args) {
Thread thread1 = new Thread(</

本文介绍了Java诊断工具jinfo和jstack的使用,包括查看JVM参数、系统属性、动态修改参数以及排查死锁和高CPU占用问题。通过实例展示了如何利用这些工具进行问题定位,强调了线程命名在问题排查中的重要性。
最低0.47元/天 解锁文章
86万+

被折叠的 条评论
为什么被折叠?



