jstat命令并获取JVM运行信息
jstat命令并获取JVM运行信息
秋风醉了 发表于2年前
jstat命令并获取JVM运行信息
  • 发表于 2年前
  • 阅读 232
  • 收藏 10
  • 点赞 1
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

摘要: jstat命令并获取JVM运行信息

jstat命令并获取JVM运行信息

先来了解一下java.lang.management包的基本信息,提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。

下面代码就是使用了该软件包的类,获取当前运行的java程序的pid,然后运行jstat命令获取jvm的运行信息,

package com.usoft.sort;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.ManagementFactory;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by xinxingegeya on 16/4/12.
 */
public class JstatMain {

    /**
     * S0 — Heap上的 Survivor space 0 区已使用空间的百分比
     * S1 — Heap上的 Survivor space 1 区已使用空间的百分比
     * E — Heap上的 Eden space 区已使用空间的百分比
     * O — Heap上的 Old space 区已使用空间的百分比
     * M — Metaspace区已使用空间的百分比
     * CCS-Compressed class space capacity (kB)
     * YGC — 从应用程序启动到采样时发生 Young GC 的次数
     * YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
     * FGC — 从应用程序启动到采样时发生 Full GC 的次数
     * FGCT-从应用程序启动到采样时 Full GC 所用的时间(单位秒)
     * GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
     */
    public static void main(String args[]) throws IOException {

        Map<String, Object> monitor = new HashMap<>();

        List<String> statColumn = Arrays.asList("S0", "S1", "E", "O", "M", "CCS", "YGC", "YGCT", "FGC", "FGCT", "GCT");

        String name = ManagementFactory.getRuntimeMXBean().getName();
        System.out.println(name);
        String pid = name.substring(0, name.indexOf("@"));
        Process process = Runtime.getRuntime().exec("jstat -gcutil " + pid + " 5000");

        //通过process拿到jstat命令的执行结果的输入流
        InputStreamReader isr = new InputStreamReader(process.getInputStream());
        BufferedReader bufferedReader = new BufferedReader(isr);

        String line = null;
        while ((line = bufferedReader.readLine()) != null) {
            String[] stats = line.trim().split("[ ]+");
            if (stats.length == statColumn.size()) {
                for (int i = 0; i < stats.length; i++) {
                    monitor.put(statColumn.get(i), stats[i]);
                    System.out.println(statColumn.get(i) + ":" + stats[i]);
                }
                System.out.println("=====");
            }
        }
    }
}

 

运行结果,

1142@Yale-Li
S0:S0
S1:S1
E:E
O:O
M:M
CCS:CCS
YGC:YGC
YGCT:YGCT
FGC:FGC
FGCT:FGCT
GCT:GCT
=====
S0:0.00
S1:0.00
E:16.01
O:0.00
M:17.19
CCS:19.74
YGC:0
YGCT:0.000
FGC:0
FGCT:0.000
GCT:0.000
=====
S0:0.00
S1:0.00
E:16.01
O:0.00
M:17.19
CCS:19.74
YGC:0
YGCT:0.000
FGC:0
FGCT:0.000
GCT:0.000
=====

=========END=========

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 216
博文 605
码字总数 432157
×
秋风醉了
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: