VisualVM遠端監控兩種配置方法介紹
今天介紹一下Java程式遠端監控工具。Java從最開始推出,核心特點就是物件自動收集機制,讓程式設計師不需要像C++時代要進行配對物件書寫。
但是,時至今日,我們依然能夠看到很多Java程式執行一段時間之後,丟擲StackOverFlow和OutOfMemory等錯誤資訊。這種時候,沒有經驗的開發人員只能盲目的面對所謂的“永不溢位”的JVM。應該說,在Java環境上進行記憶體管理和效能調優,更需要深厚的開發功底和知識體系。
Java虛擬機器JVM調優的工具很多,本篇介紹一下一個開源效能監控工具VisualVM的遠端配置功能。其中包括一些Linux版本Java和JBoss安裝過程,也都一併加入,供將來有需要的朋友待查。
1、VisualVM簡介
VisualVM是一個以監控、顯示本地或者遠端伺服器JVM工作情況,進行效能調優的工具。藉助VisualVM,我們可以實現對JVM記憶體各個子池、CPU、垃圾收集器等方面進行監控,從而發現程式程式碼中潛在的洩露點和配置問題。
VisualVM是一個Java編寫的綠色軟體,屬於開源範疇,官方地址為:visualvm.java.net。VisualVM是使用外掛Plugin的方式提供功能,預設提供了一些基本檢測功能。如果需要進行拓展,可以使用下載外掛的功能進行。
2、Java Linux版安裝
首先說說Java Linux版的安裝過程。我們需要從Oracle官方網站上找到Java Linux
注意,實際工作中,建議建立一個專門的使用者來進行java管理過程。實驗中,筆者選擇root帳號,是有一些不合適的。
[[email protected] upload]# ls -l
total 123656
-rwxr-xr-x 1 activemq activemq 126484866 Oct 25 2012 jdk-7u9-linux-i586.rpm
-rw-r--r-- 1 oracle oinstall 1004 Sep 17 2012 pfile.ora
直接執行rpm –ivh jdk-7u9-linux-i586.rpm
[[email protected] jdk1.7.0_09]# pwd
/usr/java/jdk1.7.0_09
[[email protected] jdk1.7.0_09]# cd lib
[[email protected] lib]# ls -l
total 26636
-rw-r--r-- 1 root root 396920 Sep 25 2012 ant-javafx.jar
-rw-r--r-- 1 root root 16615601 Sep 25 2012 ct.sym
-rw-r--r-- 1 root root 141738 Sep 25 2012 dt.jar
-rw-r--r-- 1 root root 18432 Sep 25 2012 ir.idl
-rw-r--r-- 1 root root 435849 Sep 25 2012 javafx-doclet.jar
-rw-r--r-- 1 root root 34383 Sep 25 2012 javafx-mx.jar
-rw-r--r-- 1 root root 409213 Sep 25 2012 jconsole.jar
-rwxr-xr-x 1 root root 7656 Sep 25 2012 jexec
-rw-r--r-- 1 root root 640 Sep 25 2012 orb.idl
-rw-r--r-- 1 root root 2566854 Sep 25 2012 sa-jdi.jar
-rw-r--r-- 1 root root 6570456 Sep 25 2012 tools.jar
drwxr-xr-x 6 root root 4096 Oct 25 2012 visualvm
修改.bash_profile檔案。
[[email protected] ~]# ls -al | grep .bash_profile
-rw-r--r-- 1 root root 191 Jan 6 2007 .bash_profile
[[email protected] ~]# vi .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
JAVA_HOME=/usr/java/jdk1.7.0_09
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export CLASSPATH
export PATH
unset USERNAME
~
證明Java正常安裝執行。
[[email protected] upload]# java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) Client VM (build 23.5-b02, mixed mode, sharing)
3、JBoss安裝
JBoss安裝是比較簡單的過程。就是解壓之後,配置對應目錄。
[[email protected] jboss-eap-6.1]# pwd
/jboss-eap-6.1
--環境變數
JBOSS_HOME=/jboss-eap-6.1
PATH=$PATH:$JBOSS_HOME/bin
從6.1開始,Jboss開始兩種啟動模式:Standalone模式和Domain模式。啟動指令碼也從原來的run.sh變成standalone.sh和domain.sh。
[[email protected] bin]# ./standalone.sh -b 192.168.137.88
=========================================================================
JBoss Bootstrap Environment
JBOSS_HOME: /jboss-eap-6.1
JAVA: /usr/java/jdk1.7.0_09/bin/java
JAVA_OPTS: -server -Xms1303m -Xmx1303m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
=========================================================================
05:42:52,747 INFO [org.jboss.modules] (main) JBoss Modules version 1.2.0.Final-redhat-1
05:42:53,164 INFO [org.jboss.msc] (main) JBoss MSC version 1.0.4.GA-redhat-1
05:42:53,354 INFO [org.jboss.as] (MSC service thread 1-2) JBAS015899: JBoss EAP 6.1.0.GA (AS 7.2.0.Final-redhat-8) starting
(篇幅原因,省略部分……)
05:42:58,430 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.1.0.GA (AS 7.2.0.Final-redhat-8) started in 6445ms - Started 123 of 177 services (53 services are passive or on-demand)
4、Jstatd RMI遠端監控方法
VisualVM在監控本地JVM的時候是很方便的。只要應用程式執行起來,我們就可以從VisualVM裡面監控出來。
遠端伺服器上的JVM監控就需要一些額外的配置了。目前VisualVM支援兩種監控方法:Jstatd方法和基於JMX的方法。我們先介紹Jstatd方法。
Jstatd方法是利用後臺的RMI守護程序來實現對遠端JVM的監控。首先建立一個監控策略檔案。
[[email protected] jboss-eap-6.1]# ls -l | grep jst
drwxr-xr-x 2 root root 4096 Jul 5 05:54 jstatd
--策略檔案內容
[[email protected] jstatd]# cat jstatd.all.policy
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
呼叫jstatd命令啟動程序。
[[email protected] jstatd]# hostname -i
192.168.137.88
[[email protected] jstatd]# jstatd -J-Djava.security.policy=jstatd.all.policy
此時,在監控程式VisualVM新增一個遠端主機之後,自動顯示出監控程序情況。
在Jstatd監控方式下,Sampler、MBeans、JConsole是不能啟用的。
5、JMX方式
JMX方式是我們監控應用伺服器(JBoss)常用的方法。很遺憾的是筆者只實驗成功了JBoss 4.4.2版本的功能。JBoss 6.1還不能成功。
連線JMX方法首先需要在Java端進行一些配置。
[[email protected] jdk1.7.0_09]# cd $JAVA_HOME/jre/lib/management
[[email protected] management]# pwd
/usr/java/jdk1.7.0_09/jre/lib/management
[[email protected] management]# ls -l
total 28
-rw-r--r-- 1 root root 3998 Sep 25 2012 jmxremote.access
-rw-r--r-- 1 root root 2856 Sep 25 2012 jmxremote.password.template
-rw-r--r-- 1 root root 14097 Sep 25 2012 management.properties
-rw-r--r-- 1 root root 3376 Sep 25 2012 snmp.acl.template
首先利用password.template檔案建立jmxremote.password檔案,並且設定相應的讀寫許可權。
[[email protected] management]# cp jmxremote.password.template jmxremote.password
[[email protected] management]# ls -l
total 32
-rw-r--r-- 1 root root 3998 Sep 25 2012 jmxremote.access
-rw-r--r-- 1 root root 2856 Jul 5 06:09 jmxremote.password
-rw-r--r-- 1 root root 2856 Sep 25 2012 jmxremote.password.template
-rw-r--r-- 1 root root 14097 Sep 25 2012 management.properties
-rw-r--r-- 1 root root 3376 Sep 25 2012 snmp.acl.template
[[email protected] management]#
將jmxremote.password中的許可權部分註釋標記去除。
# password "QED". The "controlRole" role has password "R&D".
#
# monitorRole QED
# controlRole R&D
修改為:
monitorRole QED
controlRole R&D
"jmxremote.password" 64L, 2852C written
同時,在JBoss啟動檔案run.sh的定義環境變數部分,加入如下內容。
if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS=" -Dcom.sun.management.jmxremote.port=9988
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
else
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9988
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
fi
下面,就可以增加JMX的9988埠的連線。顯示如下介面進行監控。
使用JMX監控的功能不支援Visual GC。對JBoss的支援性比較好。
5、結論
VisualVM是一種比較方便的效能監控工具,加之一定的JVM調優經驗和知識,可以幫助我們實現效能優化。
相關推薦
VisualVM遠端監控兩種配置方法介紹
今天介紹一下Java程式遠端監控工具。Java從最開始推出,核心特點就是物件自動收集機制,讓程式設計師不需要像C++時代要進行配對物件書寫。 但是,時至今日,我們依然能夠看到很多Java程式執行一段時間之後,丟擲StackOverFlow和OutOfMemory等錯誤
PPP的兩種配置方法(pap和chap)
pap chapPAP的配置R1上的配置[R1]int s4/0/0[R1-Serial4/0/0]ppp authentication-mode pap[R1-Serial4/0/0]q[R1]aaa[R1-aaa]local-user huawei password cipher 123456Info:
Servlet 過濾器兩種配置方法
Servlet 過濾器兩種配置方法 方法一(註解) /** * 使用註解標註過濾器 * @WebFilter將一個實現了javax.servlet.Filte介面的類定義為過濾器 * 屬性filt
使用visualvm遠端監控JVM LINUX tomcat伺服器與客戶端配置方法
VisualVM 是一款免費的效能分析工具。它通過 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多種方式從程式執行時獲得實時資料,從而進行動態的效能分析。同時,它能自動選擇更快更輕量級的技術儘量減少效能分析對應用程式
Spring 通過兩種工廠方法來配置bean
在Spring框架中建立Bean例項的時候中, 我們通常會利用配置檔案,也就是XML檔案形式 或者 annotation註解方式來配置bean. 在第一種利用配置檔案方式中, 還包括如下三小類 1、反射模式 2、工廠方法模式(本文重點) 3、Factory Be
swagger 介紹及兩種使用方法
一:swagger是什麼? 1、是一款讓你更好的書寫API文件的規範且完整框架。 2、提供描述、生產、消費和視覺化RESTful Web Service。 3、是由龐大工具集合支撐的形式化規範。這個集合涵蓋了從終端使用者介面、底層程式碼庫到商業API管理的方方
python環境配置過程中提示api-ms-win-crt-runtime-l1-1-0.dll丟失的兩種解決方法
一、問題描述win7 64位下api-ms-win-crt-runtime-l1-1-0.dll 丟失提醒二、解決問題api-ms-win-crt-runtime-l1-1-0.dll:下載地址方法:把
線程的兩種睡眠方法&ANR(進程/服務無響應)
時間 運行 睡眠 tro 執行 方法 如果 服務 一段 1 method1: try { 2 Thread.sleep(3000); 3 } catch (InterruptedException e) { 4
兩種配置adpater的方式
and adapt source ada ray har spin cad layout 第一種:資源文件配置 ArrayAdapter<CharSequence> cadapt=ArrayAdapter.createFromResource(this, 資源i
android縮放動畫的兩種實現方法
get odi omx rac tor Coding eight rpo odin 在android開發。我們會常常使用到縮放動畫,普通情況下縮放動畫有兩種實現方式。一種是直接通過java代碼去實現,第二種是通過配置文件實現動畫,以下是兩種動畫的基本是用法: Ja
記錄下log4j的兩種配置方式
ole num div resolv ade true uil data- range XML文件配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configur
mysql遠程連接失敗的兩種解決方法
mysql password upd leg .cn 權限 連接 每次 ddr ---恢復內容開始--- (這是轉載別人的,因為我覺得很有用,每次都是參考這個的第二種方法解決的,不管你聽不聽得到,先說聲謝謝!也記下來方便大家看看) mysql解決遠程不能訪問的二種方法,需要
【漏洞預警】CVE-2017-8464 震網三代漏洞復現(兩種利用方法)
art cal mage http test ip地址 get for oot 早在6月13日,微軟發布補丁修復編號為CVE-2017-8464的漏洞,本地用戶或遠程攻擊者可以利用該漏洞生成特制的快捷方式,並通過可移動設備或者遠程共享的方式導致遠程代碼執行,追溯到以前,NS
js實現菲波那切數列的兩種常用方法
res alert 定義 面向 div ret 如果 clas cti 菲波那切數列即:1 1 2 3 5 8......,後面的數字是前面兩個數字的和,並且第一個,第二個數字都是1,用js實現 的兩種方法,一種通過常用的遞歸調用,第二種不通過遞歸,而是通過強大的閉包實現。
BZOJ 2101 [Usaco2010 Dec]Treasure Chest 藏寶箱:區間dp 博弈【兩種表示方法】【壓維】
space print 而且 problem 所有 php 一條直線 題解 bzoj 題目鏈接:http://www.lydsy.com/JudgeOnline/problem.php?id=2101 題意: 共有n枚金幣,第i枚金幣的價值是w[i]。 把金幣排成一
java框架篇---spring aop兩種配置方式
system 操作類 asp xml文件 ack ica one pack exc 第一種:註解配置AOP 註解配置AOP(使用 AspectJ 類庫實現的),大致分為三步: 1. 使用註解@Aspect來定義一個切面,在切面中定義切入點(@Pointcut),通知類型(@
MySQL數據庫root賬戶密碼忘記兩種處理方法(保有效)
mysql mysq 密碼忘記 方法1:1.停止MySQL服務# kill `cat /var/run/mysqld/mysqld.pid`或者# pkill mysqld2.創建一個密碼賦值語句的文本文件# vi mysql-init ALTER USER ‘root‘@‘localhost‘
cron 定時任兩種配置方式
card 任務 init 1-1 rop java代碼 exp tor date 第一種:xml文件方式 <bean id="commonTimer" class="com.course.wx.timer.CommonTimer"></bean&
Struts2中validate數據校驗的兩種常用方法
red 有一種 資源文件 業務 相同 dna erp wrong 顯示 本文主要介紹Struts2中validate數據校驗的兩種方法及Struts2常用校驗器. 1.Action中的validate()方法 Struts2提供了一個Validateable接口,這個接口
Oozie與Coordinator調度講解及系統時區配置與定時觸發兩種配置方式
-- track eno star es2017 alt coo 之前 res 1:修改本地linux時區 查看時區 - 號代表西 + 號 代表東 北京時間是東八區 設置時區的配置文件所在位置 1 cd /usr/share/zoneinfo/