通过jconsole监控tomcat JVM 内存、线程、CPU

 

从Java 5开始 引入了 JConsole,来监控 Java 应用程序性能和跟踪 Java 中的代码。jconsole是JDK自带监控工具,只需要找到 JDK 安装路径,打开 bin 文件夹,双击 jconsole即可。

0、监控前的准备

将代码写入tomcat/bin/catalina.sh

CATALINA_OPTS=-Djava.awt.headless=true

JAVA_OPTS=”-Djava.rmi.server.hostname=192.168.0.1 $JAVA_OPTS -Dprogram.name=$PROGNAME -Dcom.sun.management.jmxremote.port=8533 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false”

1、建立新连接

这里只谈远程监控Linux tomcat ,根据用法输入:

192.168.0.1:8533

点击“连接”进入控制台

JDK1.6/7/8下 jconsole 详细使用手册

JConsole的图形用户界面是一个符合Java管理扩展(JMX)规范的监测工具。 JConsole使用Java虚拟机(Java VM),提供在Java平台上运行的应用程序的性能和资源消耗的信息。

在Java平台,标准版(Java SE平台)6,JConsole的已经更新到目前的外观和感觉的Windows和GNOME桌面(其他平台,将目前标准的Java图形的外观和感觉)。 在这个文件中提出的屏幕截图是从Windows XP上运行的接口的一个实例。

启动JConsole

JConsole是可执行文件, 在JDK_HOME/bin目录中其中JDK_HOME是在Java开发工具包(JDK)的安装目录。 如果此目录是在您的系统路径,你可以开始只需键入命令jconsole。 否则,您必须键入可执行文件的完整路径。

命令语法

您可以使用JConsole来监视本地应用程序以及远程应用程序。

注:使用JConsole监视本地应用程序在开发和创建原型是非常有用的,但不推荐用于生产环境,因为jconsole本身也消耗大量的系统资源。 远程监控建议隔离被监视机器。

jconsole命令的语法完整的参考,请参阅 JConsole的命令手册页:Java监视和管理控制台。

设置本地监控

在命令行中键入以下命令启动JConsole的。

JConsole

当JConsole的启动时,您将获得一个本地运行JConsole的可以连接到的所有的Java应用程序的选择。

如果您要监控的特定应用程序,你知道该应用程序的进程ID,那么你也可以启动JConsole连接到该应用程序。 此应用程序必须和JConsole运行在相同的用户ID下。 该命令的语法以下。

%JConsole中 processID

以上的processID是应用程序的进程ID(PID)。 您可以用以下方式确定一个应用程序的PID:

  • 在UNIX或Linux系统,可以使用ps命令找到正在运行的Java实例的PID 。
  • 在Windows系统上,您可以使用任务管理器,找到 java 或者 javaw进程的PID。
  • 您还可以使用jps命令行实用程序来确定的PID。 见的手册页的Java虚拟机进程状态工具。

例如,如果你确定, 记事本应用程序的进程ID是2956,那么你可以用下面的命令启动JConsole。

JConsole 2956

jconsole和被监视的应用程序必须运行在相同的用户下, 拥有管理和监控系统使用的操作系统的文件权限。 如果你不指定一个进程ID,jconsole会自动检测所有本地Java应用程序,并显示一个对话框,让你选择一个(参阅连接到 JMX代理)。

欲了解更多信息,请参阅本地监控和管理 。

 

设置远程监控

要启动远程监控JConsole的,您可以使用下面的命令语法。

JConsole 主机名 portNum

主机名是需要监听的主机,portNum是你启动Java虚拟机时指定的JMX代理的端口号。 欲了解更多信息,请参阅远程监控和管理 。

如果你不指定一个主机名/端口号的组合,那么jconsole会显示一个连接对话框( 连接到JMX代理 ),让你输入一个主机名和端口号。

 

建立安全的远程监控

您也可以使用安全套接字层(SSL)进行安全的连接。 命令启动JConsole的安全连接是在第2章,监控和管理使用JMX技术 启用SSL JConsole的远程监控 。

连接到一个JMX代理

如果您启动jconsole的时候指定的JMX代理连接到的参数,它会自动开始监视指定的Java VM。 您可以连接到不同的主机在任何时候通过选择连接|新连接,并输入必要的信息。

否则,如果你不提供任何参数,当您启动JConsole的,第一眼看到的是连接对话框。 此对话框有两个选项,允许连接到本地或远​​程进程。

动态连接

在以前的版本的Java SE平台,应用程序,你想监测与JConsole的需要与下面的选项开始。

%,Dcom.sun.management.jmxremote

然而,与Java SE 6平台提供的JConsole的版本,可以连接到任何应用程序,支持附加的API。 换句话说,任何在Java SE 6 HotSpot虚拟机启动的应用程序由JConsole自动检测,并不需要使用上述的命令行选项开始。

JConsole的连接到一个本地进程

如果你不提供连接到一个特定的JMX代理启动JConsole的,你会看到下面的对话框窗口。

图3-1创建一个连接到一个本地进程

 本地进程选项列出所有运行在本地系统上且和JConsole程序相同的用户ID的Java SE6 应用,包括进程ID和他们的类或参数信息。选择您要监视的应用程序,然后单击“连接”按钮。 本地进程的名单中包括以下类型的Java虚拟机的运行的应用程序。

  • 启用管理代理的应用,包括Java SE 6平台或指定或sun.management.jmxremote.port选项开始的J2SE 5.0平台上的应用。 此外,名单中还包括任何应用程序,Java SE 6平台上开始没有任何管理属性,但以后JConsole的重视,这使得在运行时管理代理。
  • 禁用管理代理,可连接的应用,应用程序在运行时禁用加载管理代。Java SE 6平台上开始支持附加的API的应用程序, 支持动态的应用程序连接,启动管理代理可以不通过在命令行中指定的sun.management.jmxremote 或com.sun.management.jmxremote.port选项。 如果选择此类应用程序连,将启用该应用的管理代理。 在连接的例子所示的对话框图 3-1中,NetBeans IDE和jconsole本身也均开始在Java SE 6平台的虚拟机。 同时出现在正常的文本,这意味着,JConsole的可以连接到它们。 在图3-1中,JConsole是选定的,值得注意的是可见的。
  • 禁用应用程序,不扣押,管理代理。这些措施包括开始的J2SE 1.4.2平台上的应用,或J2SE 5.0平台上开始没有sun.management.jmxremote 或com.sun.management.jmxremote.port选项​​。 这些应用程序的显示表中显示为灰色和JConsole中无法连接到他们。 字谜应用程序在连接的例子所示的对话框图 3-1,没有任何的管理属性与J2SE 5.0平台的虚拟机开始启用JMX代理,并因此显示为灰色,无法选择。

阅读更多