pidstat 可以得到进程的用户 CPU 使用率、系统 CPU 使用率、以及自愿上下文切换和非自愿上下文切换情况

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[root@centos7 ~]# pidstat -w  5
Linux 3.10.0-514.26.2.el7.x86_64 (centos7)  05/01/2019  _x86_64_    (1 CPU)

04:24:58 PM   UID       PID   cswch/s nvcswch/s  Command
04:25:03 PM     0         3      1.40      0.00  ksoftirqd/0
04:25:03 PM     0         9     40.08      0.00  rcu_sched
04:25:03 PM     0        10      0.20      0.00  watchdog/0
04:25:03 PM     0       251      1.80      0.00  kworker/0:1H
04:25:03 PM     0       262      1.20      0.00  jbd2/vda1-8
04:25:03 PM     0       331      1.40      0.40  systemd-journal

[root@centos7 ~]# pidstat -d -p 5152 1 3  
Linux 3.10.0-514.26.2.el7.x86_64 (centos7)  05/01/2019  _x86_64_    (1 CPU)

04:25:45 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
04:25:46 PM  1001      5152      0.00      0.00      0.00  mysqld
04:25:47 PM  1001      5152      0.00      0.00      0.00  mysqld

# -u表示CPU指标
[root@centos7 ~]# pidstat -u 5 2
Linux 3.10.0-514.26.2.el7.x86_64 (centos7)  05/01/2019  _x86_64_    (1 CPU)

04:26:37 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
04:26:42 PM  1002      3637    0.22    0.00    0.00    0.22     0  nginx
04:26:42 PM  1002      3639    0.66    0.22    0.00    0.88     0  nginx
04:26:42 PM  1001      5152   13.27    1.55    0.00   14.82     0  mysqld
04:26:42 PM  1002      5477   18.36    0.66    0.00   19.03     0  php-fpm
04:26:42 PM  1002      5566   17.26    0.88    0.00   18.14     0  php-fpm
04:26:42 PM  1002      5567   18.36    0.44    0.00   18.81     0  php-fpm

pidstat -wt 1 # -wt 参数表示输出线程的上下文切换指标
08:14:05      UID      TGID       TID   cswch/s nvcswch/s  Command
...
08:14:05        0     10551         -      6.00      0.00  sysbench
08:14:05        0         -     10551      6.00      0.00  |__sysbench
08:14:05        0         -     10552  18911.00 103740.00  |__sysbench
08:14:05        0         -     10553  18915.00 100955.00  |__sysbench


pidstat -r # 内存

mpstat

1
2
3
4
5
6
7
8
# 显示所有CPU的指标,并在间隔5秒输出一组数据
[root@101.201.74.174/10.25.90.142 2019-05-02 08:35:09 ~]# mpstat -P ALL 5
Linux 2.6.32-431.23.3.el6.x86_64 (iZ258w7loxyZ)     2019年05月02日     _x86_64_    (2 CPU)

08时36分45秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
08时36分50秒  all   12.70    0.00   19.74   41.84    0.00    4.38    0.00    0.00   21.34
08时36分50秒    0   18.16    0.00   22.20   44.17    0.22    9.19    0.00    0.00    6.05
08时36分50秒    1    7.72    0.00   17.48   39.84    0.00    0.00    0.00    0.00   34.96

stress

1
2
3
4
5
6
# 模拟一个CPU 100%的场景
stress --cpu 1 --timeout 
# I/O 密集型进程
stress -i 1 --timeout 600
# 模拟大量进程的场景
stress -c 8 --timeout 600

perf top perf record -g perf report

execsnoop 短时进程

vmstat 可以得到上下文切换次数、中断次数、运行状态和”不可中断状态”的进程数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[root@centos7 ~]# 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
 3  0      0 111588  43772 352056    0    0     2     5    1    0  0  0 99  0  0
 0  0      0 111572  43772 352064    0    0     0     0  169  377  1  0 99  0  0
 0  0      0 111572  43772 352064    0    0     0     0  159  362  0  0 100  0  0

buff 和 cache 就是我们前面看到的 Buffers 和 Cache,单位是 KB。

bi 和 bo 则分别表示块设备读取和写入的大小,单位为块/秒。因为 Linux 中块的大小是 1KB,所以这个单位也就等价于 KB/s。 

cs(context switch)是每秒上下文切换的次数。

in(interrupt)则是每秒中断的次数。

r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待CPU的进程数。

b(Blocked)则是处于不可中断睡眠状态的进程数。

strace -p pid

sar 是一个系统活动报告工具,既可以实时查看系统的当前活动,又可以配置保存和报告历史统计数据

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[root@centos7 ~]# sar -n DEV 1
Linux 3.10.0-514.26.2.el7.x86_64 (centos7)  05/01/2019  _x86_64_    (1 CPU)

04:06:03 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:06:04 PM      eth0   4548.48   2275.76    239.89    129.66      0.00      0.00      0.00
04:06:04 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:06:04 PM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

第一列:表示报告的时间。

第二列:IFACE 表示网卡。

第三、四列:rxpck/s 和 txpck/s 分别表示每秒接收、发送的网络帧数,也就是 PPS。

第五、六列:rxkB/s 和 txkB/s 分别表示每秒接收、发送的千字节数,也就是 BPS。

dstat 1 10

1
2
3
4
5
6
7
[root@centos7 ~]# dstat 1 10
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw
  0   0  99   0   0   0|2294B 4601B|   0     0 |   0     0 | 136   344
  1   0  99   0   0   0|   0     0 | 132B  158B|   0     0 | 167   364 ^C
网络接受情况

hping3 是一个可以构造 TCP/IP 协议数据包的工具,可以对系统进行安全审计、防火墙测试等。

1
2
3
4
5
6
hping3 -S -p 80 -i u100 192.168.0.30 
# -S参数表示设置TCP协议的SYN(同步序列号)
# -p表示目的端口为80
# -i u100表示每隔100微秒发送一个网络帧

会造成shell卡顿

tcpdump 是一个常用的网络抓包工具,常用来分析各种网络问题。

1
tcpdump -i eth0 -n tcp port 80

清理内存

1
2
3
# 清理文件页、目录项、Inodes等各种缓存
# 写入 3 表示清理文件页、目录项、Inodes等各种缓存。
$ echo 3 > /proc/sys/vm/drop_caches

buffer cache 区别

1
2
读文件时数据会缓存到 Cache 中,而读磁盘时数据会缓存到 Buffer 中。
Buffer是对磁盘数据的缓存,而Cache是文件数据的缓存,它们既会用在读请求中,也会用在写请求中。