java性能监控

1.监控cpu的使用率

1)vmstat命令

vmstat [arg1] [arg2]

  • arg1:间隔时间(秒),
  • arg2:采集次数
示例:
$ vmstat 2 1		#2表示每个两秒采集一次服务器状态,1表示只采集一次。
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0      0 2881900 304252 1496312    0    0   241    35  162  412  4  1 95  0  0
$ vmstat 2		#表示vmstat每2秒采集数据,一直采集,直到我结束程序
procs  ---------------memory----------- -swap-- ----io----  --system-- ------cpu------
 r  b   swpd   free       buff      cache     si   so    bi    bo      in     cs   us  sy id wa st
 0  0      0 2779416 304792 1522608    0    0   212    34  166   426   4  1   95  0  0
 0  0      0 2778656 304800 1522808    0    0     0    230  717  1654  3  1   95  0  0
 0  0      0 2778904 304800 1522808    0    0     0       0   665  1684  3  1   96  0  0
 0  0      0 2778656 304800 1522808    0    0     0       0   673  1634  4  1   95  0  0
 0  0      0 2779092 304800 1522676    0    0     0       0   646  1643  3  1   97  0  0
结果说明:
标识含义
r表示运行队列(就是说多少个进程真的分配到CPU。
b表示阻塞的进程。
swpd虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了。
free空闲的物理内存的大小。
buffLinux/Unix系统是用来存储目录里面有什么内容,权限等的缓存。
cachecache直接用来记忆我们打开的文件,给文件做缓冲。
si每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了。
so每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
bi块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备。
bo块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
in每秒CPU的中断次数,包括时间中断
cs每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目。
us用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
sy系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id空闲 CPU时间,一般来说,id + us + sy = 100可认为id是空闲CPU使用率。
a表示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。
st一般不关注,虚拟机占用的时间百分比。
2)top命令
$ top
top - 11:17:14 up  1:01,  2 users,  load average: 0.30, 0.36, 0.33
Tasks: 253 total,   3 running, 250 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.8 us,  1.4 sy,  0.0 ni, 90.7 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem :  5918912 total,  2249532 free,  1582844 used,  2086536 buff/cache
KiB Swap:  6097916 total,  6097916 free,        0 used.  3762164 avail Mem 

  PID USER      PR  NI    VIRT    RES      SHR   S  %CPU %MEM  TIME+ COMMAND                                                                            
 5821 fangche+  20   0  977624  202448   84076 R   11.9        3.4      3:34.69  chrome                                                                             
 5289 fangche+  20   0 1350824 375624 115240  S     7.6       6.3      3:37.34  firefox                                                                            
 3958 fangche+  20   0 1131336 112608  68884   S     6.3       1.9       2:21.88  compiz                                                                             
 2896 root     	   20   0  376900   60204   46216   S     4.6       1.0      1:33.95  Xorg
内容说明:
  1. 统计信息区前五行是系统整体的统计信息。
  • 第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
11:17:14    	当前时间
up 1:01    		系统运行时间,格式为时:分
2 user    		当前登录用户数
load average: 0.30, 0.36, 0.33    系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
  • 第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
total 		进程总数
running 	正在运行的进程数
sleeping 	睡眠的进程数
stopped 	停止的进程数
zombie 		僵尸进程数
  • Cpu(s): 7.8 us, 1.4 sy, 0.0 ni, 90.7 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
7.8% us 	用户空间占用CPU百分比
1.4% sy 	内核空间占用CPU百分比
0.0 ni 		用户进程空间内改变过优先级的进程占用CPU百分比
90.7%id		空闲CPU百分比
0.0wa 		等待输入输出的CPU时间百分比
0.0hi		硬件CPU中断占用百分比,比如,像磁盘,网卡,键盘,时钟等
0.1 si		软中断占用百分比,由当前正在运行的进程所产生的中断
0.0 st		虚拟机占用百分比
  • 最后两行为内存信息。内容如下:
KiB Mem :  
5918912 total,   	物理内存总量
2249532 free,  	使用的物理内存总量
1582844 used,  	空闲内存总量
2086536 buff/cache用作内核缓存的内存量
KiB Swap:  
6097916 total,  	交换区总量
6097916 free,          空闲交换区总量
0 used.  			使用的交换区总量
3762164 avail Mem 可使用的内存
  • 进程信息区统计信息区域的下方显示了各个进程的详细信息。
序号列名含义
aPID进程id
bPPID父进程id
cRUSERReal user name
dUID进程所有者的用户id
eUSER进程所有者的用户名
fGROUP进程所有者的组名
gTTY启动进程的终端名。不是从终端启动的进程则显示为 ?
hPR优先级
iNInice值。负值表示高优先级,正值表示低优先级
jP最后使用的CPU,仅在多CPU环境下有意义
k%CPU上次更新到现在的CPU时间占用百分比
lTIME进程使用的CPU时间总计,单位秒
mTIME+进程使用的CPU时间总计,单位1/100秒
n%MEM进程使用的物理内存百分比
oVIRT进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
pSWAP进程使用的虚拟内存中,被换出的大小,单位kb。
qRES进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
rCODE可执行代码占用的物理内存大小,单位kb
sDATA可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
tSHR共享内存大小,单位kb
unFLT页面错误次数
vnDRT最后一次写入到现在,被修改过的页面数。
wS进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
xCOMMAND命令名/命令行
yWCHAN若该进程在睡眠,则显示睡眠中的系统函数名
zFlags任务标志,参考 sched.h

默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。 更改显示内容通过 f 键可以选择显示的内容。 大写的 R 键可以将当前的排序倒转。

命令使用
top使用格式	top [-] [d] [p] [q] [c] [C] [S] [s]  [n]
参数含义
d指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p通过指定监控进程ID来仅仅监控某个进程的状态。
q该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S指定累计模式
s使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i使top不显示任何闲置或者僵死进程。
c显示整个命令行而不只是显示命令名
实用命令 (直接在top运行的界面输入)
命令含义
h或者? 显示帮助画面,给出一些简短的命令总结说明。
k终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。
i忽略闲置和僵死进程。这是一个开关式命令。
q退出程序。
r重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S切换到累计模式。
s改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。
f或者F 从当前显示中添加或者删除项目。
l切换显示平均负载和启动时间信息。
m切换显示内存信息。
t切换显示进程和CPU状态信息。
c切换显示命令名称和完整命令行。
M根据驻留内存大小进行排序。
P根据CPU使用百分比大小进行排序。
T根据时间/累计时间进行排序。
W将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
常用操作:
  • top :每隔5秒显式所有进程的资源占用情况
  • top -d 2 :每隔2秒显式所有进程的资源占用情况
  • top -c :每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
  • top -p 12345 -p 6789 :每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
  • top -d 2 -c -p 123456 :每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数
  • top -H -p 6372 :查看进程6372的所有线程

2.网络io

命令:nicstat [-hnsz] [-i interface[,]] | [interval [count]]

  • -h 显示帮助信息
  • -n 仅显示非本地接口
  • -s 显示概要信息
  • -z 跳过0值
  • -i interface是网络接口设备名
  • interval 报告输出频率(秒级)
  • count 报告的采样数
示例:
$ nicstat -i wlan0 1 #查看网络设备为wlan0的网络io,间隔为1秒
    Time      Int   rKB/s   wKB/s   rPk/s   wPk/s    rAvs    wAvs %Util    Sat
12:49:17    wlan0    2.25    0.77   14.54    2.53   158.8   310.8    0.00   0.00
12:49:18    wlan0    0.00    0.00    0.00     0.00    0.00      0.00    0.00   0.00
12:49:19    wlan0    0.00    0.00    0.00     0.00    0.00      0.00    0.00   0.00

列名说明:

  • Int 网络接口设备名
  • rKB/s 每秒读取的KB数
  • wKB/s 每秒写入的KB数
  • rPk/s 每秒读取的包数
  • wPk/s 每秒写入的包数
  • rAvs 每次读取的平均字节
  • wAvs 每次写入的平均字节
  • %Util 网络接口使用率
  • Sat 饱和度

3.磁盘io使用率

iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device [...] | ALL ] [ -p [ device [,...] | ALL ] ] [ interval [ count ] ]

示例:
$ iostat -d -k 2	
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               10.08       112.41        75.18    1592458    1065093
sdb                0.09         2.87            0.00      40721          8
scd0              0.00         0.01            0.00         98             0

命令说明:

  • 参数 -d 表示,显示设备(磁盘)使用状态;
  • -k某些使用block为单位的列强制使用Kilobytes为单位;
  • 2表示,数据显示每隔2秒刷新一次。

列名说明:

  • tps: 该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。
  • kB_read/s: 每秒从设备(drive expressed)读取的数据量;
  • kB_wrtn/s: 每秒向设备(drive expressed)写入的数据量;
  • kB_read: 读取的总数据量;
  • kB_wrtn: 写入的总数量数据量;这些单位都为Kilobytes。
示例:指定监控的设备名称为sda,该命令的输出结果和上面命令完全相同。
$ iostat -d sda 2
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda                 9.94       110.20        74.59         1592458    1077897
常见用法:
  • iostat -d -k 1 10 #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
  • iostat -d -m 2 #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
  • iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)
  • iostat -c 1 10 #查看cpu状态
示例:查看设备使用率(%util)、响应时间(await)
$ iostat -d -x -k 1 4
Device:         rrqm/s   wrqm/s     r/s     w/s     rkB/s    wkB/s avgrq-sz avgqu-sz  await r_await w_await  svctm  %util
sda                0.28        2.85       6.69    3.14   110.22    73.80    37.42     0.01       0.77     0.47      1.42      0.24    0.23
sdb                0.00        0.00       0.08    0.00     2.76      0.00      66.82     0.00     20.51   20.54      0.00      5.70    0.05
scd0              0.00        0.00       0.00    0.00     0.01      0.00        7.00     0.00       1.00     1.00      0.00      1.00    0.00

列名说明

  • rrqm/s: 每秒这个设备相关的读取请求有多少被合并了;
  • wrqm/s:每秒这个设备相关的写入请求有多少被合并了。
  • rsec/s: 每秒读取的扇区数;
  • wsec/: 每秒写入的扇区数。
  • rKB/s: 每秒的读取速度.
  • wKB/s: 每秒的写入速度.
  • avgrq-sz 平均请求扇区的大小
  • avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。
  • await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。一般地系统IO响应时间应该低于5ms。这个时间包括了队列时间和服务时间,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短。
  • svctm 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与- await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。
  • %util: 在统计时间内所有处理IO时间,除以总共统计时间。该参数暗示了设备的繁忙程度。
示例:查看cpu状态
$ iostat -c 1 10
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                  7.32       0.01     1.64        0.07       0.00     90.96
示例:iostat配合grep命令使用
$ iostat -d 2 | grep sda
sda               9.56       105.52        74.57    1628178    1150613
sda               0.50         0.00        50.00          0        100

4.多功能监测利器-pidstat

主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存、设备IO、任务切换、线程等。pidstat首次运行时显示系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

1)用法:

pidstat [ -C comm ] [ -d ] [ -h ] [ -I ] [ -l ] [ -p { pid [,...] | SELF | ALL } ] [ -r ] [ -s ] [ -t ] [ -T { TASK | CHILD | ALL } ] [ -u ] [ -V ] [ -w ] [ interval [ count ] ]

2)选项:
  • -C comm #只显示那些包含字符串(可是正则表达式)comm的命令的名字
  • -d #显示I/O统计信息(须内核2.6.20及以后)
  • PID #进程号
  • kB_rd/s #每秒此进程从磁盘读取的千字节数
  • kB_wr/s #此进程已经或者将要写入磁盘的每秒千字节数
  • kB_ccwr/s #由任务取消的写入磁盘的千字节数
  • Command #命令的名字
  • -h #显示所有的活动的任务
  • -I #在SMP环境,指出任务的CPU使用(等同于选项-u)应该被除于cpu的总数
  • -l #显示进程的命令名和它的参数
  • -p { pid [,...] | SELF | ALL } #指定线程显示其报告
  • -r #显示分页错误的内存利用率
3)输出内容:
  • minflt/s: 每秒次缺页错误次数(minor page faults),次缺页错误次数意即虚拟内存地址映射成物 理内存地址产生的page fault次数
  • majflt/s: 每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的page在swap中,这样的page fault为major page fault,一般在内存使用紧张时产生
  • VSZ: 该进程使用的虚拟内存(以kB为单位)
  • RSS: 该进程使用的物理内存(以kB为单位)
  • %MEM: 该进程使用内存的百分比
  • Command: 拉起进程对应的命令
示例1. cpu监控
pidstat -p 1187 1 3 -u -t

参数说明:

  • -p用于指定进程 id,
  • -u表示对cpu使用率的监控,
  • 参数1 3表示每秒钟采样一次,一共采样三次,
  • -t参数将监控对象细化到线程级别。
示例2 i/o监控
pidstat -p 1123 -d -t 1 3

参数说明:

  • -d表示监控对象为磁盘io,1 3表示每秒采样一次,一共采样三次
示例3 内存监控
pidstat -r -p 2234 1 4

参数说明:

  • -r表示对内存进行监控,1 4表示每秒钟采样一次,一共采样四次

5.jvm监测

开启jmx远程连接:

在tomcat中,配置以下参数

-Djava.rmi.server.hostname=192.168.199.178 \
-Dcom.sun.management.jmxremote \
          -Dcom.sun.management.jmxremote.port=12245 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false

运行后,可以使用jvisualvm进行远程连接,使用界面观察jvm运行情况:

输出gc日志:
-verbose:gc \
-XX:+PrintGCDetails \				-- 垃圾收集器相关的统计数据
-XX:+PrintGCDateStamps \			-- 打印垃圾收集所用时间
-XX:+PrintHeapAtGC \				-- 垃圾收集前后堆内存信息
-Xloggc:<filename> \				-- gc日志位置及文件名
-XX:+PrintGCApplicationStoppedTime \ -- 应用程序的阻塞时间
-XX:+PrintGCApplicationConcurrentTime \ --应用程序是否在运行,运行了多少时间 
-XX:+PrintCommandLineFlags		-- 输出堆的初始值及最大值,输出格式:-XX:InitalHeapSize=<n>,
-XX:MaxHeapSize=<m>,以字节为单位.

转载于:https://my.oschina.net/funcy/blog/1929286

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值