Tomcat 监控

本地监控

JConsole,JvisualVM工具可以直观监控Tomcat的JVM内存、线程、GC等信息。

Windows本地监控很简单,Linux可以借助Linux的远程图形桌面VNC。

VNC操作如下:

1.Linux上安装VNC服务端:

l  yum install tigervnc-server

# yum groupinstall "GNOME Desktop Environment"CentOS 5.x安装GNOME桌面环境)
# yum groupinstall "X Window 
System" "Desktop"CentOS 6.x安装GNOME桌面环境)
# yum groupinstall Xfce
CentOS安装Xfce桌面环境,可选)
# yum install vnc-
server vnc* CentOS 5.x里)
# yum install tigervnc-server tigervnc
CentOS 6.x里)

l  把远程桌面的用户加入到配置文件中

vi /etc/sysconfigvncservers
使用vi编辑器打开配置文件,在文件中添加下面两行命令
VNCSERVERS="1:root" --
指定远程用户
VNCSERVERARGS[1]="-geometry 1024x768" --
指定远程桌面分辨率

给远程桌面用户 root 设置密码:vncpasswd

开启VNC端口。iptables防火墙默认会阻止vnc远程桌面,所以需要在iptables允许通过。当你启动vnc服务后,你可以用netstat -tunlp命令来查看vnc服务所使用的端口。使用下面命令开启这些端口:
vi /etc/sysconfig/iptables
使用vi编辑器打开配置文件,在文件中添加下面一行命令
-A RH-Firewall-l-INPUT -p tcp -m tcp --dport 5900:5903 -j ACCEPT

重启防火墙:
 
/etc/init.d/iptables restart
或者直接关闭防火墙:
 /etc/init.d/iptables stop

启动vncservervncserver

2.VNC客户端:

vnc客户端中输入:服务器端IP,然后输入密码。打开JConsoleJvisualVM工具就能直观看到监控信息了。



远程监控

这里再介绍下如何利用JConsole进行远程监控Tomcat, JvisualVM类似。因为比较耗性能,一般在进行性能测试时不推荐使用。

1.参数配置:

Linux下,tomcat bin/catalina.sh配置:

JAVA_OPTS=”-Xms2048m -Xmx2048m-XX:MaxPermSize=516m -Djava.rmi.server.hostname=192.168.77.159-Dcom.sun.management.jmxremote.port=1090-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false

windows下,tomcat bin/catalina.bat配置:

 set JAVA_OPTS=%JAVA_OPTS%-Xms2048m -Xmx2048m -XX:MaxPermSize=516m -Djava.rmi.server.hostname=192.168.77.159-Dcom.sun.management.jmxremote.port=1090-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false

 

注意事项:确保指定的端口不被占用,windows下使用netstat -aon|findstr "1090"查看端口是否被占用,另外如果开启了防火墙服务,请确保端口能够透过防火墙访问;

2.连接远程虚拟机,启动%JAVA_HOME%\bin目录下的jconsole,输入相关ip和port,建立连接



使用命令

  有时进行现网性能测试时,可能安装软件或添加jvm远程监控相关参数都很不方便。这时我们可以选择一些jdk自带的监控工具。

jps

查看所有的jvm进程,包括进程ID,进程启动的路径等等。

示例:jps -v

也可以用psps -ef |grep java

jstack

观察jvm中当前所有线程的运行情况和线程当前状态

注意:在实际运行中,往往一次 dump的信息,还不足以确认问题。建议产生三次 dump信息,如果每次 dump都指向同一个问题,我们才确定问题的典型性。

示例threaddump: jstack  -l 2203  > threaddump_1.txt

threaddump文件可以用IBM的一个线程分析工具进行分析。

dump 文件里,值得关注的线程状态有:

  死锁, Deadlock 

  等待资源, Waiting on condition

  等待获取监视器, Waiting on monitor entry

  阻塞, Blocked

 

jstat

jstat利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对进程的classloadercompilergc情况。

示例:jstat –gccause –h 15 2203 2000

参数介绍:

-class:统计class loader行为信息 
-compile
:统计编译行为信息 
-gc
:统计jdk gcheap信息 
-gccapacity
:统计不同的generations(包括新生区,老年区,permanent区)相应的heap容量情况 
-gccause
:统计gc的情况,(同-gcutil)和引起gc的事件 
-gcnew
:统计gc时,新生代的情况 
-gcnewcapacity
:统计gc时,新生代heap容量 
-gcold
:统计gc时,老年区的情况 
-gcoldcapacity
:统计gc时,老年区heap容量 
-gcpermcapacity
:统计gc时,permanentheap容量 
-gcutil
:统计gc时,heap情况 

 

jmap

监视进程运行中的jvm物理内存的占用情况,该进程内存内所有对象的情况,例如产生了哪些对象,对象数量等。

注意:这个jmap使用的时候jvm是处在假死状态的,只能在服务瘫痪的时候为了解决问题来使用,否则会造成服务中断。

1-默认视图

查看连接到进程里的本地类库。jmap [pid]




2-堆视图

堆大小是年轻代、年老代加上PermGen区总和。年轻代包括Eden,S0,S1

jmap–heap [pid]




3-柱状视图

使用柱状视图可以看到哪些对象占用了内存。

jmap–histo [pid] | head -30



jmap使用类型内部名称。如:字符数组会写成 [C

B  byte
C  char
D  double
F  float
S  short
I   int
J  long
Z  boolean
[  
数组,如[I表示int[]
[L+
类名其他对象

[C is a char[]
[S is a short[]
[I is a int[]
[B is a byte[]
[[I is a int[][]

带上live,表示只统计存活对象

 jmap -histo:live 9939 | head -30

 

4-生成dump文件

产生一个HeapDump文件,此为生成heapdump文件的重要参数。
例: jmap -dump:format=b,file=0612-hd_drlgz-v50.hprof 50515
可以使用MATIBM的一个内存分析工具分析导出的内存文件。

jinfo

观察进程运行环境参数,包括Java System属性和JVM命令行参数。



参考网址

http://www.ha97.com/4634.html

https://my.oschina.net/freegarden/blog/286372





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值