CPU
user
(通常缩写为us
),代表用户态CPU时间。不包括下面的nice
时间,但包括了guest
时间
nice
(通常缩写为ni
),代表低优先级用户态CPU时间,也就是进程的nice
值被调整为1-19之间时的CPU时间。nice
可取值范围是-20 到19,数值越大,优先级反而越低
system
(通常缩写为 sys
),代表内核态CPU时间
idle
(通常缩写为 id
),代表空闲时间。它不包括等待I/O 的时间(iowait
)
iowait
(通常缩写为 wa
),代表等待I/O的CPU时间
irq
(通常缩写为 hi
),代表处理硬中断的CPU时间
softirq
(通常缩写为 si
),代表处理软中断的CPU时间
steal
(通常缩写为st
),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的CPU时间
guest
(通常缩写为guest
),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的CPU时间
guest_nice
(通常缩写为gnice
),代表以低优先级运行虚拟机的时间
CPU使用率 mpstat CPU使用率实时统计
1 2 3 4 5 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月16日 _x86_64_ (4 CPU) 15时36分16秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 15时36分17秒 all 3.34 0.00 1.80 0.00 0.00 0.00 0.00 0.00 0.00 94.86 15时36分18秒 all 3.34 0.00 1.80 0.00 0.00 0.26 0.00 0.00 0.00 94.6
pidstat 指定进程的CPU使用率变化
1 2 3 4 5 6 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月16日 _x86_64_ (4 CPU) 15时42分37秒 UID PID %usr %system %guest %CPU CPU Command 15时42分38秒 10006 2245 1.00 0.00 0.00 1.00 1 java 15时42分39秒 10006 2245 1.00 1.00 0.00 2.00 1 java 15时42分40秒 10006 2245 3.00 0.00 0.00 3.00 1 java
各进程的CPU使用率变化
1 2 3 4 5 6 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月16日 _x86_64_ (4 CPU) 15时45分42秒 UID PID %usr %system %guest %CPU CPU Command 15时45分43秒 10006 2245 1.98 0.99 0.00 2.97 1 java 15时45分43秒 10006 6742 0.99 0.99 0.00 1.98 3 java 15时45分43秒 10006 9982 0.99 0.00 0.00 0.99 3 java
dstat CPU/磁盘IO/网络数据实时监控
1 2 3 4 5 ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai hiq siq| read writ| recv send| in out | int csw 3 1 95 0 0 0| 0 84k| 53k 59k| 0 0 |9017 12k 3 2 94 0 0 0| 0 0 | 54k 43k| 0 0 |9468 13k 5 2 93 0 0 0| 0 0 | 50k 60k| 0 0 |9294 12k
CPU上下文切换 pidstat 各进程CPU上下文切换统计
1 2 3 4 平均时间: UID PID cswch/s nvcswch/s Command 平均时间: 10006 13621 5.33 0.00 nginx 平均时间: 10006 13622 8.44 0.00 nginx 平均时间: 10006 13623 11.54 0.00 nginx
cswch
表示每秒自愿上下文切换(voluntary context switches)的次数
nvcswch
表示每秒非自愿上下文切换(non voluntary context switches)的次数
指定进程CPU上下文切换统计
pidstat
默认显示进程的指标数据,加上-t
参数后,才会输出线程的指标。
1 2 3 4 5 6 7 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月16日 _x86_64_ (4 CPU) 16时05分46秒 UID TGID TID cswch/s nvcswch/s Command 16时05分47秒 10006 2245 - 0.00 0.00 java 16时05分47秒 10006 - 2245 0.00 0.00 |__java 16时05分47秒 10006 - 2255 1.00 0.00 |__java 16时05分47秒 10006 - 2263 20.00 0.00 |__java
vmstat CPU上下文切换计数
1 2 3 4 5 procs -----------memory----------- --swap----- --io----- --system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 176612 114152 5818372 0 0 0 4 8561 11181 2 2 95 0 0 0 0 0 176304 114152 5818372 0 0 0 4 8550 11118 2 2 96 0 0 0 0 0 176792 114152 5818396 0 0 0 0 8767 11367 3 1 96 0 0
cs
(context switch)是每秒上下文切换的次数
in
(interrupt)则是每秒中断的次数
r
(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程 数
b
(Blocked)则是处于不可中断睡眠状态的进程数
CPU中断 softirqs CPU软中断计数
1 watch -n 1 'cat /proc/softirqs'
1 2 3 4 5 6 7 8 9 10 11 CPU0 CPU1 CPU2 CPU3 HI: 9 4 6 3 TIMER: 2214338633 4121419965 2762914647 2138523262 NET_TX: 861743 808676 915818 651005 NET_RX: 3037620031 2545651729 3057664107 1391391372 BLOCK: 0 0 0 0 BLOCK_IOPOLL: 0 0 0 0 TASKLET: 313223 305907 313136 282939 SCHED: 3189449832 2466757727 3115282943 2507068099 HRTIMER: 0 0 0 0 RCU: 2053967698 2003167979 2116164634 1891079850
TIMER
: 定时产生的软中断
NET_RX
: 网络接收产生的软中断
NET_TX
: 网络发送产生的软中断
SCHED
: 内核调度产生的软中断
RCU
: RCU产生的软中断
CPU监控采样统计 perf arthas Arthas 用户文档
指定JVM进程生成CPU热点火焰图
启动arthas
1 2 wget https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar
启动profiler
1 2 $ profiler start Started [cpu] profiling
获取已采集的sample的数量
1 2 $ profiler getSamples 23
查看profiler状态
1 2 $ profiler status [cpu] profiling is running for 4 seconds
生成svg格式火焰图
1 2 3 $ profiler stop profiler output file: /tmp/demo/arthas-output/20191125-135546.svg OK
正确退出
async-profiler async-profiler
指定JVM进程生成CPU热点火焰图
1 ./profiler.sh -d 30 -f ./flamegraph.svg 17616
内存
VIRT
是进程虚拟内存的大小,只要是进程申请过的内存,即便还没有真正分配物理内存,也会计算在内
RES
是常驻内存的大小,也就是进程实际使用的物理内存大小但不包括Swap和共享内存
SHR
是共享内存的大小,比如与其他进程共同使用的共享内存、加载的动态链接库以及程序的代码段等
%MEM
是进程使用物理内存占系统总内存的百分比
内存占用统计 free 内存占用统计
1 2 3 total used free shared buff/cache available Mem: 15G 9.7G 156M 2.4M 5.7G 5.4G Swap: 0B 0B 0B
total
: 总内存大小
used
: 已使用内存的大小,包含了共享内存
free
: 未使用内存的大小
shared
: 共享内存的大小
buff/cache
: 缓存和缓冲区的大小
available
: 新进程可用内存的大小
vmstat 内存占用实时统计
1 2 3 4 5 procs -----------memory----------- --swap----- --io----- --system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 176612 114152 5818372 0 0 0 4 8561 11181 2 2 95 0 0 0 0 0 176304 114152 5818372 0 0 0 4 8550 11118 2 2 96 0 0 0 0 0 176792 114152 5818396 0 0 0 0 8767 11367 3 1 96 0 0
ps 各进程按物理内存排序
1 ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' --sort -rsz
1 2 3 4 PID COMMAND COMMAND %CPU RSZ VSZ STIME USER UID 6742 java java -jar -server -Xms1024M 2.1 1026192 6085356 8月13 webapp 10006 9982 java java -jar -server -Xmx1024M 0.8 951572 5192560 8月10 webapp 10006 13289 java java -jar -server -Xms1024M 0.3 747960 4994932 8月05 webapp 10006
文件缓存 pcstat 文件缓存命中率
安装脚本
1 2 3 4 5 6 7 #!/bin/bash if [ $(uname -m) == "x86_64" ] ; then curl -L -o pcstat https://github.com/tobert/pcstat/raw/2014-05-02-01/pcstat.x86_64 else curl -L -o pcstat https://github.com/tobert/pcstat/raw/2014-05-02-01/pcstat.x86_32 fi chmod 755 pcstat
1 2 3 4 5 6 7 8 |---------------------------------+----------------+------------+-----------+---------| | Name | Size | Pages | Cached | Percent | |---------------------------------+----------------+------------+-----------+---------| | ./logs/member-wx.20200814.log | 373896477 | 91284 | 15881 | 017.397 | | ./logs/member-wx.20200815.log | 317053634 | 77406 | 74450 | 096.181 | | ./logs/member-wx.20200816.log | 293448138 | 71643 | 71157 | 099.322 | | ./logs/member-wx.log | 89022207 | 21734 | 21734 | 100.000 | |---------------------------------+----------------+------------+-----------+---------|
磁盘IO 磁盘IO读写统计 pidstat 各进程的IO读写
1 2 3 4 5 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月16日 _x86_64_ (4 CPU) 16时22分28秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command 16时22分29秒 10006 2245 0.00 7.92 0.00 java 16时22分29秒 10006 13621 0.00 3.96 0.00 nginx
iostat 各磁盘IO实时读写统计
1 2 3 4 5 6 7 8 9 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月17日 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 11.31 0.00 1.99 0.05 0.00 86.65 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.92 0.06 1.78 4.00 14.95 20.58 0.01 4.95 16.35 4.56 0.46 0.08 vdb 0.00 0.05 0.43 0.95 27.82 40.99 99.55 0.03 23.05 24.75 22.28 1.68 0.23 dm-0 0.00 0.00 0.43 0.96 27.82 40.99 98.82 0.03 24.16 27.92 22.48 1.67 0.23
iotop 各线程IO读写排序
1 2 3 4 5 6 Total DISK READ : 0.00 B/s | Total DISK WRITE : 24.89 K/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND 10821 be/4 webapp 0.00 B/s 3.56 K/s 0.00 % 0.00 % java 10832 be/4 webapp 0.00 B/s 7.11 K/s 0.00 % 0.00 % java 10833 be/4 webapp 0.00 B/s 3.56 K/s 0.00 % 0.00 % java
各进程IO读写排序
1 2 3 4 5 6 7 FTotal DISK READ : 0.00 B/s | Total DISK WRITE : 25.29 K/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s PID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND 10758 be/4 webapp 0.00 B/s 14.45 K/s 0.00 % 0.00 % java 19976 be/4 webapp 0.00 B/s 3.61 K/s 0.00 % 0.00 % java 32501 be/4 webapp 0.00 B/s 3.61 K/s 0.00 % 0.00 % ./service 13623 be/4 webapp 0.00 B/s 3.61 K/s 0.00 % 0.00 % nginx: worker process
进程打开的文件 lsof 进程打开的文件
1 2 3 4 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 10893 webapp rtd DIR 253,1 4096 2 / java 10893 webapp txt REG 252,0 7734 201451573 /opt/jdk1.8.0_131/bin/java java 10893 webapp mem REG 252,0 256766 134407539 /opt/jdk1.8.0_131/jre/lib/amd64/libsunec.so
网络 网络数据读写监控 sar 网络数据包实时发送情况
1 2 3 4 5 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月17日 _x86_64_ (4 CPU) 15时17分39秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 15时17分40秒 eth0 655.00 408.00 145.84 83.68 0.00 0.00 0.00 15时17分40秒 lo 79.00 79.00 18.35 18.35 0.00 0.00 0.00
rxpck/s
,txpck/s
: 每秒接收发送的网络帧数
rxKB/s
,txKB/s
: 每秒接收发送的千字节数
iftop 按IP网络流速排行
按IP:端口号网络流速排行
TX
:发送
RX
:接收
TOTAL
:总和
cum
:运行iftop到目前时间的总流量
peak
:流量峰值
rates
:分别表示过去2s,10s,40s的平均流速
nethogs 按进程网络流速排行
1 2 3 4 5 PID USER PROGRAM DEV SENT RECEIVED 17664 webapp ./tasty eth0 3.395 6.446 KB/sec 10893 webapp java eth0 3.913 6.036 KB/sec 32501 webapp ./service eth0 2.284 5.843 KB/sec TOTAL 33.957 40.722 KB/sec
socket连接 netstat TCP连接展示
1 2 3 4 5 Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 871/sshd tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 13541/nginx: master tcp 0 52 172.x.x.x:22 220.x.x.x:21889 ESTABLISHED 22577/sshd: root@pt
TCP连接状态统计
1 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
1 2 3 4 SYN_RECV 1 CLOSE_WAIT 39 ESTABLISHED 680 TIME_WAIT 261
ss TCP连接状态统计
1 2 3 4 5 6 7 8 9 10 Total: 1015 (kernel 0) TCP: 914 (estab 595, closed 222, orphaned 0, synrecv 0, timewait 210/0), ports 0 Transport Total IP IPv6 * 0 - - RAW 0 0 0 UDP 14 13 1 TCP 692 644 48 INET 706 657 49 FRAG 0 0 0
监听端口展示
1 2 3 4 5 6 7 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:111 *:* LISTEN 0 128 *:80 *:* LISTEN 0 128 *:22 *:* LISTEN 0 128 *:443 *:* LISTEN 0 128 :::111 :::* LISTEN 0 80 :::3316 :::*
网络异常 sar 网络异常包实时监控
1 2 3 4 5 6 Linux 3.10.0-693.2.2.el7.x86_64 (lingxi-test) 2020年08月17日 _x86_64_ (4 CPU) 21时11分09秒 atmptf/s estres/s retrans/s isegerr/s orsts/s 21时11分10秒 2.00 0.00 0.00 0.00 2.00 21时11分11秒 1.00 0.00 1.00 0.00 1.00 21时11分12秒 1.00 8.00 0.00 0.00 9.00
atmptf/s
: 每秒TCP连接SYN-SENT
/SYN-RCVD
转换到CLOSED
状态,以及SYN-RCVD
转换到LISTEN
状态数
estres/s
: 每秒TCP连接从ESTABLISHED
/CLOSE-WAIT
状态转换到CLOSED
状态数
retrans/s
: 每秒重传包数
isegerr/s
: 每秒接收错误段数(例如错误的TCP校验和)
orsts/s
: 每秒发送RST包数
netstat 网络统计
常用于统计网络丢包数量、丢包原因等数据。