文档章节

jstat命令并获取JVM运行信息

秋风醉了
 秋风醉了
发布于 2016/04/12 23:17
字数 519
阅读 268
收藏 10

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=========

© 著作权归作者所有

共有 人打赏支持
秋风醉了
粉丝 241
博文 566
码字总数 417505
作品 0
朝阳
程序员
私信 提问
JVM:查看java内存情况命令

jinfo:可以输出并修改运行时的java 进程的opts。 jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 jstat:一个极强的监视VM内存工具。...

BazingaYou
2013/11/15
0
0
虚拟机学习之三:虚拟机性能监控与故障处理工具

1.JDK的命令行工具 jvm在jdk的bin目录下试下了很多监控分析jvm运行情况的命令行工具,这些工具都很小,大多数都是jdk/lib/tools.jar类库的薄封装。 1.1 jps -> 虚拟机进程状况工具 jps:虚拟...

贾峰uk
2018/12/20
0
0
JVM性能调优监控工具jps、jstack、jstat、jmap、jinfo使用详解

是什么 jps 查看所有的jvm进程,包括进程ID,进程启动的路径等等。 我自己也用PS,即:ps -ef | grep java jstack 观察jvm中当前所有线程的运行情况和线程当前状态。 系统崩溃了?如果java程...

xionghuiCoder
2015/08/13
0
0
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, js...

jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具...

老大做IT
2013/05/02
0
0
jdk自带分析vm工具(jdk 5.0以上版本)

一、概述 SUN 的JDK中的几个工具,非常好用。秉承着有免费,不用商用的原则。以下简单介绍一下这几种工具。(注:本文章下的所有工具都存在JDK5.0以上版本的工具集里,同javac一样,不须特意安...

王大叔爱编程
2014/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
1
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
2
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
3
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
4
0
深入理解JVM—JVM内存模型

深入理解JVM—JVM内存模型 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存...

onedotdot
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部