使用Visual VM 查看linux中tomcat运行时JVM内存
前言:在生产环境中经常发生服务器内存溢出,假死或者线程死锁等异常,导致服务不可用。我们经常使用的解决方法是通过分析错误日记,然后去寻找代码到底哪里出现了问题,这样的方式也许会奏效,但是排查起来耗费时间比较多,或者说本身代码本身就没有错,而是访问量大时候消耗内存太多,垃圾对象没有及时回收等等其他情况导致的,这样排查异常起来异常困难,那么有没有一些可视化的工具,帮助我们可以详细地查看当前应用服务的内存情况,从而为我们在解决异常、优化代码、优化服务等方面提供一些建议呢?幸好,jdk为我们免费提供一个这样的可视化工具,VisualVM,当然市场上还有一些商业或免费的其他类似工具,如JProfiler、JConsole等。下面我就介绍介绍,如何在window环境下,使用Visual VM连接Linux环境上的部署在tomcat上的web应用。
1、环境准备和说明
win7
jdk1.6.0_31
tomcat6
linux centos
本地的VisualVM要连接远程的JVM,需要进行相关的配置,VisualVM主要是通过JMX和jstatd两种方式进行远程连接的。
JMX连接可以查看系统信息,CPU使用情况,线程多少时间轴,手动执行垃圾回收等比较偏于系统级层面的信息。
jstatd连接方式可以提供JVM内存分布详细信息,垃圾回收分布图、线程详细信息,甚至可以看到某个对象使用内存的大小。
因此想查看远程的JVM的具体信息,最好两种方式都进行配置连接。
2、JMX连接的配置
在tomcat的bin/startup.sh中的末尾加入如下配置,这样该tomcat下 的web应用都可以通过VisualVM的JMX方式连接
export CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote=true
-Djava.rmi.server.hostname=19.129.251.16
-Dcom.sun.management.jmxremote.port=8099
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
- 1
- 2
- 3
- 4
- 5
- 6
hostname:tomcat所在的Linux服务器的地址
port:暴露的访问端口,不能和其他端口重复
添加后的效果图:
配置完毕后启动tomcat,看能不能访问上面配置的地址10.5.227.81:8999
使用telnet成功,说明地址是可以访问的,如果不能,则需要排查网络环境
a、远程Linux服务器的地址10.5.227.81和你的机器的联通性,使用ping命令看通不通
b、查看防火墙的是否限制了该端口的访问
如果上述步骤没有出现问题,那么你已经接近成功一大半
接下来在本地机器上打开jdk/bin/jvisualvm.exe,如图是visual VM的开始页面
新建一个远程连接,”远程”右键–>”添加远程主机”,输入上述配置的服务器地址,Djava.rmi.server.hostname=10.5.227.81
选择添加的主机,右键–>”添加JMX连接”,输入上面配置的端口8999,-Dcom.sun.management.jmxremote.port=8999
JMX连接成功后,你已经可以查看JVM的参数,如堆栈大小等JVM相关参数,查看服务器cpu消耗情况,手动执行垃圾回收、导出堆dump镜像,查看类、线程的总数和分布情况等权限
3、jstatd连接的配置
如果想看看jvm的内存各个分区的使用情况,哪些线程,变量使用内存的详细情况,还需要建立jstatd连接。在tomcat下(或者某个路径下,下面用到时指定绝对路径就行)新建文件jstatd.java.policy,该文件主要是用于授予VisualVM远程连接的权限,里面内容如下
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
- 1
- 2
- 3
创建jstatd.java.policy 后的效果图如下:
在Linux服务窗口执行下面命令
[root@qgserver ~]# jstatd -J-Djava.rmi.server.hostname=10.5.227.81 -J-Djava.security.policy=/data/tomcat6-fssmyx/jstatd.java.policy
- 1
10.5.227.81是Linux服务器的ip地址,同上面。
jstatd.java.policy就是上面建立的文件,注意要指定绝对路径,我的是放在/data/tomcat6-fssmyx/,根据实际情况配置。
执行成功后,Visual VM中自动建立的jstatd连接,可以看到这台机上所有的tomcat,找到自己需要查看的tomcat web服务
打开VIsual GC选项卡可以看到tomcat的内存使用分布图,永久区、老年代、新生代的使用情况、垃圾回收的信息。要使用更多工具查看JVM,可以通过 ‘工具’-> ‘插件’安装更多工具
到此,使用本地的VisualVM查看远程的JVM已经完毕,谢谢大家的查看!!
使用Visual VM 查看linux中tomcat运行时JVM内存的更多相关文章
- Linux下tomcat运行时jvm内存分配
tomcat运行时jvm内存分配 ⑴开发环境下在myeclipse中配置-Xms256m -Xmx512m -XX:NewSize=64m -XX:MaxNewSize=128m -XX:PermSi ...
- 如何修改Tomcat运行时jvm编码
问题: 最近在部署项目的时候出现数据乱码的情况,经过一番查看项目都是用的UTF-8编码格式,数据也是,但是经过调用接口传给对方就乱码了. 由于是部署在Windows环境下,Windows默认编码GBK ...
- tomcat运行时JVM参数调整
进入tomcat/bin目录 catalina.bat 中加入set JAVA_OPTS=-Xms210m -Xmx256m -Xmn70m -XX:PermSize=150m -XX:MaxPerm ...
- 如何在Linux中tomcat下运行一个web项目
如何在Linux中tomcat下运行一个web项目 然后启动Tomcat项目.运行的运行后会自动将war包解压. 如果页面报404,那么请查看tomcat日志文件,它一定是报错了....
- linux中tomcat内存溢出解决办法
用命令 tail -f /root/apache-tomcat-6.0.20/logs/catalina.out(需要找到tomcat路径) 查看日志,查看是否有错误 linux中tomcat内存溢出 ...
- linux中tomcat内存溢出
刚开始测试服务器与线上后台都不能上传10分钟以上的视频,后来只要是视频就不能上传,进入服务器查日志得到如下错误: Caused by: java.lang.OutOfMemoryError: Java ...
- Linux中Tomcat 自动设置CATALINA_HOME方法
Linux中Tomcat 自动设置CATALINA_HOME方法 在服务器部署中,我们经常会出现“在一个服务器上运行多个tomcat服务”的情况. 使用如下方法设置,可以无限复制平移扩展Tomcat, ...
- 查看linux中某个端口(port)是否被占用(netstat,lsof)
查看linux中某个端口(port)是否被占用(netstat,lsof) netstat命令可以显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组等信息.命令格式:netstat [ ...
- 查看linux中的TCP连接数【转】
转自:http://blog.csdn.net/he_jian1/article/details/40787269 查看linux中的TCP连接数 本文章已收录于: 计算机网络知识库 分类: ...
随机推荐
- C# 图像处理:将图像(24位真彩)转为 8位灰度图像 采用了内存法,大大提高了效率
/// <summary> /// 将源图像灰度化,并转化为8位灰度图像. /// </summary> /// <param name="original&q ...
- 【转】Unity网格合并_材质合并
原帖请戳:Unity网格合并_材质合并 写在前面: 从优化角度,Mesh需要合并. 从换装的角度(这里指的是换形状.换组成部件的换装,而不是挂点型的换装),都需要网格合并.材质合并.如果是人物的换装, ...
- shiro 权限 URL 配置细节
- 三种方式解决你的js加载乱码
第一种方式——编码统一 我们以前觉得出现乱码的原因是因为编码不统一,就是因为我们设置编码统一之后,就解决了问题,所以,让html和js的编码统一,是最简单的一个乱码解决方式,原因是什么,是因为,如果你 ...
- 2.1、CDH 搭建Hadoop在安装(为Cloudera Manager配置存储库)
步骤1:为Cloudera Manager配置存储库 使用包管理工具安装Cloudera Manager yum 对于RHEL兼容系统, zypper对于SLES,和 apt-get对于Ubuntu. ...
- cakePHP模型内置回调函数afterFind()的使用。
在用find获取数据后,我们要对所获取到的数据做一些处理,这时,直接在模型层覆盖cakephp内置的回调函数,使用find时会自动调用. 其中$baomings 就是find 到的 $this-> ...
- 使用Jmeter(三十)针对ActiveMQ JMS POINT TO POINT压力测试(转载)
转载自 http://www.cnblogs.com/yangxia-test 准备工作 针对JMS类型的Sampler,需要额外的jar包(这里用的是apache ActiveMQ,将下载的AMQ ...
- leetcode题库解答源码(python3)
下面和大家分享本人在leetcode上已经ace的题目源码(python3): 本人会持续更新!- class Leetcode_Solution(object): def twoSum_1(self ...
- 2018蓝桥杯 全球变暖(dfs)
你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示:........##.....##........##...####....###.. ...
- TOJ3112: 单词串串烧(回溯)
传送门(<--可以点击的) 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 描述 “单词串串烧”是一款拼词智力游戏,给定4*4的方格,随机取16个 ...