利用jdk自帶的運行監控工具JConsole觀察分析Java程序的運行 Jtop

利用jdk自帶的運行監控工具JConsole觀察分析Java程序的運行

原文鏈接

一、JConsole是什么

??? 從Java 5開始 引入了 JConsole。JConsole 是一個內置 Java 性能分析器,可以從命令行或在 GUI shell 中運行。您可以輕松地使用 JConsole(或者,它更高端的 “近親” VisualVM )來監控 Java 應用程序性能和跟蹤 Java 中的代碼。

二、如何啟動JConsole

  1. 如果是從命令行啟動,使 JDK 在 PATH 上,運行 jconsole 即可。
  2. 如果從 GUI shell 啟動,找到 JDK 安裝路徑,打開 bin 文件夾,雙擊?jconsole?。

??? 當分析工具彈出時(取決于正在運行的 Java 版本以及正在運行的 Java 程序數量),可能會出現一個對話框,要求輸入一個進程的 URL 來連接,也可能列出許多不同的本地 Java 進程(有時包含 JConsole 進程本身)來連接。如圖所示:


想分析那個程序就雙擊那個進程。

三、如何設置JAVA程序運行時可以被JConsolse連接分析

  1. 本地程序(相對于開啟JConsole的計算機),無需設置任何參數就可以被本地開啟的JConsole連接(Java SE 6開始無需設置,之前還是需要設置運行時參數 -Dcom.sun.management.jmxremote )
  2. 無認證連接 (下面的設置表示:連接的端口為8999、無需認證就可以被連接)
    1. -Dcom.sun.management.jmxremote.port=8999?\??
    2. -Dcom.sun.management.jmxremote.authenticate=false?\??
    3. -Dcom.sun.management.jmxremote.ssl=false??
    ?
  3. 如果考慮到安全因素,需要認證,需要安全連接,也是可以搞定的。參考:http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdenv

四、JConsole如何連接遠程機器的JAVA程序(舉例說明)

1、寫一個簡單的一直運行的JAVA程序,運行在某臺機器上如(192.168.0.181)

  1. java?-cp?.?-Dcom.sun.management.jmxremote.port=8999?-Dcom.sun.managent.jmxremote.authenticate=false?-Dcom.sun.management.jmxremote.ssl=false?JConsoleTest??
?

2、另外一臺機器進行連接

可以直接使用命令:

  1. jconsole.exe?192.168.0.181:8999??

?也可以在已經打開的JConsole界面操作 連接->新建連接->選擇遠程進程->輸入遠程主機IP和端口號->點擊“連接”,如圖:

?

?然后就會進入分析界面:?

性能分析

下面說說如何分析,如何使用這六個標簽

  • 概述:?Displays overview information about the Java VM and monitored values.
  • 內存:?顯示內存使用信息
  • 線程:?顯示線程使用信息
  • 類:?顯示類裝載信息
  • *VM摘要:*顯示java VM信息
  • MBeans:?顯示 MBeans.

概述


?

??? 概述很簡單沒啥說的,自己看看吧,不過值得一提的是對著圖點擊右鍵可以保存數據到CSV文件,以后可以使用其他工具來分析這些數據。

內存


??? 這個比較有價值,參看堆內存,非堆內存,內存池的狀況總體內存的分配和使用情況以及不同的GC進行垃圾回收的次數和時間。可以手動進行GC查看內存變化。

?

?? 在分析JAVA內存問題進行調優時候非常有用,你要學習JVM內存模型,之后會發現這里的每個值都具有意義。

?

?? GC的算法和參數對性能有顯著的影響,注意垃圾回收次數、時間、以及partial GC和full GC,調整你所使用的不同GC和以及各個GC下的參數,然后在這個視圖下觀察,以得到好的性能。

?

這里貼一下 Java?HotSpot?VM garbage collector 下generational GC 的各代的劃分圖:

?

關于GC,可以參考:http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

線程


??? 左下角顯示所有的活動線程(如果線程過多,可以在下面的過濾欄中輸入字符串過濾出你想要觀察的線程)。點擊某個顯示會顯示這個線程的名稱、狀態、阻塞和等待的次數、堆棧的信息。

?

??? 統計圖顯示的是線程數目的峰值(紅色)和當前活動的線程(藍色)。

?

?? 另外下面有個按鈕“檢測到死鎖”,有時候會有用處。


沒啥要說的。

VM摘要

?

也沒啥要說的,看看吧,內存狀況,操作系統...

MBean


這里可以有一些額外的操作。

插件

  1. jconsole?-pluginpath?C:\Java\jdk1.6.0_22\demo\management\JTop\JTop.jar??

?

下載地址:http://download.csdn.net/detail/hanghangaidoudou/9857777

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387621.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387621.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387621.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java版電子商務spring cloud分布式微服務b2b2c社交電商:服務容錯保護(Hystrix斷路器)...

斷路器斷路器模式源于Martin Fowler的Circuit Breaker一文。“斷路器”本身是一種開關裝置,用于在電路上保護線路過載,當線路中有電器發生短路時,“斷路器”能夠及時的切斷故障電路,防止發生過載、發熱、甚至起火等嚴重后果。在分…

微信小程序頁面跳轉、邏輯層模塊化

一、頁面的跳轉 微信小程序的頁面跳轉函數方法有兩個,另外還有兩種模塊跳轉方式。 函數跳轉: 1.wx.navigateTo(OBJECT): wx.navigateTo({url: test?id1})//保留當前頁面,跳轉到應用內的某個頁面,使用wx.navigateBack可…

java內存溢出分析工具:jmap使用實戰

java內存溢出分析工具:jmap使用實戰 在一次解決系統tomcat老是內存撐到頭,然后崩潰的問題時,使用到了jmap。 1 使用命令 在環境是linuxjdk1.5以上,這個工具是自帶的,路徑在JDK_HOME/bin/下 jmap -histo pid>a.log…

Oracle加密解密

Oracle內部有專門的加密包,可以很方便的對內部數據進行加密(encrypt)和解密(decrypt). 介紹加密包之前,先簡單說一下Oracle基本數據類型——RAW類型。 RAW,用于保存位串的數據類型,類…

條件變量 sync.Cond

sync.Cond 條件變量是基于互斥鎖的,它必須有互斥鎖的支撐才能發揮作用。 sync.Cond 條件變量用來協調想要訪問共享資源的那些線程,當共享資源的狀態發生變化的時候,它可以用來通知被互斥鎖阻塞的線程條件變量的初始化離不開互斥鎖&#xff0c…

JDK內置工具使用

JDK內置工具使用 一、javah命令(C Header and Stub File Generator) 二、jps命令(Java Virtual Machine Process Status Tool) 三、jstack命令(Java Stack Trace) 四、jstat命令(Java Virtual Machine Statistics Monitoring Tool) 五、jmap命令(Java Memory Map) 六、jinfo命令…

mall整合RabbitMQ實現延遲消息

摘要 本文主要講解mall整合RabbitMQ實現延遲消息的過程,以發送延遲消息取消超時訂單為例。RabbitMQ是一個被廣泛使用的開源消息隊列。它是輕量級且易于部署的,它能支持多種消息協議。RabbitMQ可以部署在分布式和聯合配置中,以滿足高規模、高可…

競價打板的關鍵點

競價打板,主要是速度,其他不重要的,如果為了當天盈利大,失去競價打板的本質含義,因為競價可以買到,盤中買不到,才是競價打板的目的,也就是從競價打板的角度看,主要是看習…

Java常見的幾種內存溢出及解決方法

Java常見的幾種內存溢出及解決方法【情況一】:java.lang.OutOfMemoryError:Javaheapspace:這種是java堆內存不夠,一個原因是真不夠(如遞歸的層數太多等),另一個原因是程序中有死循環;如果是java…

docker操作之mysql容器

1、創建宿主機器的掛載目錄 /opt/docker/mysql/conf /opt/docker/mysql/data /opt/docker/mysql/logs 2、創建【xxx.cnf】配置文件,內容如下所示: [mysqld]#服務唯一Idserver-id 1port 3306log-error /var/log/mysql/error.log #只能用IP地址skip_nam…

Windows10系統下wsappx占用CPU資源過高?wsappx是什么?如何關閉wsappx進程?

在Windows10系統開機的時候,wsappx進程占用的CPU資源非常高,導致電腦運行速度緩慢,那么我們如何關閉wsappx進程,讓電腦加快運行速度呢?下面就一起來看一下操作的方法吧。 【現象】 1、先來看一下電腦剛開機的時候&…

如何通過Windows Server 2008 R2建立NFS存儲

如何通過Windows Server 2008 R2建立NFS存儲在我們日常工作的某些實驗中,會需要使用存儲服務器。而硬件存儲成本高,如StarWind之類的iSCSI軟存儲解決方案需要單獨下載服務器端程序,且配置比較繁瑣,令很多新手們很是頭疼。事實上&a…

python-windows安裝相關問題

1.python的環境配置,有些時候是沒有配置的,需要在【系統環境】-【path】里添加。 2.安裝pip:從官網下載pip包,然后到包目錄》python setup.py install 安裝 3.安裝scrapyd:正常使用pip3 install scrapyd安裝不起&…

hdu 1542/1255 Atlantis/覆蓋的面積

1542 1255 兩道掃描線線段樹的入門題。 基本沒有什么區別&#xff0c;前者是模板&#xff0c;后者因為是求覆蓋次數至少在兩次以上的&#xff0c;這個同樣是具有并集性質的&#xff0c;所以把cover的判斷條件更改一下就可以了qwq。 hdu1542 代碼如下&#xff1a; #include<i…

使用了JDK自帶的jconsole查看Tomcat運行情況

最近對公司的項目進行JVM調優&#xff0c;使用了JDK自帶的jconsole查看Tomcat運行情況&#xff0c;記錄下配置以便以后參考&#xff1a;首先&#xff0c;修改Tomcat的bin目錄下的catalina.bat文件&#xff0c;在JAVA_OPTS變量中添加下面四行&#xff0c;即可set JAVA_OPTS %JAV…

jvm02

java虛擬機內存管理 每個線程就是一個順序的執行單元&#xff0c;線程共享區即多個線程共享同一塊區域&#xff0c;線程獨占區即每個線程都有自己的虛擬機棧&#xff0c;本地方法棧&#xff0c;程序計數器。 程序計數器是一個比較小的內存空間&#xff0c;可以看作是當前線程所…

搭建svn管理平臺

安裝svn服務器&#xff1a;yum -y install subversion創建svn的目錄&#xff1a;mkdir -p /data/svn初始化svn目錄&#xff1a;svnadmin create /data/svnconf下的三個目錄介紹&#xff1a;authz&#xff1a;控制權限,創建用戶。密碼在passwd創建 passwd&#xff1a;密碼文件&…

Oracle dataguard 正常切換和應急切換

Oracle dataguard 正常切換和應急切換oracle dataguard提供異地容災方案,能有效的防止單點故障和提供高可用技術,這里介紹dataguard正常主備切換和應急切換&#xff08;應急切換模擬主庫出現問題無法還原,備庫脫離dataguard接管主庫對外提供服務&#xff09;1&#xff09;Oracl…

好程序員web前端分享JS引擎的執行機制

好程序員web前端分享JS引擎的執行機制&#xff0c;請先著重牢記兩點&#xff01;JS是單線程語言。JS的EventLoop是JS的執行機制。深入了解JS的執行&#xff0c;就等于深入了解JS里的eventloop。1、靈魂三問&#xff1a;JS為什么是單線程的?為什么需要異步?單線程又是如何實現…

shutil模塊、json和pickle模塊

shutil模塊&#xff1a; 高級的文件、文件夾、壓縮包處理模塊 json和pickle模塊 之前學過eval內置方法可以將一個字符串轉化成Python對象&#xff0c;但eval方法是有局限性的&#xff0c;對于普通的數據類型&#xff0c;json.loads、eval都可以使用&#xff0c;但遇到特殊類型的…