1. 程式人生 > >VisualVM遠端監控兩種配置方法介紹

VisualVM遠端監控兩種配置方法介紹

今天介紹一下Java程式遠端監控工具。Java從最開始推出,核心特點就是物件自動收集機制,讓程式設計師不需要像C++時代要進行配對物件書寫。

但是,時至今日,我們依然能夠看到很多Java程式執行一段時間之後,丟擲StackOverFlowOutOfMemory等錯誤資訊。這種時候,沒有經驗的開發人員只能盲目的面對所謂的“永不溢位”的JVM。應該說,在Java環境上進行記憶體管理和效能調優,更需要深厚的開發功底和知識體系。

Java虛擬機器JVM調優的工具很多,本篇介紹一下一個開源效能監控工具VisualVM的遠端配置功能。其中包括一些Linux版本JavaJBoss安裝過程,也都一併加入,供將來有需要的朋友待查。

1VisualVM簡介

VisualVM是一個以監控、顯示本地或者遠端伺服器JVM工作情況,進行效能調優的工具。藉助VisualVM,我們可以實現對JVM記憶體各個子池、CPU、垃圾收集器等方面進行監控,從而發現程式程式碼中潛在的洩露點和配置問題。

VisualVM是一個Java編寫的綠色軟體,屬於開源範疇,官方地址為:visualvm.java.netVisualVM是使用外掛Plugin的方式提供功能,預設提供了一些基本檢測功能。如果需要進行拓展,可以使用下載外掛的功能進行。

2Java Linux版安裝

首先說說Java Linux版的安裝過程。我們需要從Oracle官方網站上找到Java Linux

版本(區分32bit/64bit)。一般可以選擇rpm包安裝,上傳到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

,就可以實現安裝過程。過程自動化程度很高。之後,需要進行一些環境變數配置過程,主要是JAVA_HOMEPATHCLASS_PATH的設定。

[[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)

3JBoss安裝

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.shdomain.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)

4Jstatd 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監控方式下,SamplerMBeansJConsole是不能啟用的。

5JMX方式

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

下面,就可以增加JMX9988埠的連線。顯示如下介面進行監控。

使用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/