监控服务器JVM内存运行

使用jdk的jconsole进行监控jmx

首先,设置监控对象的端口   配置 catalina.sh

  #vi /usr/tomcat/bin/catalina.sh

      注: /usr/tomcat/bin/catalina.sh 是 tomcat所在目录的bin目录  (linux环境下)

在 # OS specific support.  $var _must_ be set to either true or false.之前添加内容

 

# JAVA_OPTS 设置内存

JAVA_OPTS="-Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:NewSize=512m -XX:MaxPermSize=256m"

 

# CATALINA_OPTS 设置 jmx端口信息

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote  -Dcom.sun.management.jmxremote.port=9004"

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

 

然后,启动对应的tomcat,查看端口运行

  [root@css ~]# netstat -antp | grep 9004
  tcp 0 0 :::9004 :::* LISTEN 2288/java

最后,确认本地jdk已安装,没有安装的自行安装

  打开cmd,运行进入目录:C:\Program Files\Java\jdk1.6.0_43\bin

    C:\Users\shuaiqi>cd /d C:\Program Files\Java\jdk1.6.0_43\bin

  执行jconsole.exe文件

    C:\Program Files\Java\jdk1.6.0_43\bin>jconsole.exe

  此时就已经打开了,链接jmx的方式

  可以选择本地进程和远程进程,这里选择远程进程

  输入远程地址:<hostname>:<port> 点击链接按钮即可链接

  注:不需要输入用户和口令,因为上述设置中没有要求用户和口令,如有需要可以设置一下

 

jvm 内存持续增长

  原因:内存池“par survivor space” 与 内存池“cms old gen” 持续交换内存,导致原因是 因为内存池“par eden space”不够大导致交换区内存持续饱满状态
  解决:修改tomcat_home/bin/catalina.sh 调整内存比例 4:1 实际到内存中即3:1
  # JAVA_OPTS
  JAVA_OPTS="-Xms4g -Xmx4g -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:NewSize=1024m -XX:MaxPermSize=256m"

 

监控详解

在启动的界面中:
1.概述:有关堆内存使用情况,线程,类加载和CPU使用情况的综述;
2.内存:内存的详细情况,堆和其他内存;
3.线程:峰值/活动线程,另外,各个线程的明细信息,检测死锁;
4.类:监控加载和卸载的类,这个需要结合其他的工具进行分析;
5.MBean:当前Java程序的MBean(如果有的话)的操作;
6.VM摘要:有关JVM的明细信息;

从概要中我们可以直观的了解系统运行的总时间、线程数、内存与垃圾回收信息、装载类及操作系统内存的信息。
其中内存的信息对应我们配置的-Xms256m -Xmx512m
垃圾收集器对应我们配置的垃圾回收方式,每种方式的名称会有所不同,当我们没有配置垃圾回收方式时一般为UseParallelGC这种方式
(1)-XX:+UseConcMarkSweepGC 并行的CMS垃圾回收方式
GC名: ParNew
ConcurrentMarkSweep
内存池名: CMS Perm Gen Par Eden Space Par Survivor Space Code Cache CMS Old Gen
(2)-XX:+UseParallelGC 并行垃圾回收
GC名: PS Scavenge PS MarkSweep
内存池名: PS Survivor Space PS Perm Gen PS Old Gen PS Eden Space Code Cache
(3)-XX:+UseParallelOldGC 并行垃圾回收
GC名: PS Scavenge PS MarkSweep
内存池名: PS Survivor Space PS Perm Gen PS Old Gen PS Eden Space Code Cache
(4)-XX:+UseSerialGC 串行垃圾回收
GC名: Copy MarkSweepCompact
内存池名: Survivor Space Perm Gen Tenured Gen Eden Space Code Cache

 

右下方蓝色显示条

年轻代:PS Eden Space和PS Survivor Space
对应配置参数:-Xmn256M -XX:MaxNewSize=256M -XX:SurvivorRatio=2 -XX:MaxTenuringThreshold=5等
老年代:PS Old Gen 其值是:Old = Heap - Young={Eden,from,to}
对应配置参数包括:-Xms512m -Xmx1024m和年轻代的配置参数,from,to的值取决于SurvivorRatio这个参数的设置
持久代:PS Perm Gen
对应的配置参数:-XX:PermSize=256M -XX:MaxPermSize=512m
注:在观察内存的使用情况时首先保证相关的线条不是持续增长的,需要有 对应SO、S1区,Eden,old以及Perm和cache
回收的动作出现,并且可以估计其回收的内存大小,如果回收始终没有增长的多,特别是内存增长很多的情况,这时系统很可能存在内存泄露。这时我们可能需要通过其他的更详细的工具对系统的类及内存进行分析,如JMap等。

 

 

监控线程

通过线程的监控可以查看系统中所有的线程数,同时可以点击单个的线程查看具体的线程运行情况,如: 可以结合windows命令netstat –na查看是否有CLOSE_WAIT的状态,有的话可以直接通过线程找到是否有对应的这个状态,这样就可以查出具体是什么线程存在泄露的情况。

 

 

posted @ 2014-10-15 11:34  患.者  阅读(1108)  评论(0编辑  收藏  举报