日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

查看JVisualVM查看信息

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 查看JVisualVM查看信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 我用的 jdk 是1.8,打開 jdk 的安裝目錄(D:\Program Files\Java\jdk1.8.0_05\bin),雙擊?jvisualvm.exe ,打開之后自動連接上本地的 java 進程,如需遠程連接需要配置 tomcat 或者 weblogic 的 jvm 參數 (參考文章:https://blog.csdn.net/fengchao2016/article/details/77237057),配置好后也可以用本地 idea 調試遠程服務器上的代碼(參考文章:https://www.cnblogs.com/qnight/p/8983145.html)。

2. 安裝插件,可以使用 btrace,在里面添加log日志,打印遠程服務器上的參數信息,參考文章(https://blog.csdn.net/keketrtr/article/details/74448127)

3. 打開后如下圖:

4. 運行 TestDeadLock.java,可以看到本地里面多了一個進程

public class TestDeadLock {public void run() {MyThread mt = new MyThread();new Thread(mt, "張三").start();new Thread(mt, "李四").start();}class MyThread implements Runnable {private Object o1 = new Object();private Object o2 = new Object();private boolean flag = true;@Overridepublic void run() {if (flag) {flag = false;synchronized (o1) {System.out.println(Thread.currentThread().getName() + " have o1");try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}synchronized (o2) {System.out.println(Thread.currentThread().getName() + " have o2");}}} else {flag = true;synchronized (o2) {System.out.println(Thread.currentThread().getName() + " have o2");try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}synchronized (o1) {System.out.println(Thread.currentThread().getName() + " have o1");}}}}}public static void main(String[] args) {new TestDeadLock().run();}}

5. 可以看到 cpu, 堆,Metaspace,加載的類,線程信息,

6. 打開線程標簽頁,可以看到有檢測到死鎖

7. 抽樣器的cpu可以看到具體的線程,按照線程占用cpu的時間排序,可以看出哪個線程占用cpu最高

8. Visual GC 可以看到目前 GC 的情況:

9. 點擊jian監視頁面的堆dump按鈕可以看到dump信息:

10. 點擊線程標簽頁的線程 dump 按鈕,

11. 使用 Btrace 插件輸出遠程服務器上的參數:

①在 idea 運行?BTraceTest

import java.io.BufferedReader; import java.io.InputStreamReader;public class BTraceTest {public int add(int a, int b){return a + b;}public static void main(String args[]) throws Exception{BTraceTest test = new BTraceTest();BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));for(int i = 0; i < 1000; i++){reader.readLine();int a = (int)Math.round(Math.random() * 1000);int b = (int)Math.round(Math.random() * 1000);System.out.println(test.add(a, b));System.out.println(test.init());}}public String init(){return "init";} }

②在JvisiualVM選中BtraceTest,右鍵打開 Trace Application,

③在打開的地方輸入如下代碼:

import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*;@BTrace public class TracingScript {/* put your code here */@OnMethod(clazz = "BTraceTest", method = "add", location = @Location(Kind.RETURN))public static void func(@Self BTraceTest instance, int a, int b, @Return int result){println(" Call Stack ");// jstack();println(strcat(" Parameter A ", str(a)));println(strcat(" Parameter B ", str(b)));println(strcat(" Parameter Result ", str(result)));} @OnMethod(clazz = "BTraceTest", method = "init", location = @Location(Kind.RETURN))public static void func(@Self BTraceTest instance, @Return String result){println(" Call Stack ");// jstack(); // println(strcat(" Parameter A ", str(a))); // println(strcat(" Parameter B ", str(b)));println(strcat(" Parameter Result ", str(result)));} }

④點擊 Btrace 標簽頁的?Start 按鈕,并在 idea 控制臺輸入字符,比如1,會看到Btrace頁面會打印出 a, b 的值,及返回值,iead控制臺也會輸出 Btrace 的信息

⑤. 如果報如下錯誤:'com.sun.btrace.compiler.Verifier' 的受支持 source 版本 'RELEASE_6' 低于 -source '1.8',則說

明我運行的jdk版本是1.6,jvisualvm 用的 是1.8目錄下的。

總結

以上是生活随笔為你收集整理的查看JVisualVM查看信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。