欢迎您, 来到 宁时修博客.^_^

Java程序线上排查命令----05、jinfo

2019/06/20 言则行 Java,linux命令 288
Java程序的问题排查命令

一、jinfo的简介

    jinfo 是 JDK 自带的命令,可以用来查看正在运行的 java 应用程序的扩展参数,包括Java System属性和 JVM 命令行参数;也可以动态的修改正在运行的 JVM一些参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息。

    官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jinfo.html


    Javacore 概述:

    Javacore,也可以称为“threaddump”或是“javadump”,它是 Java 提供的一种诊断特性,能够提供一份可读的当前运行的 JVM 中线程使用情况的快照。即在某个特定时刻,JVM 中有哪些线程在运行,每个线程执行到哪一个类,哪一个方法。

    应用程序如果出现不可恢复的错误或是内存泄露,就会自动触发 Javacore 的生成。




二、jinfo的使用参数

[root@test-web-server ~]# jinfo -h
Usage:
    jinfo [option] <pid>
        (to connect to running process)
    jinfo [option] <executable <core>
        (to connect to a core file)
    jinfo [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    -flag <name>         to print the value of the named VM flag
    -flag [+|-]<name>    to enable or disable the named VM flag
    -flag <name>=<value> to set the named VM flag to the given value
    -flags               to print VM flags
    -sysprops            to print Java system properties
    <no option>          to print both of the above
    -h | -help           to print this help message


    参数解释:

    option: 选项参数。

    pid: 需要打印配置信息的进程ID。

    executable: 产生核心dump的Java可执行文件。

    core: 需要打印配置信息的核心文件。

    server-id:可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器。

    remote server IP or hostname :远程调试服务器的IP地址或主机名。


    option:

    -flag <name>                   打印对应名称的VM参数

    -flag [+|-]<name>            启动或关闭对应名称的VM参数

    -flag <name>=<value>   将对应名称的VM参数设置为给定值

    -flags                                打印VM参数

    -sysprops                         打印系统属性

    <no option>                    输出全部VM参数和系统属性,name = value

    -h | -help                          打印帮助信息



三、jinfo使用示例

    1、no option

    命令: jinfo pid

    输出当前 jvm 进程的全部参数和系统属性

[root@test-web-server ~]# jinfo 31941
Attaching to process ID 31941, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.131-b11
Java System Properties:

java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 25.131-b11
sun.boot.library.path = /usr/java/jdk1.8.0_131/jre/lib/amd64
java.protocol.handler.pkgs = org.springframework.boot.loader
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = :
file.encoding.pkg = sun.io
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
sun.os.patch.level = unknown
sun.java.launcher = SUN_STANDARD
user.country = US
.............................................................



    2、-flag <name>

    命令:jinfo -flag name pid

    打印对应名称的VM参数

[root@test-web-server ~]# jinfo -flag MetaspaceSize 31941
-XX:MetaspaceSize=805306368
[root@test-web-server ~]# jinfo -flag PrintGC 31941
-XX:+PrintGC
[root@test-web-server ~]# jinfo -flag Xmn 31941
no such flag 'Xmn'
[root@test-web-server ~]# jinfo -flag Xss 31941
no such flag 'Xss'
[root@test-web-server ~]# jinfo -flag MaxNewSize 31941
-XX:MaxNewSize=2621440000

    使用该命令可以查看指定的JVM参数的值,当然JVM参数名称要写对。



    3、-flag [+|-]<name>

    命令:jinfo -flag [+|-]name

    启动或关闭对应名称的VM参数

    使用 jinfo 可以在不重启虚拟机的情况下,可以动态的修改 jvm 的参数。尤其在线上的环境特别有用。

    + 为启动某参数

    -  为关闭某参数

[root@test-web-server ~]# jinfo -flag -PrintGC 31941
[root@test-web-server ~]# jinfo -flag +PrintGC 31941



    4、-flag <name>=<value>

    命令:jinfo -flag name=value pid

    将对应名称的VM参数设置为给定值

    jinfo虽然可以在java程序运行时动态地修改虚拟机参数,但并不是所有的参数都支持动态修改。



    5、-flags

    命令:jinfo -flags pid

    打印VM参数

[root@test-web-server ~]# jinfo -flags 31941


    6、-sysprops

    命令: jinfo -sysprops pid

    打印系统属性

[root@test-web-server ~]# jinfo -sysprops 31941


点赞
说说你的看法

所有评论: (0)