监控服务器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的状态,有的话可以直接通过线程找到是否有对应的这个状态,这样就可以查出具体是什么线程存在泄露的情况。
监控服务器JVM内存运行的更多相关文章
- JVM内存结构,运行机制
三月十号,白天出去有事情出去了一天,晚上刚到食堂就接到阿里电话, 紧张到不行,很多基础的问题都不知道从哪里说了orz: 其中关于JVM内存结构,运行机制,自己笔记里面有总结的,可当天还是一下子说不出来 ...
- [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义
前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine ,既然是虚拟机, ...
- JVM探秘1--JVM内存运行时区域划分
Java程序员一般不需要太关注内存,因为操作内存的权力都交给了Java虚拟机,但是Java程序员必须需要了解JVM是如何使用内存的,否则一旦内存出现泄漏或事溢出的话,就会一筹莫展不知道从哪去入手排查问 ...
- JVM 内存区域 (运行时数据区域)
JVM 内存区域 (运行时数据区域) 链接:https://www.jianshu.com/p/ec479baf4d06 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内 ...
- JVM内存区域(运行时数据区)划分
前言: 我们每天都在编写Java代码,编译,执行.很多人已经知道Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文 ...
- 深入理解java:1.3.1 JVM内存区域的划分(运行时数据区)
学习Java GC机制,可以帮助我们在日常工作中 排查各种内存溢出或泄露问题,解决性能瓶颈,达到更高的并发量,写出更高效的程序. 我们将从4个方面学习Java GC机制, 1,内存是如何分配的: 2, ...
- JVM笔记-运行时内存区域划分
1. 概述 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分为若干个不同的数据区域.它们各有用途,有些随着虚拟机进程的启动一直存在(堆.方法区),有些则随着用户线程的启动和结束而建立 ...
- JVM性能调优(1) —— JVM内存模型和类加载运行机制
一.JVM内存模型 运行一个 Java 应用程序,必须要先安装 JDK 或者 JRE 包.因为 Java 应用在编译后会变成字节码,通过字节码运行在 JVM 中,而 JVM 是 JRE 的核心组成部分 ...
- JVM内存布局(又叫Java运行时数据区)
JVM 堆中的数据是共享的,是占用内存最大的一块区域. 可以执行字节码的模块叫作执行引擎. 执行引擎在线程切换时怎么恢复?依靠的就是程序计数器. JVM 的内存划分与多线程是息息相关的.像我们程序中运 ...
随机推荐
- ManagementFactory (二) getMemoryMXBean
MemoryMXBean package cn.zno.outofmomery; import java.lang.management.ManagementFactory; import java. ...
- MAT(1) 小样
一.内存溢出时生成hprof文件 运行参数: -Xms40m -Xmx40m -Xmn20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:\J ...
- 【转】删除已经存在的 TFS Workspace
删除已经存在的 TFS Workspace 分类: TFS2010-03-03 16:59 1239人阅读 评论(2) 收藏 举报 serverpathcommandcachefilegoogle 工 ...
- [转]Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
Android事件分发机制 该篇文章出处:http://blog.csdn.net/guolin_blog/article/details/9097463 其实我一直准备写一篇关于Android事件分 ...
- 使用spring.net 1.3.2框架部署在虚拟目录上发生错误
如果你的网站使用了Spring.net 1.3.2,并部署在IIS的虚拟目录上,那么将会出现如下错误: The virtual path '/currentcontext.dummy' maps ...
- 解决 Cocos2d-x 中 Android.mk 手动添加源文件
转自:http://blog.csdn.net/ypfsoul/article/details/8909178 Makefile Android.mk 引发的思索 在我们编写 Android 平台 c ...
- 【腾讯内部干货分享】分析Dalvik字节码进行减包优化
http://wetest.qq.com/lab/view/?id=96?from=ads_test2_qqtips&sessionUserType=BFT.PARAMS.192184.TAS ...
- :app:transformResourcesWithMergeJavaResForDebug FAILED
资源xml有错误,应该排查每一处xml. 如果提示gradle相关错误,需要修改系统级的build.gradle和程序级的build.gradle,比如后者不能缺少:dependencies { ...
- WinSock异步IO模型之Select
如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的. Windows操作系统提供了五种I/O模型,分别是: ■ 选择(select): ■ 异步选择(WSAAsyncSelec ...
- linux下mysql开启慢查询
mysql中最影响速度的就是那些查询很慢的语句.这些慢的语句,可能是写的不够合理或者是大数据下多表的联合查询等等.所以我们要找出这些语句,分析原因,加以优化. 1.方法1:用命令开启慢查询 1).查看 ...