使用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的状态,有的话可以直接通过线程找到是否有对应的这个状态,这样就可以查出具体是什么线程存在泄露的情况。

监控服务器JVM内存运行的更多相关文章

  1. JVM内存结构,运行机制

    三月十号,白天出去有事情出去了一天,晚上刚到食堂就接到阿里电话, 紧张到不行,很多基础的问题都不知道从哪里说了orz: 其中关于JVM内存结构,运行机制,自己笔记里面有总结的,可当天还是一下子说不出来 ...

  2. [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义

    前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine  ,既然是虚拟机, ...

  3. JVM探秘1--JVM内存运行时区域划分

    Java程序员一般不需要太关注内存,因为操作内存的权力都交给了Java虚拟机,但是Java程序员必须需要了解JVM是如何使用内存的,否则一旦内存出现泄漏或事溢出的话,就会一筹莫展不知道从哪去入手排查问 ...

  4. JVM 内存区域 (运行时数据区域)

    JVM 内存区域 (运行时数据区域) 链接:https://www.jianshu.com/p/ec479baf4d06 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内 ...

  5. JVM内存区域(运行时数据区)划分

    前言: 我们每天都在编写Java代码,编译,执行.很多人已经知道Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文 ...

  6. 深入理解java:1.3.1 JVM内存区域的划分(运行时数据区)

    学习Java GC机制,可以帮助我们在日常工作中 排查各种内存溢出或泄露问题,解决性能瓶颈,达到更高的并发量,写出更高效的程序. 我们将从4个方面学习Java GC机制, 1,内存是如何分配的: 2, ...

  7. JVM笔记-运行时内存区域划分

    1. 概述 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分为若干个不同的数据区域.它们各有用途,有些随着虚拟机进程的启动一直存在(堆.方法区),有些则随着用户线程的启动和结束而建立 ...

  8. JVM性能调优(1) —— JVM内存模型和类加载运行机制

    一.JVM内存模型 运行一个 Java 应用程序,必须要先安装 JDK 或者 JRE 包.因为 Java 应用在编译后会变成字节码,通过字节码运行在 JVM 中,而 JVM 是 JRE 的核心组成部分 ...

  9. JVM内存布局(又叫Java运行时数据区)

    JVM 堆中的数据是共享的,是占用内存最大的一块区域. 可以执行字节码的模块叫作执行引擎. 执行引擎在线程切换时怎么恢复?依靠的就是程序计数器. JVM 的内存划分与多线程是息息相关的.像我们程序中运 ...

随机推荐

  1. PostQueuedCompletionStatus

    PostQueuedCompletionStatus函数,向每个工作者线程都发送—个特殊的完成数据包.该函数会指示每个线程都“立即结束并退出”.下面是PostQueuedCompletionStatu ...

  2. iOS Ping++前端集成支付

    直接上代码 /* 获取订单charge 1.buyerId  买家ID 2.sellerId  卖家ID 3.liveId    直播间ID 4.goodCount 商品数量 5.status    ...

  3. ADT下开发环境的配置--个人配置啦 Eclipse Color Themes

    一. Eclipse Color Themes的安装 首先 这个ADT没有Marketplace Client 需要装一个, 节选自: http://blog.csdn.net/liu37226700 ...

  4. OSG+MFC对话框程序

    OSG的sample里面有OSG+MFC+MDI的例子. 网上有说OSG+MFCSDI的例子,如http://blog.csdn.net/xuguangsoft/article/details/816 ...

  5. 在WPF程序中使用摄像头兼谈如何使用AForge.NET控件(转)

    前言: AForge.NET 是用C#写的一个关于计算机视觉和人工智能领域的框架,它包括图像处理.神经网络.遗传算法和机器学习等.在C#程序中使用摄像头,我习惯性使用AForge.NET提供的类库.本 ...

  6. Oracle-11g-R2 RAC 环境下 GPnP Profile 文件

    GPnP Profile 文件的作用: GPnP Profile 文件是一个保存于 $GRID_HOME/gpnp/<hostname>/profiles/peer 目录下的小型 XML ...

  7. 利用Notepad++插件(JSToolNpp):让JS代码格式化对齐

    http://www.ycyjkj.com/post-663.html 程序员或者正在学习的同学一般都会遇到一个问题,看别人的源码,只是一行,没有分开,让人看的很别扭,也可能是作者故意这样做的,也可以 ...

  8. JS获取URL参数 方法

    function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = qu ...

  9. IOS 手机助手及越狱助手推荐

    快装系列 1 快装助手(PC版) http://pc.kuaiapp.cn/ 2 快装越狱助手(PC版)http://www.kuaiapp.cn 3 快装商店(手机版)http://yueyu.ku ...

  10. UVALive 4222 Dance 模拟题

    Dance 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...