java visualVM 监控本地tomcat搭建本地服务器。在profiler中点击cpu,一直在显示正在连接到目

6319人阅读
在网上找了可以说是n多文章呀,都配置过,但都不行,可能是我一开始tomcat里面的文件搞乱了吧,后来把tomat给删掉,重新解压一份,一步一步参照官方文档给出的解决方案,终于给解决了
1、在tomcat的安装目录下的conf/server.xml加上
&Listener className=&org.apache.catalina.mbeans.JmxRemoteLifecycleListener&
rmiRegistryPortPlatform=&10001& rmiServerPortPlatform=&10002& /&
2、在tomcat安装目录bin/下新建setenv.sh文件,文件内容为
-Dcom.sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access
-Dcom.sun.management.jmxremote.ssl=false
这个地方可能会报错,
也没找错误原因,如果那位大神知道的话可以留言告知一下。我的解决方法是在环境变量/etc/profile下增加下面代码:
export JAVA_OPTS=&-Dcom.sun.management.jmxremote.password.file=$CATALINA_HOME/conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=$CATALINA_HOME/conf/jmxremote.access -Dcom.sun.management.jmxremote.ssl=false&
然后启动tomcat就没出现之前那个错误了。
3、在第二部里面对应的$CATALINA_BASE即是/opt/tomcat/(我的是这个),这个不用去关心,但是在这之前有关tomcat的环境变量请自行设置好,我这边就在/etc/profile下面设置了,CATALINA_HOME即是应该设置的tomcat的环境,当然java环境变量也要设置好
setenv.sh文件的jmxremote.password和jmxremote.access在/opt/java/jdk1.6.0_45/jre/lib/management下面会发现对应jmxremote.access和jmxremote.password.template复制到tomcat安装目录下的conf文件夹下就OK了,jmxremote.password.template复制过去的时候要改名成jmxremote.password,然后在这两个文件里面添加以下内容,图示:
jmxremote.password:
jmxremote.access:
4、接着开启linux防火墙对1设置,之前在某篇文章下面看到,端口值在几千一下就不用设置,但是我这个地方一开始就设置了,所以就没去掉了。设置端口可以在linux执行命令 &vi /etc/sysconfig/iptables,这里给出截图:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10001 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10002 -j ACCEPT
即上面这两句。
5、往tomcat安装文件lib文件夹加入catalina-jmx-remote.jar这个文件
下载链接:
6、更改/etc/hosts下面的127.0.0.1或localhost为你的真实IP地址,然后用命令hostname -i查看
7、打开visualvm,如图
上面这个截图的jaxremote.passwd写错了,你懂的。
欢迎大家拍砖。
最后给出官网的解决方法
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:118902次
积分:1516
积分:1516
排名:千里之外
原创:37篇
转载:21篇
评论:10条
(3)(1)(1)(1)(1)(2)(6)(5)(2)(1)(1)(2)(3)(4)(3)(3)(5)(1)(1)(1)(3)(1)(5)(2)九大工具助你玩转Java性能优化 - ImportNew
| 标签: ,
Java性能优化工具可以帮助你改进你的Java代码。
之前我写过一篇关于的文章。合适的工具可以改进我们的代码,并且提高开发效率。在中,我们一直在找一些方法来改进我们的代码。但最近,我们在考虑改进和代码时,发现最近我们的关注点已经开始转换到如何提升Java性能。
在这篇文章中,我会带着大家一起看一下9个可以帮助我们优化Java性能的工具。有一些我们已经在IDR Solutions中使用了,而另外一些有可能在个人项目中使用。
NetBeans Profiler
是一个NetBeans IDE插件,主要为NetBeans IDE提供性能分析相关的功。NetBeans IDE是一个开源的集成开发环境。它很好地支持所有Java应用类型(包括Java SE、JavaFX、Java ME、Web、EJB和移动应用)的开发。
这个性能分析器包含了诸如CPU、内存和线程性能分析功能,并且提供了一些用于基本JVM监控的附加工具和功能。对于需要解决内存和性能相关问题的开发者非常有用。
在中有提及。同样,它也是一个很好的Java性能分析工具。JProfiler集CPU、内存和线程性能分析于一体,可以用于分析性能瓶颈、内存泄漏、CPU负载和解决线程相关的问题,并且支持本地性能分析(分析与JProfiler软件安装在同一台机的应用)和远程性能分析(它可以分析远程没有安装JProfiler机器上的应用),这一点对开发人员非常有用。
JProfiler由ej-technologies GmbH开发的商业授权的Java性能分析工具,主要为Java EE和Java SE应用所设计。
GC viewer截图
可以(从和)免费获取。GC Viewer是一个开源工具,可以对vmflags -verboase:gc和-Xloggc:等Java VM选项产生的数据进行可视化分析。GC Viewer可以用于计算GC(垃圾回收)相关的性能数据记录,包括吞吐、累积暂停、最长时间的暂停等等。当你想要通过改变生成大小和设置初始堆大小来调整某个特定应用的GC时,它尤其有用。
GC Viewer是一个开源工具,由Tagtraum Industries Incorporated开发。这是一个很小的初创软件咨询公司,位于罗利、北卡罗莱纳州,由成立于1999年的非盈利项目Tagtraum Industries在2004年创立。
是一个由NetBeans平台派生的工具,遵循模块化的架构思想。这意味着可以通过插件方便的进行扩展。
Visual VM允许你获取Java程序的详细信息,只要它在一个Java虚拟机(JVM)上运行即可。生成的数据可以由JDK工具生成和读取,多个Java程序的所有数据和信息都可以很方便地进行查看,包括本地和远程的运行程序。同时可以保存JVM软件的数据快照,把数据保存在本地,方便以后进行查看或者和其他人一起分享。
Visual VM可以进行CPU性能分析、内存性能分析,进行GC(译者注:可以进行强制调用GC)、保存快照等。
Patty *Beta
Patty in action (图片来源于http://patty.sourceforge.net.)
是一个开源项目,可以从下载。它致力于为Java 1.5.0和更高版本的虚拟机提供性能分析工具。与其他性能分析工具不同之处在于,它专注性能分析,并且允许用户在运行时开启和关闭性能分析功能。
目前Patty正处于beta版阶段,但随着更多强大的功能如方法执行、代码覆盖、线程竞争(Thread Contention)分析的加入,Patty可以用于(内存、CPU等)性能调优,并且可以将信息通过TCP/IP Socket发送到其他电脑上。Patty有着易用的GUI,可以用于分析堆。还可以在Java编译流程中的准备阶段,对应用程序运行时对class进行监测(instrument)和取消监测(de-instrument)。
JRockit——任务管理
是一个原由Appeal Virtual Machines开发的专有Java虚拟机。2002年由BEA Systems收购,之后从Sum Microsystems处转到Oracle。
Oracle的JRockit是一套完整的Java SE解决方案,包含了一个高性能JVM、性能分析、监控和排错工具。可用于预测Java程序中的延迟。
现在,JRockit打包有一系列的称为JRockit任务控制(JRockit Mission Control)的工具。这些工具包括:一个用于管理的控制台(console,译者注:此console跟终端不一样,是特指管理后台系统),进行GC数据可视化和其他的一些性能统计。它同样可以作为运行时性能分析工具Runtime Analyzer来使用,也可以分析内存问题。
Eclipse Memory Analyzer
Memory Analyzer (MAT) 可以在Eclipse IDE中找到.
是一个可以帮助你找到内存泄漏和减少内存损耗的Java堆分析器。它更适合作为一个分析Java堆栈和计算大小的工具集,也可以用于监测内存泄漏和反模式带来的内存损耗。
Java Interactive Profiler
是一个用Java开发的高性能、低损耗性能分析器。基于发布,可以从下载。使用JIP的开发者可以在VM运行时开启和关闭性能分析,并且可以过滤类和包、控制输出。
Profiler4J
是一个专注于CPU性能分析的工具。它具有友好的用户界面,支持远程性能分析,并且支持动态修改配置。Profiler4j值得关注的特性有:基于动态字节码增强方式,这就表明它不需要任何本地的库和外部可执行文件支持。更重要的是,它完全由Java编写,可以提供图形化的调用图形信息、调用树结构、内存监控和类列表,支持细粒度配置文件。它基于发布,可以从Source Forge上
希望你觉得这些工具有用。
你使用什么工具来改进你的代码,请告诉我们吧!
这篇文章是我们”“系列的一部分。在这些文章中,我们致力于深入Java和JavaFx。看一下吧!
如果你是第一次看这个系列,或者想要在我们发布新文章和更新时,得到通知,你可以通过社交媒体来关注(, 和)或者
原文链接:
- 译文链接: [ 转载请保留原文出处、译者和译文链接。]
关于作者:
(新浪微博:)
关于ImportNew
ImportNew 专注于 Java 技术分享。于日 11:11正式上线。是的,这是一个很特别的时刻 :)
ImportNew 由两个 Java 关键字 import 和 new 组成,意指:Java 开发者学习新知识的网站。 import 可认为是学习和吸收, new 则可认为是新知识、新技术圈子和新朋友……
新浪微博:
推荐微信号
反馈建议:@
广告与商务合作QQ:
– 好的话题、有启发的回复、值得信赖的圈子
– 写了文章?看干货?去头条!
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 活跃 & 专业的翻译小组
– 国内外的精选博客文章
– UI,网页,交互和用户体验
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
& 2016 ImportNewLinux下Java线程详细监控和其dump的分析使用—-分析Java性能瓶颈 - 为程序员服务
Linux下Java线程详细监控和其dump的分析使用—-分析Java性能瓶颈
这里对linux下、sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结;
linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找:
(一):通过【 top
-p 12377 -H】 查看java进程的有哪些线程的运行情况;
和通过【jstack 12377 & stack.log】生成Java线程的dump详细信息;
先用top命令找出占用资源厉害的java进程id,如图:# top
如上图所示,java的进程id为&#′,接下来用top命令单独对这个进程中的所有线程作监视:
-p 52554 -H
top视图里面里面可以通过快捷键依次b ,x高亮显示top的列找出需要的线程,默认CPU排序,Shift+& ,Shift+&可以左右移动高亮排序的列;
如图:(这时就看出来哪个java线程CPU高,哪个线程内存用的多)
如上图所示,linux下,所有的java内部线程,其实都对应了一个进程id,也就是说,linux上的sun jvm将java程序中的线程映射为了操作系统进程;我们看到,占用CPU资源最高的那个进程id是&#′,这个进程id对应java线程信息中的’nid’(‘n’ stands for ‘native’);
(1)要想找到到底是哪段具体的代码占用了如此多的资源,先使用jstack打出当前栈信息到一个文件里, 比如stack.log:
jstack 52554 & stack.log
然后使用’jtgrep’脚本把这个进程号为&#′的java线程在stack.log中抓出来:
jtgrep 9757 stack.log
其中,’jtgrep’是自己随便写的一个shell脚本:
nid=`python -c
"print hex($1)" `
-i $nid $2
道理很简单,就是 把&#′转换成16进制后,直接grep stack.可以看到,被grep出的那个线程的nid=0x3c39,正好是15417的16进制表示。
(2) 通过(windows程序–&计算器),选择程序员计算器将进程ID转换成16进制 到dump里面的nid 就可以搜索到
“http-nio-8080-exec-25″ daemon prio=10 tid=0xb4800 nid=0x1ce5 waiting on condition [0xcf000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
– parking to wait for
&0x3ec8& (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:104)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
(二)第二种通过 Java visualMv结合 jconsole.exe
工具即可查看如图所示;(第一种方式可能更准确一些)
三:在Java Visualvm工具里面安装JTA插件,分析线程dump文件,注意,正常阶段的dump文件与非正常时期的Dump文件进行比较更容易分析出问题:
(1)下载:https://java.net/projects/tda/downloads/directory/visualvm
(2)安装与使用:
(3)使用:
四:直接通过tda-bin-2.2\bin\tda.sh 来分析导出ThreadDump文件;(在没有JMX监控的情况下手动查看threadDump信息)
下载地址:https://java.net/projects/tda/downloads/directory/visualvm
IT技术文章geek资讯
原文地址:, 感谢原作者分享。
您可能感兴趣的代码VisualVM远程监控JMX配置方法介绍 - 推酷
VisualVM远程监控JMX配置方法介绍
查看端口命令
我们远程在
系统上监控
[root@bspdev jdk1.7.0_09]# cd $JAVA_HOME/jre/lib/management
[root@bspdev management]# pwd
/usr/java/jdk1.7.0_09/jre/lib/management
[root@bspdev management]# ls -l
-rw-r--r-- 1 root root&&3998 Sep 25&&2012 jmxremote.access
-rw-r--r-- 1 root root&&2856 Sep 25&&2012 jmxremote.password.template
-rw-r--r-- 1 root root 14097 Sep 25&&2012 management.properties
-rw-r--r-- 1 root root&&3376 Sep 25&&2012 snmp.acl.template
password.template
jmxremote.password
文件,并且设置相应的读写权限。
[root@bspdev management]# cp jmxremote.password.template jmxremote.password
[root@bspdev management]# ls -l
-rw-r--r-- 1 root root&&3998 Sep 25&&2012 jmxremote.access
-rw-r--r-- 1 root root&&2856 Jul&&5 06:09 jmxremote.password
-rw-r--r-- 1 root root&&2856 Sep 25&&2012 jmxremote.password.template
-rw-r--r-- 1 root root 14097 Sep 25&&2012 management.properties
-rw-r--r-- 1 root root&&3376 Sep 25&&2012 snmp.acl.template
[root@bspdev management]#
jmxremote.password
的文件权限,否则报错必须限制口令文件读取访问权限
:jmxremote.password
Chmod –R 600 jmxremote.password
jmxremote.password
中的权限部分注释标记去除。
# password &QED&.&&The &controlRole& role has password &R&D&.
# monitorRole&&QED
# controlRole&&&R&D
monitorRole&&QED
controlRole&&&R&D
&jmxremote.password& 64L, 2852C written
下一步修改
的启动语句,将
bin/catalina.sh
JAVA_OPTS=&-Xmx1024M -Xms512M -Xss3M&&
export JAVA_OPTS
CATALINA_OPTS
=&-Xmx1024M -Xms512M -Xss3M -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true&&
CATALINA_OPTS
注意这里不要使用
这个变量,否则会出现错误
代理抛出异常错误
: java.rmi.server.ExportException: Port already in use
为什么会出现这个错误呢看官方的说法:
# & JAVA_OPTS & & & (Optional) Java runtime options used when any command&
# & & & & & & & & & is executed.&
# & & & & & & & & & Include here and not in CATALINA_OPTS all options, that&
# & & & & & & & & & should be used by Tomcat and also by the stop process,&
# & & & & & & & & & the version command etc.&
# & & & & & & & & & Most options should go into CATALINA_OPTS.&
# & CATALINA_OPTS & (Optional) Java runtime options used when the &start&,&
# & & & & & & & & & &run& or &debug& command is executed.&
# & & & & & & & & & Include here and not in JAVA_OPTS all options, that should&
# & & & & & & & & & only be used by Tomcat itself, not by the stop process,&
# & & & & & & & & & the version command etc.&
# & & & & & & & & & Examples are heap size, GC logging, JMX ports etc.&
& JAVA_OPTS
变量会被任何命令执行时调用,而
CATALINA_OPTS
只是在启动、运行、调试的命令中才会被调用。
Tomcat&catalina.sh&
# OS specific support. $var _must_ be set to either true or false.
添加如下变量:
JAVA_OPTS=&-Dcom.sun.management.jmxremote.port=1090 --
远程监听端口
,指定任意未被占用端口
-Dcom.sun.management.jmxremote.authenticate=true --
启用用户认证
-Dcom.sun.management.jmxremote.ssl=false --
-Djava.rmi.server.hostname=10.111.43.164 --
绑定远程主机
-Dcom.sun.management.jmxremote.acccess.file=/opt/apache-tomcat-7.0.2/jconsole/jmxremote.access --
配置用户访问权限
-Dcom.sun.management.jmxremote.password.file=/opt/apache-tomcat-7.0.2/jconsole/jmxremote.password& --
配置用户信息,包括用户名和密码
如果不需要配置访问用户名及密码,配置如下:
# OS specific support. $var _must_ be set to either true or false.&
JAVA_OPTS=&-Dcom.sun.management.jmxremote.port=1090&
-Dcom.sun.management.jmxremote.authenticate=false&
-Dcom.sun.management.jmxremote.ssl=false&
-Djava.rmi.server.hostname=10.111.43.164&&
选项配置文件说明:
$JAVA_HOME/jre/lib/mamagement/jmxremote.properties&
、切换用户到
/etc/hosts
地址。添加如下信息:
10.111.43.164 fmcods.localdomain fmcods localhost.localdomain localhost&
jmxremote.password
jmxremote.access
#mkdir -p $JAVA_HOME/jconsole&
#cp $JAVA_HOME/jre/lib/management/jmxremote.password.template $JAVA_HOME/jconsole/jmxremote.password&
#cp $JAVA_HOME/jre/lib/management/jmxremote.access $JAVA_HOME/jconsole/jmxremote.access
修改文件权限:
#chmod -R 775 jconsole&
此时提示错误
必须限制口令文件读取访问
: $JAVA_HOME/jconsole/jmxremote.password
解决办法:在
$CATALINA_BASE
目录下新建
文件夹,访问文件权限必须是
#mkdir -p $CATALINA_BASE/jconsole&
jmxremote.password
jmxremote.access
$CATALINA_BASE/jconsole,
修改文件权限
#chmod -R 600 jmxremote.password&
#chmod -R 600 jmxremote.access&
$CATALINA_BASE/bin/shutdown.sh.
出现连接端口被占用提示。
ps -ef | grep 1090 --
被占用端口
kill -9 pid&
.$CATALINA_BASE/startup.sh&
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致}

我要回帖

更多关于 java visualvm tomcat 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信