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使用率实时统计
mpstat 1
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使用率变化
pidstat -p 2245 1
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使用率变化
pidstat -u 1
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/网络数据实时监控
dstat 1
----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上下文切换统计
pidstat -w 1
平均时间: 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
参数后,才会输出线程的指标。
pidstat -w -p 2245 -t 1
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上下文切换计数
vmstat 1
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软中断计数
watch -n 1 'cat /proc/softirqs'
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
指定JVM进程生成CPU热点火焰图
- 启动arthas
wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
- 启动profiler
$ profiler start
Started [cpu] profiling
- 获取已采集的sample的数量
$ profiler getSamples
23
- 查看profiler状态
$ profiler status
[cpu] profiling is running for 4 seconds
- 生成svg格式火焰图
$ profiler stop
profiler output file: /tmp/demo/arthas-output/20191125-135546.svg
OK
- 正确退出
$ shutdown
async-profiler
指定JVM进程生成CPU热点火焰图
./profiler.sh -d 30 -f ./flamegraph.svg 17616
-d
: 分析持续时间,单位秒
内存
VIRT
是进程虚拟内存的大小,只要是进程申请过的内存,即便还没有真正分配物理内存,也会计算在内RES
是常驻内存的大小,也就是进程实际使用的物理内存大小但不包括Swap和共享内存SHR
是共享内存的大小,比如与其他进程共同使用的共享内存、加载的动态链接库以及程序的代码段等%MEM
是进程使用物理内存占系统总内存的百分比
内存占用统计
free
内存占用统计
free -h
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
内存占用实时统计
vmstat 1
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
各进程按物理内存排序
ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' --sort -rsz
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
文件缓存命中率
安装脚本
#!/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
./pcstat ./logs/*
|---------------------------------+----------------+------------+-----------+---------|
| 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读写
pidstat -d 1
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实时读写统计
iostat -x 1
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读写排序
iotop -o
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读写排序
iotop -P -o
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
进程打开的文件
lsof -p 10893
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
网络数据包实时发送情况
sar -n DEV 1
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网络流速排行
iftop -B
按IP:端口号网络流速排行
iftop -B -P
TX
:发送RX
:接收TOTAL
:总和cum
:运行iftop到目前时间的总流量peak
:流量峰值rates
:分别表示过去2s,10s,40s的平均流速
nethogs
按进程网络流速排行
nethogs
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连接展示
netstat -natp
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连接状态统计
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
SYN_RECV 1
CLOSE_WAIT 39
ESTABLISHED 680
TIME_WAIT 261
ss
TCP连接状态统计
ss -s
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
监听端口展示
ss -lnt
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
网络异常包实时监控
sar -n ETCP 1
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
网络统计
常用于统计网络丢包数量、丢包原因等数据。
netstat -s