<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # jps顯示java進程 `java process status` 命令格式:`jps [options] [hostid]?` `[options]`選項?: ~~~ -q:僅輸出VM標識符,不包括classname,jar name,arguments in main method? -m:輸出main method的參數? -l:輸出完全的包名,應用主類名,jar的完全路徑名? -v:輸出jvm參數? -V:輸出通過flag文件傳遞到JVM中的參數(.hotspotrc文件或-XX:Flags=所指定的文件? -Joption:傳遞參數到vm,例如:-J-Xms512m ~~~ ~~~ jps -lmv ~~~ # jstat分析JVM的使用情況 **jstat -gc** 例子 如下表示分析進程id為31736 的gc情況,每隔1000ms打印一次記錄,打印10次停止,每3行后打印指標頭部 ~~~ jstat -gc -h3 31736 1000 10 ~~~ | 參數 | 描述 | | --- | --- | | S0C |年輕代中第一個survivor(幸存區)的容量 (字節) | S1C |年輕代中第二個survivor(幸存區)的容量 (字節) | S0U |年輕代中第一個survivor(幸存區)目前已使用空間 (字節) | S1U |年輕代中第二個survivor(幸存區)目前已使用空間 (字節) | EC | 年輕代中Eden(伊甸園)的容量 (字節) | EU | 年輕代中Eden(伊甸園)目前已使用空間 (字節) | OC | Old代的容量 (字節) | OU | Old代目前已使用空間 (字節) | PC | Perm(持久代)的容量 (字節) | PU | Perm(持久代)目前已使用空間 (字節) | YGC |從應用程序啟動到采樣時年輕代中gc次數 | YGCT| 從應用程序啟動到采樣時年輕代中gc所用時間(s) | FGC |從應用程序啟動到采樣時old代(全gc)gc次數 | FGCT| 從應用程序啟動到采樣時old代(全gc)gc所用時間(s) | GCT |從應用程序啟動到采樣時gc用的總時間(s) **jstat -gcutil** 查看gc的統計信息 ~~~ jstat -gcutil xxxx ~~~ | 參數 | 描述 | | --- | --- | | S0 | 年輕代中第一個survivor(幸存區)已使用的占當前容量百分比 | S1 | 年輕代中第二個survivor(幸存區)已使用的占當前容量百分比 | E | 年輕代中Eden(伊甸園)已使用的占當前容量百分比 | O | old代已使用的占當前容量百分比 | P | perm代已使用的占當前容量百分比 | YGC | 從應用程序啟動到采樣時年輕代中gc次數 | YGCT| 從應用程序啟動到采樣時年輕代中gc所用時間(s) | FGC | 從應用程序啟動到采樣時old代(全gc)gc次數 | FGCT| 從應用程序啟動到采樣時old代(全gc)gc所用時間(s) | GCT | 從應用程序啟動到采樣時gc用的總時間(s) **`jstat -gccapacity pid`** 可以顯示,VM內存中三代(young,old,perm)對象的使用和占用大小, | 參數 | 描述 | | --- | --- | | NGCMN | 年輕代(young)中初始化(最小)的大小 (字節) | NGCMX | 年輕代(young)的最大容量 (字節) | NGC | 年輕代(young)中當前的容量 (字節) | S0C | 年輕代中第一個survivor(幸存區)的容量 (字節) | S1C |年輕代中第二個survivor(幸存區)的容量 (字節) | EC | 年輕代中Eden(伊甸園)的容量 (字節) | OGCMN | old代中初始化(最小)的大小 (字節) | OGCMX | old代的最大容量 (字節) | OGC | old代當前新生成的容量 (字節) | OC | Old代的容量 (字節) | PGCMN | perm代中初始化(最小)的大小 (字節) | PGCMX | perm代的最大容量 (字節) | PGC | perm代當前新生成的容量 (字節) | PC | Perm(持久代)的容量 (字節) | YGC | 從應用程序啟動到采樣時年輕代中gc次數 | FGC | 從應用程序啟動到采樣時old代(全gc)gc次數 # jinfo查看jvm擴展參數 ~~~ jinfo [option] <pid> jinfo [option] <executable <core> jinfo [option] [server_id@]<remote server IP or hostname> where <option> is one of: -flag <name> to print the value of the named VM flag -flag [+|-]<name> to enable or disable the named VM flag -flag <name>=<value> to set the named VM flag to the given value -flags to print VM flags -sysprops to print Java system properties <no option> to print both of the above ~~~ **參數說明** * pid 對應jvm的進程id * executable core 產生core dump文件 * \[server-id@\]remote server IP or hostname 遠程的ip或者hostname,server-id標記服務的唯一性id **option** * no option 輸出全部的參數和系統屬性 * \-flag name 輸出對應名稱的參數 * \-flag \[+|-\]name 開啟或者關閉對應名稱的參數 * \-flag name=value 設定對應名稱的參數 * \-flags 輸出全部的參數 * \-sysprops 輸出系統屬性 **Javacore 概述** Javacore,也可以稱為“threaddump”或是“javadump”,它是 Java 提供的一種診斷特性,能夠提供一份可讀的當前運行的 JVM 中線程使用情況的快照。即在某個特定時刻,JVM 中有哪些線程在運行,每個線程執行到哪一個類,哪一個方法。 應用程序如果出現不可恢復的錯誤或是內存泄露,就會自動觸發 Javacore 的生成 > 命令:jinfo pid > 描述:輸出當前 jvm 進程的全部參數和系統屬性 > 命令:jinfo -flag name pid > 描述:輸出對應名稱的參數 > 可以查看指定的 jvm 參數的值。如:查看當前 jvm 進程是否開啟打印 GC 日志。 > 命令:jinfo -flag \[+|-\]name pid > 描述:開啟或者關閉對應名稱的參數 > 使用 jinfo 可以在不重啟虛擬機的情況下,可以動態的修改 jvm 的參數。尤其在線上的環境特別有用。主要是針對 boolean 值的參數設置的 > 命令:jinfo -flag name=value pid > 描述:修改指定參數的值。 > 如果是設置 value值,則需要使用 name=value 的形式。 > 命令:jinfo -flags pid > 描述:輸出全部的參數 > 命令:jinfo -sysprops pid > 描述:輸出當前 jvm 進行的全部的系統屬性 # jmap生成堆內信息 命令jmap是一個多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆內對象示例的統計信息、查看 ClassLoader 的信息以及 finalizer 隊列。 ~~~ jmap [option] <pid> jmap [option] <executable <core> jmap [option] [server_id@]<remote server IP or hostname> ~~~ **參數** * **option:** 選項參數。 * **pid:** 需要打印配置信息的進程ID。 * **executable:** 產生核心dump的Java可執行文件。 * **core:** 需要打印配置信息的核心文件。 * **server-id** 可選的唯一id,如果相同的遠程主機上運行了多臺調試服務器,用此選項參數標識服務器。 * **remote server IP or hostname** 遠程調試服務器的IP地址或主機名。 **option** * **no option:** 查看進程的內存映像信息,類似 Solaris pmap 命令。 * **heap:** 顯示Java堆詳細信息 * **histo\[:live\]:** 顯示堆中對象的統計信息 * **clstats:**打印類加載器信息 * **finalizerinfo:** 顯示在F-Queue隊列等待Finalizer線程執行finalizer方法的對象 * **dump::**生成堆轉儲快照 * **F:** 當-dump沒有響應時,使用-dump或者-histo參數. 在這個模式下,live子參數無效. * **help:**打印幫助信息 * **J:**指定傳遞給運行jmap的JVM的參數 >命令:jmap pid >描述:查看進程的內存映像信息,類似 Solaris pmap 命令。 > 使用不帶選項參數的jmap打印共享對象映射,將會打印目標虛擬機中加載的每個共享對象的起始地址、映射大小以及共享對象文件的路徑全稱。這與Solaris的pmap工具比較相似。 > 命令:jmap -heap pid > 描述:顯示Java堆詳細信息 > 命令:jmap -dump:format=b,file=heapdump.phrof pid > 描述:生成堆轉儲快照dump文件。 > 以hprof二進制格式轉儲Java堆到指定filename的文件中。live子選項是可選的。如果指定了live子選項,堆中只有活動的對象會被轉儲。想要瀏覽heap dump,你可以使用jhat(Java堆分析工具)讀取生成的文件。 這個命令執行,JVM會將整個heap的信息dump寫入到一個文件,heap如果比較大的話,就會導致這個過程比較耗時,并且執行的過程中為了保證dump的信息是可靠的,所以會暫停應用, 線上系統慎用。 # jcmd 一個多功能的工具,可以用它來導出堆、查看Java進程、導出線程信息、執行GC、還可以進行采樣分析(jmc 工具的飛行記錄器) **查看性能統計** 命令:`jcmd pid PerfCounter.print ` 描述:查看指定進程的性能統計信息 **列出當前運行的 java 進程可以執行的操作** 命令:`jcmd PID help` **查看具體命令的選項** 如果想查看命令的選項,比如想查看 JFR.dump 命令選項,可以通過如下命令: `jcmd 11772 help JFR.dump` **JFR** 要使用 JRF 相關的功能,必須使用 VM.unlock\_commercial\_features 參數取消鎖定商業功能 ~~~ jcmd 8152 VM.unlock_commercial_features ~~~ * 啟動JFR 執行命令:jcmd $PID JFR.start name=abc,duration=120s * Dump JFR 等待至少duration(本文設定120s)后,執行命令:jcmd PID JFR.dump name=abc,duration=120s filename=abc.jfr(注意,文件名必須為.jfr后綴) * 檢查JFR狀態 執行命令:jcmd $PID JFR.check name=abc,duration=120s * 停止JFR 執行命令:jcmd $PID JFR.stop name=abc,duration=120s * JMC分析 切回開發機器,下載步驟3中生成的abc.jfr,打開jmc,導入abc.jfr即可進行可視化分析 **查看 JVM 的啟動時長** 命令:`jcmd PID VM.uptime` **查看系統中類統計信息** 命令:`jcmd PID GC.class_histogram` **查看目標jvm進程的版本信息** `jcmd PID VM.version` **執行gc** `jcmd PID GC.run ` **查看 JVM 的啟動命令行** `jcmd PID VM.command_line` **查看 JVM 的啟動參數** `jcmd PID VM.flags` # jhat分析堆文件 用來分析java堆的命令,可以將堆中的對象以html的形式顯示出來,包括對象的數量,大小等等,并支持對象查詢語言 ~~~ jhat xxx ~~~ 有時你dump出來的堆很大,在啟動時會報堆空間不足的錯誤,可以使用如下參數: `jhat -J-Xmx512m` # jstack線程堆棧分析 參數提示 * \-l 長列表. 打印關于鎖的附加信息,例如屬于java.util.concurrent 的 ownable synchronizers列表. * \-F 當’jstack \[-l\] pid’沒有相應的時候強制打印棧信息 * \-m 打印java和native c/c++框架的所有棧信息. 通過 jstack 命令可以獲取當前進程的所有線程信息。 每個線程堆中信息中,都可以查看到 線程ID、線程的狀態(wait、sleep、running 等狀態)、是否持有鎖信息等。 **Object.wait()情況** 一個線程處于WAITING狀態,在Test.java文件13行處,正是我們調用wait方法的地方,說明該線程目前還沒等到notify ![](https://img.kancloud.cn/f3/56/f356957d0a839c8a4b1e9c1adce624bf_775x226.png) **死鎖** 可以清楚的看出 mythread2 等待 這個鎖 “0x00000000d6eb82d0”,這個鎖是由于mythread1線程持有。 mythread1線程等待這個鎖“0x00000000d6eb8300”,這個鎖是由mythread2線程持有。 ![](https://img.kancloud.cn/ec/a2/eca290cbf01b1476d1154acbe8ea19a6_1184x344.png) **等待IO** ![](https://img.kancloud.cn/19/12/19127f0ae2af4cd3a2239f190a613ecb_662x178.png) # mac,jmc界面問題 這個問題是由于Eclipse/SWT老版本的bug導致的,可以通過替換相關jar解決。bug reference: JMC-5139 1. 下載jar包:[下載地址](https://search.maven.org/search?q=g:org.eclipse.platform%20AND%20a:org.eclipse.swt.cocoa.macosx.x86_64&core=gavr)(選最上面的即可)。 2. 進入jdk安裝目錄,在lib/missioncontrol/plugins目錄內找到org.eclipse.swt.cocoa.macosx.x86_64_3.103.1.v20140903-1947.jar,將其備份。 (通過安裝包安裝的jdk目錄為/Library/Java/JavaVirtualMachines/jdk1.8.0_xxx.jdk/Contents/Home/) 3. 將我們下載的jar包重命名為org.eclipse.swt.cocoa.macosx.x86_64_3.103.1.v20140903-1947.jar,復制到lib/missioncontrol/plugins目錄內替換原jar包。 重啟jmc
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看