如何使用JDK自带jvisualvm监控tomcat工具

xjsunjie 的BLOG
用户名:xjsunjie
文章数:971
评论数:2161
访问量:2316478
注册日期:
阅读量:5863
阅读量:12276
阅读量:294132
阅读量:1016073
51CTO推荐博文
& jconsole是JDK里自带的一个工具,可以监测Java程序运行时所有对象的申请、释放等动作,将内存管理的所有信息进行统计、分析、可视化。我们可以根据这些信息判断程序是否有内存泄漏问题。 & 使用jconsole工具来分析WAS的JVM问题,需要进行相关的配置。 & 首先我们看WAS服务器端的配置.1、登录was控制台https://10.4.119.18:9043/ibm/console/,找到自己的应用程序服务器---java和进程管理---进程定义--JAVA虚拟机,然后配置 通用JVM 参数 :加入以下jvm参数:-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote注意:等号后面一定要保留空格,否则会报错。2、修改/usr/IBM/WebSphere/AppServer/java/jre/lib/management下的management.properties文件,在最后加入 & com.sun.management.jmxremote.port=8999 & com.sun.management.jmxremote.authenticate=false &
& com.sun.management.jmxremote.ssl=false注意:先执行netstat -ano | grep 8999,查看这个端口是否被使用。另外注意防火墙对8999端口的配置,要放开,否则远程机器可能连接不上.3、设置jconsole远程登录的用户名和密码在/usr/IBM/WebSphere/AppServer/java/jre/lib/management下有个jmxremote.password.template文件,在最后面加入你要设置的用户名和密码root root@123 (用户名、密码,可以随意修改)4、在was控制台上停掉自己的应用程序服务器,然后重启。WINDOWS客户端的设置1、进入JAVA所在的BIN目录2、输入IP、端口号、用户名和密码进行远程连接3、监控界面可以看到内存、类、线程、CPU的使用情况。使用这个工具再配合JCA工具就能很方便的分析内存溢出问题。Java VisualVM也是JDK的一个集成的分析工具,自从JDK 6 Update 7以后已经作为Sun的JDK的一部分。VisualVM可以监控应用程序的性能和内存占用情况、监控应用程序的线程、进行线程转储(Thread Dump)或堆转储(Heap Dump)、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析,保存快照以便脱机分析应用程序;同时它还支持在MBeans上进行浏览和操作。 VisualVM自身要在JDK6以上的运行,但是JDK1.4以上版本的程序也能被它监控。启动方法:进入JAVA_HOME所在的bin目录,运行jvisualvm.exe就可以启动VisualVM远程连接WAS服务器的话,需要添加JMX连接方式就可以了内存溢出的原因有很多种,比如:  1、数据量过于庞大;死循环 ;静态变量和静态方法过多;递归;无法确定是否被引用的对象;  2、虚拟机不回收内存(内存泄漏);  说白了就是程序运行要用到的内存大于虚拟机能提供的最大内存就发生内存溢出了。 内存溢出的问题要看业务和系统大小而定,对于某些系统可能内存溢出不常见,但某些系统还是很常见。 & & 内存溢出的一般解决方法:  一个是优化程序代码,如果业务庞大,逻辑复杂,尽量减少全局变量的引用,让程序使用完变量的时候释放该引用,能够让垃圾回收器回收和释放资源。  二就是物理解决,增大物理内存,然后通过-Xms256m -Xmx2048m 的修改来增大内存空间。本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
10:29:12 12:21:31 13:45:39 09:40:35如何使用JDK自带jvisualvm监控工具_百度知道
如何使用JDK自带jvisualvm监控工具
我有更好的答案
  启动jvisualvm   首先到JDK安装目录/bin目录下,双击jvisualvm.exe文件启动
  进入jvisualvm界面,右侧为正在运行的Java程序,打开了一个jconsole程序来做示例
  双击要监控的Java进行,有关监控进程的概要,监控,线程等信息都会以图像的方式显现出来,能更方便的对Java运行程序做分析
  右键左边栏,正在运行的Java程序,可以执行Dump,线程,Dump堆的操作并且可以将正在运行的程序进行快照储备,同时可以设置在发生内存溢出时自动生成Dump文件。
  右键【文件】--&【添加远程主机】可对远程运行的Java程序进行监控
  菜单栏,工具--&插件 辅助功能 可以帮助我们更细致对Java程序进行监视分析,比如Visual GC 能显示年轻代里的Eden区和survivor区的实时数据
  Visualvm是一个非常实用...
其他类似问题
为您推荐:
jdk的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁利用jdk自带的强悍工具jvisualvm检测多线程的竞争
我有一个程序,里面有大量的synchronized关键字。我怀疑它们导致的多线程竞争影响了程序的性能。但不知道如何去检测,总不能只凭自己的猜测就去修改它们,万一改到最后发现不是它们的问题,岂不浪费了。
用什么工具来测试呢?我以前用过jprofiler,那个虽然功能强大,但不是免费的。于是我在万能的stackoverflow上提了个问题,聆听神人的教诲。
果然,很快有人提供了一个很强大的免费工具:JDK6自带的jvisualvm。
这个东西我以前听过说,但一直没有用过。看到它提供的截图中可以看到各线程的运行状态,所以准备试一下。这里记录一下使用过程。
在命令行输入jvisualvm。如果jdk安装正确的话(6.x以上版本),就会看到如下的一个窗口:
看起来相当简洁,不像是很强大的样子。
2。运行一个Java程序IncTestN,jvisualvm会自动找到它
3.右键点击它,”打开”
可以看到它有很多标签页,可以让我们监测程序的各种数据。默认没有这么多,我其实安装了一些jvisualvm的插件。
4。查看jvm参数及系统属性
5。查看cpu、内存、类、线程的统计数据
注意,右边第一个还可以查看PermGen。对于scala程序,因为它产生了大量的类定义,所以PermGen有可能会不足,可通过该选项查看PermGen,适当调整:
可以看到,对于本程序来说,PermGen还是比较充分的,无须调整。
6。查看各线程运行情况
这个是重点,我们需要知道各线程的运行情况,特别是否被synchronized阻塞了。
注意右下角,有四个状态说明,分别是:
运行(Running):我们最喜欢的状态。说明该线程正在执行代码,没有问题。
休眠(Sleeping):调用了Thread.sleep后的状态,说明线程正停在某个Thread.sleep处
等待(Wait):手动调用了wait方法,或者某些IO操作,在阻塞中等待数据。
监视(Monitor):这里就是我想找的问题了。它表示线程想执行一段synchronized中的代码,但是发现已经有其它线程正在执行,自己被block了,只能无奈地等待。如果这种状态多,说明程序需要好好优化。
从上面的这个图可以看到,下面多个线程都处于”监视”状态。多个线程都卡在了独木桥的一头过不去,干不了活干着急呢。
当然这个程序是我专门设计成这样的,存在着严重的性能问题,需要好好优化。
7。查看各线程的统计数据
如果我们需要一些统计数据,比如某个线程总共运行了多少时间,”运行”状态有多久(或百分比),休眠、等待、监视有多久,则需要用到”表”这一页。
从中可以看到这个悲催的程序,几分所有的时间都用在了synchronized的阻塞上了。只有百分之零点几的时间在运行中,效率可真低啊。
还可以使用图表方式来看这些数据,得到更直观的体验:
8。查看各方法的运行时间
想不想程序中到底是哪些方法一直在运行?可使用”抽样器”功能:
我们需要先点击上面的”CPU”按钮,它才会开始统计,下面的数据会慢慢多起来。从上图可以看出,程序一直在运行SynIncer.inc()方法,它占用了所有方法执行总时间的99.8%。如果我们想提高程序性能,则需要重点优化它,让它运行得更快。
还想知道方法被调用的次数?使用”Profiler”页中的功能:
它与抽样器很像,但是最后多了一个”调用次数”。
9。查看哪些对象占用了最多的内存
当出现了内存不足的错误时,想不想知道到底是哪些对象把内存都占用了?这时需要使用”抽样器”的”内存”检测功能:
从表中可以看出当前最多的是哪些对象,它们有多少个,用了多少个字节。
10。安装更多插件
jvisualvm还在线提供了很多插件,提供了更多的功能。我们可以通过”工具”-&”插件”,找到并安装它们。推荐全装,比如我就安装了全部(当前有16个):
安装重启后,再找到某个程序节点,就会发现有更多的标签页可用。
11。查看MBeans
MBeans可以将程序中的某些信息暴露给外部。有一些库在设计时,就考虑到了这一点。如果我们不满足于前面那些基础信息,可以在这里看看。
由于当前程序没有使用到提供MBeans信息的库,所以看不到什么多少有用的信息。如果你使用了某些数据库连接池(提供了MBeans功能的),可以在这里看到池里的一些信息,还可以通过”Operations”标签页,对程序数据进行一些修改。
12。查看gc情况
垃圾回收是我们不能忽略的一个地方。我们可以通过”Visual GC”页,查看到非常详细的垃圾回收情况。
可以说,这个功能提供的信息真是非常地详尽,连两个小Eden的情况也实时地表现出来了。不过要看懂这些数据,还是需要先到网上看看讲解Java垃圾回收的文章,了解其内部原理才行。
13。更多更详细的监测内容
Tracer页提供了更多的监测内容
可以看到程序中遍布探针,让我们实时了解到各处的运行情况。先选中感兴趣的内容,然后点击”Start”按钮即可。
这一块比较专业,普通开发人员可能都不知道这些数据到底有什么用。但专业人士可能会觉得会很需要它们。
JvisualVM的大部分功能都已经演示完了,我想它的功能的确很强大,在我们平时的开发中会非常有用。
原文连接:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。使用jvisualvm监控Spark作业 – 过往记忆
欢迎关注Hadoop、Hive、Hbase、Flume等微信公共账号:iteblog_hadoop。
文章总数:619
浏览总数:6,271,708
评论:3404
分类目录:68 个
注册用户数:1076
最后更新:日
欢迎关注微信公共帐号:iteblog_hadoop
关注互联网头条技术
  jvisualvm工具JDK自带的一个监控工具,该工具是用来监控java运行程序的cpu、内存、线程等的使用情况,并且使用图表的方式监控java程序、还具有远程监控能力,不失为一个用来监控Java程序的好工具。
  同样,我们可以使用jvisualvm来监控Spark应用程序(Application),从而可以看到Spark应用程序堆,线程的使用情况,从而根据这些数据去优化您的程序。废话少说,下面来说说怎么配置,使得我们可以使用jvisualvm来监控程序:
  1、在$SPARK_HOME/conf目录下配置spark-default.conf文件,加入如下配置:
spark.driver.extraJavaOptions
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
jmx默认的是1099端口,上面没有使用到ssl;并且不需要登录即可建立Jmx连接。
  在前面的文章()中,我们介绍了Spark的几种Metrics,其实这里我们也可以使用Metrics来配置JMX,我们只要在$SPARK_HOME/conf目录下配置metrics.properties,如下:
*.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink
这个在1099端口上开启JMX,目前貌似不支持端口的配置,以及SSL、authenticate等配置,其他的都和上面的一样。
  2、启动你的Spark应用程序
  3、打开jvisualvm.exe监控你的Spark应用程序
  在JDK安装的bin目录下有个jvisualvm.exe,双击它,然后进行配置,依次选择 文件-> 添加JMX连接,然后会弹出一个对话框,在连接文本框里面填上你Driver机器的地址和端口,比如::1099。然后就可以看到如下的画面:
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
里面可以看到很多关于你Spark应用程序的系信息,比如JVM配置和系统参数(其实这些在你应用程序的4040端口看到这些信息)。
  在Java安装目录下的bin文件夹还有个jconsole.exe程序,这个使用和jvisualvm.exe使用差不多,只不过jvisualvm.exe图形漂亮很多。当然,还有很多工具可以监控Java程序的,比如jprofiler,这个功能更强大,但是配置起来也比较麻烦,而且这款软件是收费的。关于如何使用我就不介绍了。
本博客文章除特别声明,全部都是原创!
尊重原创,转载请注明: 转载自
下面文章您可能感兴趣您所在的位置: &
Java多线程的监控分析工具(VisualVM)
Java多线程的监控分析工具(VisualVM)
龙浩的blog
在Java多线程程序运行时,多数情况下我们不知道到底发生了什么,只有出了错误的日志的时候,我们才知道原来代码中有死锁。撇开代码检查工具,我们先讨论一下利用VisualVM监控,分析我们的多线程的运行情况。
在Java多线程程序运行时,多数情况下我们不知道到底发生了什么,只有出了错误的日志的时候,我们才知道原来代码中有死锁。撇开代码检查工具,我们先讨论一下利用VisualVM监控,分析我们的多线程的运行情况。(注:实践本文内容的JDK的版本需要1.6.07以上)
什么是VisualVM
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/5470.jpg" />
VisualVM是JDK的一个集成的分析工具,自从JDK 6 Update 7以后已经作为Sun的JDK的一部分。
VisualVM可以做的:监控应用程序的性能和内存占用情况、监控应用程序的线程、进行线程转储(Thread Dump)或堆转储(Heap Dump)、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析,保存快照以便脱机分析应用程序;同时它还支持在MBeans上进行浏览和操作。尽管 VisualVM自身要在JDK6以上的运行,但是JDK1.4以上版本的程序它都能被它监控。
在JDK1.6.07以上的版本中:到$JAVA_HOME/bin,点击jvisualvm.exe图标就可以启动VisualVM;当然也可以点击获取官方的最新版本,支持:英文,中文,日文。
VisualVM功能集成较多,我们这里只讨论它对象线程的监控分析。
VisualVM监控线程
当我们运行VisualVM的时候,可以在应用程序》本地中看到VisualVM和eclipse的运行程序,然后我们启动eclipse中的一个线程:com.longtask.thread.TestVisualVm,可以看到在菜单中多了一个该线程的显示。点击右边的 线程 菜单,可以看到线程运行的跟踪情况。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/5471.jpg" />
点击 thread dump,可以生成该线程的运行情况的tdump文件,通过thread dump提供的相关信息,我们可以看到线程在什么地方被阻塞了以及线程的其他状态。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/5472.jpg" />
把日志另存为文件,到的主页点击图标下载TDA,然后用TDA打开刚才VisualVM保存的 thread dump文件,查看相关的分析结果。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/5473.jpg" />
我们也可以用VisualVM来监控远程java线程的运行情况。
远程监控:启动RMI服务
1:新建一个jstatd.all.policy文件,在里面添加以下内容来保证jstatd服务启动的时候不报异常:
grant&codebase&&file:${java.home}/../lib/tools.jar&&{ &&&&&permission&java.security.AllP &};&
2:netstat -ano | grep -i 1099 查看1099端口是否被占用了,如果被占用,则需要选择其他端口来启动jstatd服务
3:如果端口被占用,用以下方式启动jstatd服务:
rmiregistry&2020&&&jstatd&-J-Djava.security.policy=jstatd.all.policy&-p&2020&
更多jstatd的文档请参考sun公司的官方文档
远程监控Jboos服务
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/5474.jpg" />
1:修改JDK下面的jmx的配置文件:
切换至$JAVA_HOME所在目录/jre/lib/management下,
I:将jmxremote.access、jmxremote.password.template权限调整为读写:
grant&codebase&&file:${java.home}/../lib/tools.jar&&{ &permission&java.security.AllP &};&
II:vi jmxremote.password去掉
# monitorRole QED
# controlRole R&D
2:在Jboss的启动文件中添加以下信息:
JAVA_OPTS=&-Dcom.sun.management.jmxremote.port=2899&\ &-Dcom.sun.management.jmxremote.ssl=false&\ &-Dcom.sun.management.jmxremote.authenticate=false&\ &-Djava.rmi.server.hostname=10.212.20.9&&其他配置&&
3:检查启动情况:
netstat -a | grep -i 2899 查看端口占有情况
如果2899端口被其他程序占用,在jboss配置文件中调整端口-Dcom.sun.management.jmxremote.port=****
而后在VisualVM中就添加远程连接,选择jmx方式,就可以监控jboss的运行情况了。
参考文档:
原文链接:
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
Java是Sun公司推出的一种解释型、跨平台的编程语言。它适合于企
所以姑娘,让我们做一枚花见花开的程序媛。
JavaScript正凭借新型工具与功能提升以极度夸张的速度
国庆假期前的612,是不是有点折腾?网上的中秋国庆放
刚刚开始接触java数组的人都会听到一句类似的话:java
《精通ASP+XML+CSS网络开发混合编程》介绍当前网络开发的主流平台与技术之一的ASP+CSS+XML的知识与应用,全书各知识点均配以实例
51CTO旗下网站

我要回帖

更多关于 jvisualvm监控tomcat 的文章

 

随机推荐