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 st0 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 | 空闲的物理内存的大小。 |
buff | Linux/Unix系统是用来存储目录里面有什么内容,权限等的缓存。 |
cache | cache直接用来记忆我们打开的文件,给文件做缓冲。 |
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命令
$ toptop - 11:17:14 up 1:01, 2 users, load average: 0.30, 0.36, 0.33Tasks: 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 stKiB Mem : 5918912 total, 2249532 free, 1582844 used, 2086536 buff/cacheKiB 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
内容说明:
- 统计信息区前五行是系统整体的统计信息。
- 第一行是任务队列信息,同 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 可使用的内存
- 进程信息区统计信息区域的下方显示了各个进程的详细信息。
序号 | 列名 | 含义 |
---|---|---|
a | PID | 进程id |
b | PPID | 父进程id |
c | RUSER | Real user name |
d | UID | 进程所有者的用户id |
e | USER | 进程所有者的用户名 |
f | GROUP | 进程所有者的组名 |
g | TTY | 启动进程的终端名。不是从终端启动的进程则显示为 ? |
h | PR | 优先级 |
i | NI | nice值。负值表示高优先级,正值表示低优先级 |
j | P | 最后使用的CPU,仅在多CPU环境下有意义 |
k | %CPU | 上次更新到现在的CPU时间占用百分比 |
l | TIME | 进程使用的CPU时间总计,单位秒 |
m | TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
n | %MEM | 进程使用的物理内存百分比 |
o | VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
p | SWAP | 进程使用的虚拟内存中,被换出的大小,单位kb。 |
q | RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
r | CODE | 可执行代码占用的物理内存大小,单位kb |
s | DATA | 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb |
t | SHR | 共享内存大小,单位kb |
u | nFLT | 页面错误次数 |
v | nDRT | 最后一次写入到现在,被修改过的页面数。 |
w | S | 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) |
x | COMMAND | 命令名/命令行 |
y | WCHAN | 若该进程在睡眠,则显示睡眠中的系统函数名 |
z | Flags | 任务标志,参考 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 Sat12:49:17 wlan0 2.25 0.77 14.54 2.53 158.8 310.8 0.00 0.0012:49:18 wlan0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0012: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_wrtnsda 10.08 112.41 75.18 1592458 1065093sdb 0.09 2.87 0.00 40721 8scd0 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 2Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtnsda 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 4Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %utilsda 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.23sdb 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.05scd0 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 10avg-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 sdasda 9.56 105.52 74.57 1628178 1150613sda 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:\ -- gc日志位置及文件名-XX:+PrintGCApplicationStoppedTime \ -- 应用程序的阻塞时间-XX:+PrintGCApplicationConcurrentTime \ --应用程序是否在运行,运行了多少时间 -XX:+PrintCommandLineFlags -- 输出堆的初始值及最大值,输出格式:-XX:InitalHeapSize= ,-XX:MaxHeapSize= ,以字节为单位.