1. 程式人生 > >3.深入jvm核心-原理、診斷與優化-6. 效能監控工具

3.深入jvm核心-原理、診斷與優化-6. 效能監控工具

  1. uptime

     當前時間 1:01
     系統已執行的時間 1:42
     當前線上使用者 3 user
     平均負載:3.62, 3.39, 3.24,最近1分鐘、5分鐘、15分鐘系統的負載
    
  2. top

  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. 顯示了新生代物件晉升到老年代物件的最大年齡

       jinfo -flag MaxTenuringThreshold 2972
      

      -XX:MaxTenuringThreshold=15

    2. 顯示是否列印GC詳細資訊

       jinfo -flag PrintGCDetails  2972
      

      -XX:-PrintGCDetails

    3. 執行時修改引數,控制是否輸出GC日誌

      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