VisualVM:通過SSH監視遠程JVM(是否為JMX)

VisualVM是用于監視JVM(5.0+)的有關內存使用情況,線程,GC,MBeans等的出色工具。讓我們看看如何通過SSH使用它來監視(甚至使用JMX對其進行采樣,對帶有JMX的遠程JVM進行監視)它。 這篇文章基于在Ubuntu 10和VisualVM 1.3.3上運行的Sun JVM 1.6。

1.交流:JStatD與JMX

VisualVM和JVM之間有兩種通信方式:通過Java Management Extensions (JMX)協議或通過jstatd 。

jstatd

jstatd是與JDK一起分發的守護程序。 在目標計算機上從命令行啟動它(可能需要以運行目標JVM的用戶身份或以root用戶身份運行它),VisualVM將與它聯系以獲取有關遠程JVM的信息。

  • 優點:可以連接到正在運行的JVM,無需使用特殊參數啟動它
  • 缺點:監視功能受到更多限制(例如,沒有CPU使用率監視,無法運行Sampler和/或進行線程轉儲)。

例如:

bash> cat jstatd.all.policy
grant codebase 'file:${java.home}/../lib/tools.jar' {
permission java.security.AllPermission;
}
bash> sudo /path/to/JDK/bin/jstatd -J-Djava.security.policy=jstatd.all.policy
# You can specify port with -p number and get more info with -J-Djava.rmi.server.logCalls=true

注意:如果僅復制但未安裝JDK,則將“ $ {java.home} /../ lib / tools.jar”替換為絕對的“ /path/to/jdk/lib/tools.jar”。

如果失敗了

Could not create remote object
access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)
java.security.AccessControlException: access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)

那么jstatd可能沒有使用正確的java.security.policy文件啟動(嘗試提供其完全限定的路徑)。

有關來自Oracle的VisualVM和jstatd的更多信息 。

JMX

  • 優點:使用JMX將為您提供VisualVM的全部功能。
  • 缺點:需要使用某些系統屬性啟動JVM。

啟動目標JVM時,通常將需要使用以下屬性(盡管您也可以啟用SSL和/或要求用戶名和密碼):

yourJavaCommand... -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1098

請參閱遠程JMX連接 。

2.安全性:SSH

通過ssh連接到遠程JMX或jstatd的最簡單方法是使用SOCKS代理 ,它可以設置標準ssh客戶端。

2.1使用SOCKS設置SSH隧道

ssh -v -D 9696 my_server.example.com

2.2配置VisualVM以使用代理

工具->選項->網絡–手動代理設置–檢查它并在本地主機和端口9696上配置SOCKS代理

2.3將VisualVM連接到目標

文件->添加遠程主機…–鍵入遠程計算機的IP或主機名JStatD連接

您應該在ssh窗口中都看到日志(由于其“ -v”, 例如:debug1:端口9696的連接轉發到請求的socks端口0。 ”和“ debug1:通道3:free:direct-tcpip:為10.2.47.71端口1099偵聽端口9696,從127.0.0.1端口61262,nchannels 6 “” 連接并在啟動jstatd的控制臺中(很多,例如“ FINER:RMI TCP Connection(23)-10.2.47.71 :… “)

添加遠程主機后,請等待幾分鐘,然后您將看到JVM在其中運行。

可用狀態:JVM參數,監視器:堆,類,線程監視(但不包括CPU)。 采樣器和MBean需要JMX。

JMX

右鍵單擊已添加的遠程主機,然后選擇“添加JMX連接...”,鍵入您選擇的JMX端口。

您應該看到與jstatd類似的日志。

可用的統計信息:CPU使用率,系統屬性,詳細的線程報告(可訪問堆棧跟蹤),CPU采樣(不支持內存采樣)。

注意:采樣器與分析器

VisualVM的采樣器不包括在Object.wait和Thread.sleep(例如,等待I / O)中花費的時間。 如果您希望獲得更多控制權或希望包括Object.wait和Thread.sleep時間,請使用NetBeans Profiler來對遠程應用程序進行概要分析或采樣。 它要求其Remote Pack(Java代理,即JAR文件)位于目標JVM中(NetBeans的附加向導可以在步驟4(手動集成)中為您生成遠程包,并向您展示傳遞給目標的選項JVM使用它)。

您可以通過以下方式通過SSH運行探查器:轉發其默認端口 (5140),并將其附加到本地主機上的轉發端口(NetBeans版本7.1.1)。

別忘了分享!

參考: VisualVM: The Holy Java博客上來自JCG合作伙伴 Jakub Holy的通過SSH監視遠程JVM(無論是否為JMX) 。


翻譯自: https://www.javacodegeeks.com/2012/09/visualvm-monitoring-remote-jvm-over-ssh.html

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

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

相關文章

h5 php js實驗總結,H5學習_番外篇_PHP數據庫操作

1. 文件操作1.1 打開關閉文件fopen()resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )?fopen()函數將resource綁定到一個流或句柄。綁定之后,腳本就可以通過句柄與此資源交互;例1:以只讀方式打開一個位于本地服務…

ReactNative開發環境

此內容根據徐贏老師的文檔整理后寫處 原版地址:https://tuomaxu.gitbooks.io/reactnative/content/ ReactNative是跨平開發的解決方案,在開發平臺的選擇上,mac平臺和win平臺都可以。 所需要工具如下: 1,Nodejs環境 2&a…

Python自動化開發 - 字符串, 列表, 元組, 字典和和文件操作

一、字符串特性:字符串本身不可修改,除非字符串變量重新賦值。Python3中所有字符串都是Unicode字符串,支持中文。 >>> name "Jonathan" >>> name "Jonathan" "Ni" >>>print(na…

shiro java配置,InI 配置 - 跟我學 Apache Shiro_教程_Java開發社區

INI 配置之前章節我們已經接觸過一些 INI 配置規則了,如果大家使用過如 Spring 之類的 IoC/DI 容器的話,Shiro 提供的 INI 配置也是非常類似的,即可以理解為是一個 IoC/DI 容器,但是區別在于它從一個根對象 securityManager 開始。…

在Spring容器外部連接對象依賴項

有幾種有趣的方法可以設置在Spring容器外部實例化的對象的屬性和依賴關系。 用例首先,為什么我們需要在Spring容器之外進行依賴注入–我知道三個用例,其中我實例化了Spring容器之外的對象并需要注入依賴。 首先考慮使用Spring TaskExecutor執行一系列任…

前端學習路線匯總

https://123.w3cschool.cn/plk2fihttps://www.w3cschool.cn/nodejs/nodejs-global-object.htmlnode.js轉載于:https://www.cnblogs.com/sxz2008/p/7238773.html

MediaInfo源代碼分析 1:整體結構

博客地址:http://blog.csdn.net/leixiaohua1020/article/details/12016231 MediaInfo源代碼分析系列文章列表: MediaInfo源代碼分析 1:整體結構MediaInfo源代碼分析 2:API函數MediaInfo源代碼分析 3:Open()函數MediaI…

測試RESTful服務的客戶端

開發使用RESTful Web API的應用程序可能意味著開發服務器和客戶端。 為服務器端編寫集成測試可以像使用Arquillian來啟動服務器一樣容易,并且可以通過REST確保測試服務是否按預期工作。 問題是如何測試客戶端。 在本文中,我們將了解如何使用模擬來測試客…

linux mysql誤刪,linux下MySQL安裝與刪除?(Ubuntu)

1、MySQL安裝A)MySQL安裝: sudo apt-get install mysql-server mysql-clientB)啟動/停止MySQL服務:MySQL 在安裝以后,MySQL 就已經啟動;如果需要手動啟動或停止則如下操作:手動啟動服務: sudo start mysql手…

對多態的理解例子

public class A {public String show(D obj) {return ("A and D");}public String show(A obj) {return ("A and A");} }class B extends A{public String show(B obj){ //重載return ("B and B");}public String show(A obj){ //重寫show(A obj…

【Java每日一題】20170120

20170119問題解析請點擊今日問題下方的“【Java每日一題】20170120”查看(問題解析在公眾號首發,公眾號ID:weknow619) package Jan2017; import java.util.Arrays; import java.util.List; public class Ques0120 { publ…

使用NoSQL實現實體服務–第2部分:合同優先

現在該開始使用NoSQL項目對SOA實體服務進行編碼了,并且正如我所承諾的,我將從Web服務的合同開始。 看一下本系列的第1部分 。 這種從Web服務合同定義開始的技術是面向服務的體系結構實現的“合同優先”方法的核心,并具有許多技術優勢&#xf…

php hugepage,【原創】解決Redis啟動報錯:Transparent Huge Pages (THP) support enabled in your kernel...

問題背景Redis啟動報錯:WARNING you have Transparent Huge Pages (THP) support enabled in your kernel.This will create latency and memory usage issues with Redis.To fix this issue run the command echo never > /sys/kernel/mm/transparent_hugepage/…

hibernate cascade的真正含義

hibernate cascade 是 OneToOne OneToMany ManyToOne ManyToMany等注解的屬性&#xff0c;表示級聯操作。 /*** (Optional) The operations that must be cascaded to* the target of the association.** <p> By default no operations are cascaded.*/CascadeType[] cas…

射線碰撞檢測

在我們的游戲開發過程中&#xff0c;有一個很重要的工作就是進行碰撞檢測。例如在射擊游戲中子彈是否擊中敵人&#xff0c;在RPG游戲中是否撿到裝備等等。在進行碰撞檢測時&#xff0c;我們最常用的工具就是射線&#xff0c;Unity 3D的物理引擎也為我們提供了射線類以及相關的函…

高級ZK:異步UI更新和后臺處理–第1部分

異步UI更新非常有用&#xff0c;因為它們通常可以提高響應性&#xff0c;可用性和用戶界面的總體感覺。 我將在這里重點介紹ZK框架&#xff0c;但是通常&#xff0c;相同的原理也適用于桌面UI&#xff08;Swing&#xff0c;SWT&#xff09;。 長時間運行的處理 有時&#xff0…

php注冊登錄遍寫入 遍驗證,自動注冊登錄驗證機制的php代碼

在phpwind站點后臺添加“廣告管家”(CNZZ的一款廣告投放的應用)的應用&#xff0c;整個“廣告管家”通過iframe載入&#xff0c;載入的具體內容根據不同站點顯示針對該站點的具體內容。出于意用性方面的考慮&#xff0c;需要以下二點&#xff1a;1、首次進入“廣告管家”頁面自…

轉載:tensorflow保存訓練后的模型

訓練完一個模型后&#xff0c;為了以后重復使用&#xff0c;通常我們需要對模型的結果進行保存。如果用Tensorflow去實現神經網絡&#xff0c;所要保存的就是神經網絡中的各項權重值。建議可以使用Saver類保存和加載模型的結果。 1、使用tf.train.Saver.save()方法保存模型 tf.…

php url傳遞變量,php – 在laravel中通過url傳遞變量

我是laravel的新手,我正在努力讓我的網址格式正確.格式為http://mysite/blog?category1 instead of http://mysite/blog/category1這些是我正在使用的文件,有沒有辦法將路由放入BlogControllerRoute.phpRoute::get(blog/{category}, function($category null){// get all the…

Apache Wicket:記住我的功能

在Web應用程序中&#xff0c;具有“記住我”功能非常普遍&#xff0c;該功能使用戶每次訪問我們的網站時都能自動登錄。 可以使用Spring Security來實現這種功能&#xff0c;但我認為將基于請求的身份驗證框架與基于組件的Web框架結合使用并不是最好的主意。 這兩個世界不能很好…