TOTO.net

Archive for August 9th, 2007

Part I: How to use JConsole

by tonny.xu on Aug.09, 2007, under Java Tech

JConsole是一个JDK中提供的JVM监视与管理的工具,主要是通过JMX来提供监视与管理。

默认情况下,JVM是不启动JMX服务,并提供被监视与被管理的能力的,必须在启动Java程序之前,在Java [opt] [app]中指定JMX的服务。JConsole提供本地和远程的两种监管方式,远程又可以分为直接监视,另外一种是通过JMX的服务器来管理。

根据目前我的需要,我举一个很简单的远程监管例子。因为JConsole本身也要耗费一定的资源,所以用远程方式是比较推荐的。

首先启动JConsole:

(因为在日文系统中,所以显示的为日文)

选择下面的Remote Access,输入host:portNumb的格式,另外输入用户名和密码,用户名和密码存储在<JAVA_HOME>/lib/management目录下,将jmxremote.password.template 复制为management.jmxremote.password(如果需要可以将文件的只读属性打开)。注意:这个文件是放在JRE的lib目录下。修改过以后的内容大致如下:

######################################
# File permissions of the jmxremote.password file
######################################
# …

monitorRole 333
controlRole 333

另外,默认情况下,SSL是被打开的,需要在被监视的机器上生成相应的SSL证书。在Java中可以使用keytool来生成,具体步骤如下:

  • 在命令行输入 keytool -genkey
  • 其次输入 keytool -certreq 来生成一个签名过的证书
  • 将证书导入 keytool -import
    1. KeyTool具体的用法参考下面两个链接: (Solaris and Linux) (Windows).
    2. 以上第一个命令会产生一个.keystore的文件,保存在c:\documents and setting\<username>\.keystore

其中第三条将需要你将第二步生成的CSR文件提交给VeriSign这样公司验证,然后返回给你一个可以使用CER证书,然后在Import,我们主要目的是为了体验JConsole,所以这一步我们就略过。所以我们设定不使用SSL,具体设置如下:

-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

注意:这两行将使用非认证,非SSL的情况,在真实的服务器上要小心,很容易留下漏洞的。

在Windows系统下,如果你将Tomcat安装为服务模式,则可以在右下角Tray 图标中点击配置Tomcat,可以在例如下图的属性中配置,非常的简单:

如果不使用Windows系统,则需要在Catalina.bat中改写Java运行的参数。

改完了Tomcat的配置,启动Tomcat。

在远程机器上点击JConsole的连接即可。JConsole的具体使用以及分析下次继续。

——————————————————-
JMX 的配置主要在Java程序启动的时候使用,这里重新整理了一下,更加清晰易懂一些:

方法1: 最简单的方式:不用密码,不用SSL

-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=<define a random port>

方法2: 使用密码,不用SSL

-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access

$CATALINA_BASE/conf/目录下添加jmxremote.password文件,并添加下面两行:

monitorRole <Your password>
controlRole <Your password>

$CATALINA_BASE/conf/目录下添加jmxremote.access文件,并添加下面两行:

monitorRole readOnly
controlRole readWrite

这两种方法是最简单的,并且第二种方法具有一定的安全性。具体可以参考Tomcat的文档:Monitoring

80 Comments more...

Java的性能调校

by tonny.xu on Aug.09, 2007, under Blog System

以前做Java的项目,基本上不会遇到对性能进行调校的事情,但是最近遇到了一个比较严重的问题。具体情况不便详细说,但是大致情况如下:

  • Server: Intel Xeon Duo 2 *2
  • Memory: 4G
  • Disk: 3500G
  • JDK: 1.5.0_02
  • Web Server: Tomcat 5.5.19
  • Application: Some kind of OpenSource Project A which contains about 27M’s package.

在Tomcat中配置了虚拟主机,运行了4份A的独立版本。运行起来以后,内存占用3G左右,在安装第5份的时候出现OutOfMemory的异常,由此引发了JVM性能调校的课题。

首先找到了一片比较浅显的文档:

其中提到了性能调校的几个要点:

  • 在所有对JVM的调校进行之前,先做以下的检查:
    1. 是否使用了最新的Java Release?
    2. Java是否更新到了最新的update?
    3. OS的补丁是否已经更新到最新?
    4. OS中是否还跑着其他许多不需要的应用程序?
  • 其次对JVM进行以下的调校:
    1. 是否使用了Server HotSpot?
    2. 有没有使用并行GC?(ParallelGC)
    3. 初始化堆内存(heap size)大小是多少?推荐使用物理内存的1/64
    4. 最大堆内存(heap size)是多少?推荐使用物理内存的1/4
  • 调校之前一定要准确的收集系统的运行情况数据并进行分析
    1. 可以参考使用JVM的管理与监视相关文档

在这样的指导下。我准备对我的系统做以下的操作步骤:

  • 使用JConsole观察Tomcat中JVM的使用情况,并进行分析
  • 使用jvmstat观察并进行分析
  • 在Tomcat的运行参数中添加 -Xprof 参数,进行Profiling

在Java tuning white paper中直接提到了一些GC调整的方式,在使用了ParallelGC以后,系统的运行确实能提高不少,但是具体的仍然有问题,等我的Monitoring和Profiling结束以后再报告。

154 Comments more...

Restart my blogging

by tonny.xu on Aug.09, 2007, under Blog System

Keeping going Tonny!

From Nov 2006 till now, I didn’t write a single post, and now, I gonna restart my blogging life.

and I will stick to blogging until I feel tired again.

65 Comments more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!