使用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连接数 本文章已收录于: 计算机网络知识库 分类: ...
随机推荐
- ArcGIS案例学习笔记2_2_等高线生成DEM和三维景观动画
ArcGIS案例学习笔记2_2_等高线生成DEM和三维景观动画 计划时间:第二天下午 教程:Pdf/405 数据:ch9/ex3 方法: 1. 创建DEM SA工具箱/插值分析/地形转栅格 2. 生成 ...
- (转)C#如何加载程序运行目录外的程序集
https://www.cnblogs.com/guanglin/p/3200989.html 我们的应用程序部署的时候,目录结构一般不会只有运行程序的目录这一个,我们可能在运行目录下建子目录,也可能 ...
- unity 三种注入示例
/* * 演示Unity 注入 * */ using Microsoft.Practices.Unity; using System; namespace Unity.Property.Inject ...
- monkeyrunner学习笔记
前面部分内容转自http://blog.csdn.net/zm2714/article/details/7980634 Android自动化测试之Monkeyrunner使用方法及实例 目前andro ...
- python脚本
python源码编译 python -O -m py_compile file.py [root@localhost python]# cat dbass.py #!/usr/local/bin/py ...
- SPSS-方差分析
方差分析(单因素方差分析.多因素方差分析.协方差分析) 基本概念:进行两组以上均数的比较,检验两个或两个以上样本均数差别的显著性(T检验主要是检验两个样本均数差别的显著性) ...
- grabcut 分割 Rect
#include "opencv2/opencv.hpp" using namespace cv; void main() { Mat src = imread("E:\ ...
- java.lang.IllegalAccessError: tried to access method
java.lang.IllegalAccessException: access to method denied 06-23 16:12:39.128 1253-1253/com.hbjyjt.oa ...
- 第三篇:jmeter的作用域和执行顺序
1.元件的作用域: 8类可执行的元件,testplan和threadgroup不属于可执行的元件:这些元件中,取样器,是典型的不与其他元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其他 ...
- 获取cookie
1.cookie是存储在用户本地终端的数据,实际上是一小段的文本信息 2.cookie的作用 帮助web站点保存有关的访问者的信息,方便用户的访问,如记住用户名和密码,实现自动登录功能案例:查看访问我 ...