• (十)java虚拟机性能监控工具


    一、 jps(Java Virtual Machine Process Status Tool)  

    • jps主要用来输出JVM中运行的进程状态信息。语法格式如下:

    • 命令行参数选项说明如下:

      1.1  案例

    public class StackOnTest {  
        public static void alloc() {  
            byte[] b = new byte[2];  
            b[0] = 1;  
        }  
      
        public static void main(String[] args) {  
           Scanner sc=new Scanner(System.in);
           sc.nextLine();
        }  
      
    }  
    • 上述代码执行三次,就有三个进程,注意此时不能在console里输入信息,这样程序就会卡在 Scanner sc=new Scanner(System.in); 这里,执行三次就有三个进程

     二、jstack

    •  jstack主要用来查看某个Java进程内的线程堆栈信息。语法格式如下:

     

    • 命令行参数选项说明如下:

     

     三、jstat:类装载、内存、垃圾手机、JIT编译的信息

    • 语法格式如下:

    • vmid是Java虚拟机ID,在Linux/Unix系统上一般就是进程ID。interval是采样时间间隔。count是采样数目。

    结果

      解释结果图各列含义

     四、jinfo:实时查看和调整虚拟机的各项参数

    • jinfo使用介绍
    可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时,修改部分参数
    -flag <name> pid:打印指定JVM的参数值 
    -flag [+|-]<name> pid:设置指定JVM参数的布尔值
    -flag <name>=<value> pid:设置指定JVM参数的值

      4.1  案例

    public class JInfoTest {
        private static void s2() {
            String name = ManagementFactory.getRuntimeMXBean().getName();
            // get pid
            String pid = name.split("@")[0];
            System.out.println("Pid is:" + pid);
    
            while (true) {
                byte[] b = null;
                for (int i = 0; i < 10; i++)
                    b = new byte[1 * 1024 * 1024];
    
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public static void main(String[] args) {
            s2();
        }
    }
    • 设置jvm启动参数,如下:

    •  运行程序,此时结果如下:

    • 使用jinfo,修改jvm参数

     

    有一点必须注意:PrintGC必须开启,只开启PrintGCDetails、PrintGCTimeStamps不会输出GC,必须PrintGC同时开启

    •  查看控制台,结果如下:

     五、jmap

    •  jmap是输出内存中对象的工具,甚至可以将VM 中的heap以二进制输出成文本。可以监控JAVA程序是否有内存泄漏。
    •  两种使用方法:

    一、jmap -histo PID在内存使用峰值前后分别dump一次,可以对比出GC回收了哪些对象。

    二、jmap -dump:format=b,file=f1 PID 将该内存heap输出到f1文件里,配合eclipse插件MemoryAnalyzer来使用

  • 相关阅读:
    程序性能优化1
    在archlinux上搭建twitter storm cluster
    .Net 跨平台可移植类库PCL可用于任何平台包括Mono
    .NET面向对象特性之封装
    哈夫曼(Huffman)编码
    高质量视频学习网站
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1071 潜伏者
  • 原文地址:https://www.cnblogs.com/shyroke/p/8305106.html
Copyright © 2020-2023  润新知