Java VisualVM
JDK1.6 中Java 引入了一个新的可视化的JVM 监控工具:Java VisualVM。
VisualVM 提供在Java 虚拟机上运行的Java 应用程序的详细信息。在VisualVM 的图形用户界面中可以方便、快捷地查看多个Java 应用程序的相关信息。
运行VisualVM 非常简单,只需在命令行状态下输入:
# jvisualvm
启动配置
//需要用户名和密码访问 JAVA_OPTS='-Xms128m -Xmx256m -XX:MaxPermSize=128m -Djava.rmi.server.hostname=192.168.1.8 -Dcom.sun.management.jmxremote.port=8088
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=/usr/java/default/jre/lib/management/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/usr/java/default/jre/lib/management/jmxremote.access'
注:(jmxremote.access 在JAVA_HOMEjrelibmanagement下有模板)
修改密码配置
# vim jmxremote.password //用于添加用户名和密码
monitorRole 12345678 //用户名:monitorRole,这个名字系统是预先设置好的 admin 123456 //自定义了用户名:admin root 123456 //自定义了用户名:root
强制保存退出
#vim jmxremote.access //自定义监控的用户名具有哪些权限
添加:
admin readonly //定义只读帐号,名字任意 root readwrite //定义读写帐号,名字任意 create javax.management.monitor.*,javax.management.timer.*
保存退出
修改文件的权限
# chmod 600 jmxremote.password # chmod 600 jmxremote.access
JConsole
JConsole 是一个基于JMX 的图形监控工具,用于连接正在运行的JVM,与前面提到的jvmstat 类似的图形监控程序,可以以图表化的形式显示各种数据,并可通过远程连接监视远程的服务器VM 情况,此类工具可以较直观观察各种变化,但比较耗费资源。
在JDK 1.5之后JConsole 已经成为JDK 自带监控工具。
只需要在命令行状态下输入:
# jconsole
相关的配置可以参考java VisualVM配置参数
注:如果JConsole不能访问本机的程序的话,添加如下内容:
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
iptime
[root@centos7_template ~]# uptime 10:31:42 up 4 days, 1:01, 1 user,load average: 0.02, 0.02, 0.05
10:31:42 //当前系统时间
up 4 days, 1:01 //持续运行时间,时间越大,说明你的机器越稳定。
1 user //用户连接数,是总连接数而不是用户数
load average: 0.02, 0.02, 0.05 //系统平均负载,统计最近1,5,15分钟的系统平均负载
TOP
通过TOP命令可以详细看出当前系统的CPU、内存、负载以及各进程状态(PID、进程占用CPU、内存、用户)等
首先介绍top中一些字段的含义:
VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来
DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
实例
top -p 3618 // 这里的3618就是上面查询到的java程序的进程ID
vmstat
除此之外,vmstat命令也可以查看系统CPU/内存、swap、io等情况:
上面的命令每隔1秒采样一次,一共采样四次。CPU占用率很高,上下文切换频繁,说明系统有线程正在频繁切换,这可能是你的程序开启了大量的线程存在资源竞争的情况。另外swap也是值得关注的指标,如果swpd过高则可能系统能使用的物理内存不足,不得不使用交换区内存,还有一个例外就是某些程序优先使用swap,导致swap飙升,而物理内存还有很多空余,这些情况是需要注意的。
pidstat
查看系统指标,还有一个第三方工具:pidstat,这个工具还是很好用的,需要先安装:
yum install sysstat
该命令监控进程id为3618的CPU状态,每隔1秒采样一次,一共采样四次。“%CPU”表示CPU使用情况,“CPU”则表示正在使用哪个核的CPU,这里为0表示正在使用第一个核。如果还要显示线程ID,则可以使用:
pidstat -p 3618 -u -t 1 4
如果要监控磁盘读写情况,这可以使用:
pidstat -p 3618 -u -d 1 4