3.深刻jvm內核-原理、診斷與優化-6. 性能監控工具

  1. uptimejava

    當前時間 1:01
     系統已運行的時間 1:42
     當前在線用戶 3 user
     平均負載:3.62, 3.39, 3.24,最近1分鐘、5分鐘、15分鐘系統的負載
  2. topide

  3. jps函數

    列出java進程,相似於ps命令
     參數-q能夠指定jps只輸出進程ID ,不輸出類的短名稱
     參數-m能夠用於輸出傳遞給Java進程(主函數)的參數
     參數-l能夠用於輸出主函數的完整路徑
     參數-v能夠顯示傳遞給JVM的參數
    
     jps
     	6260 Jps
     	7988 Main
     	400
     jps -q
     	7988
     	7152
     jps -m
     jps -m -l
     jps -m -l -v
  4. jinfo工具

    能夠用來查看正在運行的Java應用程序的擴展參數,甚至支持在運行時,修改部分參數
     -flag <name>:打印指定JVM的參數值
     -flag [+|-]<name>:設置指定JVM參數的布爾值
     -flag <name>=<value>:設置指定JVM參數的值
    1. 顯示了新生代對象晉升到老年代對象的最大年齡.net

      jinfo -flag MaxTenuringThreshold 2972

      -XX:MaxTenuringThreshold=15線程

    2. 顯示是否打印GC詳細信息日誌

      jinfo -flag PrintGCDetails  2972

      -XX:-PrintGCDetailscode

    3. 運行時修改參數,控制是否輸出GC日誌orm

      jinfo -flag PrintGCDetails  2972

      -XX:-PrintGCDetails對象

      jinfo -flag +PrintGCDetails  2972
      
      jinfo -flag PrintGCDetails  2972

      -XX:+PrintGCDetails

  5. jmap

    生成Java應用程序的堆快照和對象的統計信息

    jmap -histo 6292 >/Users/heliming/image/a.log

    Dump堆

    jmap -dump:format=b,file=/Users/heliming/image/heap.hprof 6292
  6. jstack

    打印線程dump
     -l 打印鎖信息
     -m 打印java和native的幀信息
     -F 強制dump,當jstack沒有響應時使用

    jstack 6292 >>/Users/heliming/image/a.txt

    jstack 6292

    public class DeadLockDemo {
    		private static String A = "A";
    		private static String B = "B";
    
    		static class Test {
    			public static void main(String[] args) throws InterruptedException {
    				new DeadLockDemo().deadLock();
    			}
    		}
    
    		/**
    		 * 線程死鎖
    		 */
    		private void deadLock() {
    			Thread t1 = new Thread(new Runnable() {
    				@Override
    				public void run() {
    					synchronized (A) {
    						try {
    							Thread.currentThread().sleep(2000);
    						} catch (InterruptedException e) {
    							e.printStackTrace();
    						}
    
    						synchronized (B) {
    							System.out.println("1");
    						}
    					}
    				}
    			});
    
    			Thread t2 = new Thread(new Runnable() {
    				@Override
    				public void run() {
    					synchronized (B) {
    						synchronized (A) {
    							System.out.println("2");
    						}
    					}
    				}
    			});
    
    			t1.start();
    			t2.start();
    		}
    	}
  7. jvisualvm jdk的bin下可視化檢測工具 使用:https://my.oschina.net/u/3730149/blog/write/3109370 第十條

相關文章
相關標籤/搜索