• JDK bin指令


    jmap:

    一、调用命令示例:

    jmap -F-dump:format=b,file=rmsheap.bin 6086

    就会在当前目录下生成rmsheap.bin的文件,6086是Pid。-F是在某些情况下连不上进程时需要加上。

    二、使用:

    使用mat进行分析,下载地址:http://www.eclipse.org/mat/downloads.php

    可以分析内存泄露,等。还有,能看到当前类的实例个数,以证实是否有些类被占用着没有被回收:

     

    其他的功能待发掘。

     

    jstack:

    一、调用命令示例:

    jstack -F 3879 >> stack

    3879是Pid,-F是连不上进程时使用。导出到stack文件。

     

    二、使用:

    Thread31548: (state = BLOCKED)

     - Java.lang.Object.wait(long) @bci=0 (Interpretedframe)

     - java.lang.Object.wait() @bci=2, line=485(Interpreted frame)

     -org.apache.commons.pool.impl.GenericObjectPool.borrowObject() @bci=108,line=811 (Interpreted frame)

     -org.apache.commons.dbcp.PoolingDataSource.getConnection() @bci=4, line=96(Interpreted frame)

     -org.apache.commons.dbcp.BasicDataSource.getConnection() @bci=4, line=880(Interpreted frame)

    看见这些大量阻塞状态的线程,就可以大概猜出来是哪个部件出了问题。然后,可以去google上找找,找不到就看源代码分析了。再结合其他的分析。比如说这个,猜想是取不出线程对象来了,一直在等,分析下代码,看看哪些类有在用,比如看到下面这个:

                Connection conn =(Connection)_pool.borrowObject();

                if(conn !=null)

                    conn = new PoolGuardConnectionWrapper(conn);

    那么猜想如果借出去了没有换的话,是否PoolGuardConnectionWrapper这个类型的实例应该不少。那就可以从mat里面去看了。再结合数据库池观察软件进行分析。

    其他的分析案例可google之。

     

    jstat –gcutil

    一、调用命令示例:

    jstat-gcutil 21891 250 7

    21891 进程号; 250ms 采样interval; 7 count

    结果信息:

    S0  — Heap上的 Survivor space 0 区已使用空间的百分比

    S1  — Heap上的 Survivorspace 1 区已使用空间的百分比

    E   — Heap上的 Edenspace 区已使用空间的百分比

    O   — Heap上的 Oldspace 区已使用空间的百分比

    P   — Perm space 区已使用空间的百分比

    YGC — 从应用程序启动到采样时发生 Young GC 的次数

    YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)

    FGC — 从应用程序启动到采样时发生 Full GC 的次数

    FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)

    GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

    二、使用:

    FGC的次数太频繁,一定要调整,尽量调低这个的次数,耗时耗性能。一般是增加此区的内存。

    YGC能少就少。

    其他的看比率吧?

    JVisualVM:

    一、调用命令示例:

    直接运行-》jvisualvm

    二、使用:

    本地的可直接使用,如果要连远程的,需要配置JMX。

    在JAVA_OPTS=里增加如下配置

    -Dcom.sun.management.jmxremote.port=7028-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false

    在运行了jvisualvm的机器上设置:

     

    即可在本地进行分析了。可以看线程、dump线程快照等,可以安装额外的插件进行分析。还可以强制执行GC。

     

    Jconsole

    一、调用命令实例:

    直接运行-》jvisualvm

    Linux下会提示需要图形界面(如果没有的话)

    二、使用:

    配置JMX与jvisualvm一致。通过下面这种格式的链接进行连接:

    service:jmx:rmi:///jndi/rmi://10.211.1.100:7028/jmxrmi

    与jvisualvm不同的是mbean,是很多用java类的形式展示的jvm的信息。那应该编程时也可以获取得到。

     

    Jinfo:

    一、调用命令实例:

    jinfo 8155

     

    二、使用:

    输入很多信息,最下面的设置参数信息-opts:,VM Flags:。

     

    Jps:

    输出java的进程用。

  • 相关阅读:
    CentOS部署ElasticSearch7.6.1集群
    Linux安装Elasticsearch7.x
    ElasticSearch安装为Windows服务
    SolrNet Group分组 实现
    ubuntu 下安装sublime
    LeetCode 3: Longest Substring Without Repeating Characters
    LeetCode 179: Largest Number
    LeetCode 1: Two Sum
    LeetCode 190: Reverse Bits
    LeetCode 7: Reverse Integer
  • 原文地址:https://www.cnblogs.com/zihanxing/p/6852620.html
Copyright © 2020-2023  润新知