zoukankan      html  css  js  c++  java
  • jvm05

    虚拟机工具

    jps

    java process status

    本地虚拟机唯一id lvmid local virtual machine id

     1 public class Main {
     2     
     3     public static void main(String[] args) {
     4             
     5         Scanner sc = new Scanner(System.in);
     6         sc.next();
     7         
     8     }
     9 
    10 }

    连续执行3次,jps显示

    jps -l 

    显示进程所执行的主类或者jar文件

    jps -m 

    显示所运行的主类所接受的参数

    program arguments    aaa

    jps -v

    显示所接受的 vm arguments参数

    2196  -Dosgi.requiredJavaVersion=1.8 -Dosgi.instance.area.default=@user.home/eclipse-workspace -XX:+UseG1GC -XX:+UseStringDeduplication -Dosgi.requiredJavaVersion=1.8 -Xms256m -Xmx1024m
    14472 Jps -Denv.class.path=.;C:Program FilesJavajdk1.8.0_161lib;C:Program FilesJavajdk1.8.0_161lib	ools.jar -Dapplication.home=C:Program FilesJavajdk1.8.0_161 -Xms8m
    392 Main -Dfile.encoding=UTF-8
    5864 Main -Dfile.encoding=UTF-8
    8504 Main -Dfile.encoding=UTF-8

    jps -mlv

    显示以上所有参数

    jstat

    类加载,内存,垃圾收集,jit编译的信息

    详情:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

    M即元空间,元空间的本质和永久代类似,都是对JVM规范中方法区的实现,不过元空间与永久代最大的区别在于:元空间并不在虚拟机中,而是使用本地内存,因此原空间的大小仅受本地内存影响。

    jinfo

    实时查看和调整虚拟机的各项参数。

    +表示启用,-禁用

    -flag [+|-]<name>     to enable or disable the named VM flag   -XX:[+/-] option

    -flag <name>=<value>   -XX:option=value

        

    jmap

    Jhat(JVM heap Analysis Tools)

    默认会开启一个Server ,端口7000

    jstack

    用于生成虚拟机当前时刻的线程快照,定位线程长时间停顿的原因

    用代码达到同样效果

     1 public class Main {
     2     
     3     public static void main(String[] args) {
     4         
     5         Map<Thread,StackTraceElement[]> m = Thread.getAllStackTraces();
     6         for(Map.Entry<Thread, StackTraceElement[]> en : m.entrySet()) {
     7             Thread t = en.getKey();
     8             StackTraceElement[] v = en.getValue();
     9             
    10             System.out.println("Thread name is "+t.getName());
    11             for(StackTraceElement s : v) {
    12                 System.out.println("	"+s.toString());
    13             }
    14         }
    15     }
    16 }

    Console

     1 Thread name is Signal Dispatcher
     2 Thread name is Finalizer
     3     java.lang.Object.wait(Native Method)
     4     java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
     5     java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
     6     java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
     7 Thread name is Attach Listener
     8 Thread name is Reference Handler
     9     java.lang.Object.wait(Native Method)
    10     java.lang.Object.wait(Object.java:502)
    11     java.lang.ref.Reference.tryHandlePending(Reference.java:191)
    12     java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)
    13 Thread name is main
    14     java.lang.Thread.dumpThreads(Native Method)
    15     java.lang.Thread.getAllStackTraces(Thread.java:1610)
    16     com.roocon.test5.Main.main(Main.java:9)

    图形化工具

    JConsole

    内存监控

    线程监控

    关于线程监控,模拟runnable状态和wait状态

     1 public class Main {
     2     
     3     public static void main(String[] args) {
     4         
     5         Scanner sc = new Scanner(System.in);
     6         sc.next();
     7         
     8         new Thread(new Runnable() {
     9             
    10             @Override
    11             public void run() {
    12                 while(true) {
    13                     
    14                 }
    15             }
    16     //定义线程名
    17         },"while true").start();
    18         
    19         sc.next();
    20         testWait(new Object());
    21         
    22     }
    23 
    24     private static void testWait(Object obj) {
    25         new Thread(new Runnable() {
    26             
    27             @Override
    28             public void run() {
    29                 
    30                 synchronized (obj) {
    31                     try {
    32                         obj.wait();
    33                     } catch (InterruptedException e) {
    34                         e.printStackTrace();
    35                     }
    36                     
    37                 }
    38                 
    39             }
    40         },"wait").start();
    41         
    42         
    43     }
    44 }
    45

    VisualVM

    地址:https://visualvm.github.io/index.html

  • 相关阅读:
    注册、登录、忘记密码实战
    python3错误:format() takes at most 2 arguments
    Charles手机抓包简要步骤
    VARCHAR2(N CHAR)与VARCHAR2(N)的区别
    关于VI一些常用的操作
    LINUX下 基于 Socket 的 UDP 和 TCP 编程具体实现
    VC++6.0实现文本格式的转换保存
    crt的sftp使用用于Windows与Linux之间的通讯
    pl/sql 导出脚本与使用
    在oracle10g下启动服务报 Permission denied错误解决方法
  • 原文地址:https://www.cnblogs.com/quyangyang/p/11013917.html
Copyright © 2011-2022 走看看