监控服务器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 的内存划分与多线程是息息相关的.像我们程序中运 ...
随机推荐
- GWT工程架构分析与理解
上一篇文章中介绍了GWT技术的一些理论性的东西,涉及到GWT得一些技术原理及实现.接下来笔者将通过创建一个GWT工程去理解分析GWT工程架构. GWT工程架构解析 笔者使用的是Eclipse插 ...
- RPG JS:免费开源的跨平台RPG游戏引擎
RPG JS是一个2D RPG游戏制作引擎,目前版本基于Ease|JS游戏引擎,基于Canvas Engine的新版本即将发布. RPG JS是免费且开源的. RPG JS有着完善的文档支持. RPG ...
- CCF 201403-3 命令行选项 (STL模拟)
问题描述 请你写一个命令行分析程序,用以分析给定的命 令行里包含哪些选项.每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔.这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序 ...
- iOS版本检测与版本升级
14年苹果官方要求所有的APP不能出现 “当前版本”字样,是因为从iOS8系统开始,你可以在设置里面设置在WiFi情况下,自动更新安装的APP.此功能大大方便了用户,但是一些用户没有开 启此项功能,因 ...
- 使用struts2实现文件上传
action中 private File file;//文件 private String fileFileName;//文件名字 固定格式name+FileName private String f ...
- 数据库连接池 c3p0 demo 代码和分析
import java.sql.Connection; import java.sql.SQLException; import java.beans.PropertyVetoException; i ...
- ASP.NET MVC- KindEditor的使用
我用过几个EDITOR,还是比较喜欢KINDEDITOR.这个工作可能最近要用到了,周末在家花时间了解了一下.做了一下备注在这里,以备日后方便查阅. 1.首先去KINDEDITOR的官网下载最新的版本 ...
- javascript js 内存泄露工具使用
javascript内存泄露工具使用 原文:http://lanhy2000.blog.163.com/blog/static/43678608201121472644851/ 2011-03-14 ...
- 30.怎样在Swift中添加运行时属性?
和OC一样,Swift中也可以添加运行时属性.下面将提供一个完整的例子,演示如何给按钮点击事件添加运行时属性. 1.示例 import UIKit var s_GofButtonTouchDownKe ...
- 使用generator自动生成Mybatis映射配置文件
在使用mybatis时,映射文件的配置非常麻烦,对于做逻辑不是很复杂,功能不是特别关键的模块的时候,我们没有必要手动书写,可以使用generator工具生成. generator工具实际上就是根据数据 ...