# Linux-性能常用命令



### 按照CPU或者内存用量来筛选进程

```shell
ps -aux --sort -pcpu                 # 根据 cpu 用量筛选
ps -aux --sort -pmem                 # 根据 mem 用量筛选
ps -aux | sort -rnk 3 | head -20     # 找出当前系统CPU使用量较高的20个进程
ps -aux | sort -rnk 4| head -20      # 找出当前系统MEM使用量较高的20个进程
```

### vmstat 逐行输出虚拟内存状态统计信息

```shell
[root@localhost ~]# vmstat 
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0  40408 158164      0 664672    0    0     7    26   56  109  3  3 94  0  0
```

#### 参数解释：

* r: 运行队列中进程数量
* b: 等待IO的进程数量
* swpd：使用的虚拟内存
* free：可用内存
* buff：用作缓冲的内存大小
* cache：用作缓存的内存大小
* us：用户进程执行时间(user time)
* sy：系统进程执行时间(system time
* id：空闲时间(包括IO等待时间)，中央处理器的空闲时间
* wa：等待IO时间

### mpstat 实时监控CPU性能

```shell
mpstat -P ALL 1 2         # 间隔1s打印报告，共打印2个
-P ALL：监控所有CPU
1：间隔时间1s
2：打印次数2次

[root@localhost ~]# mpstat -P ALL 1 1
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain)     2021年02月26日  _x86_64_        (1 CPU)
18时10分34秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
18时10分35秒  all    3.03    0.00    7.07    0.00    0.00    0.00    0.00    0.00    0.00   89.90
18时10分35秒    0    3.03    0.00    7.07    0.00    0.00    0.00    0.00    0.00    0.00   89.90

平均时间:  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
平均时间:  all    3.03    0.00    7.07    0.00    0.00    0.00    0.00    0.00    0.00   89.90
平均时间:    0    3.03    0.00    7.07    0.00    0.00    0.00    0.00    0.00    0.00   89.90

%usr：间隔时间段内，用户态的CPU时间（%），不包含 nice值为负进程
%nice：nice值为负进程的CPU时间（%）
%sys：核心时间（%）
%iowait：硬盘IO等待时间（%）
%irq：硬中断时间（%）
%soft：软中断时间（%）
%steal：虚拟机管理器在服务另一个虚拟处理器时虚拟CPU处在非自愿等待下花费时间的百分比
%guest：运行虚拟处理器时CPU花费时间的百分比
%idle：CPU的空闲时间（%）
```

### pidstat 监控全部或指定进程的资源占用情况

```shell
[root@localhost ~]# pidstat -p 1 1      # -p 指定进程号，间隔1s打印pid为1的进程
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain)     2021年02月26日  _x86_64_        (1 CPU)
18时09分44秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
18时09分45秒     0         1    0.00    0.00    0.00    0.00     0  systemd
18时09分46秒     0         1    0.00    0.00    0.00    0.00     0  systemd

PID：进程ID
%usr：进程在用户空间占用cpu的百分比
%system：进程在内核空间占用cpu的百分比
%guest：进程在虚拟机占用cpu的百分比
%CPU：进程占用cpu的百分比，各个CPU上的使用量的总和
CPU：处理进程的cpu编号
Command：当前进程对应的命令
```

### iostat 用于显示CPU和块设备（磁盘I/O）相关的统计信息

```shell
[root@localhost ~]# iostat 1
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain)     2021年02月26日  _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.51    0.00    3.09    0.00    0.00   94.40

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.45         6.60        26.20    2177621    8649462
scd0              0.00         0.00         0.00       1028          0
dm-0              1.50         6.55        26.06    2162345    8603590
dm-1              0.04         0.02         0.13       6700      43764

avg-cpu：总体cpu使用情况统计信息
linux各种设备文件在/dev目录下可以看到

- tps：每秒进程向磁盘设备下发的IO读、写请求数量
- kB_read/s：每秒从驱动器读入的数据量
- kB_wrtn/s：每秒从驱动器写入的数据量
- kB read：读入数据总量
- kB wrtn：写入数据总量
```

### sar 系统活动情况报告

> Linux系统性能分析工具。可以用来分析磁盘I/O、CPU效率、内存使用、网络性能等

```shell
[root@localhost ~]# sar -n DEV 1          # 检查网络流量的工作负载，可用来检查网络流量是否已经达到限额。
18时13分37秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
18时13分38秒 br-41fb800af88a      0.00      0.00      0.00      0.00      0.00      0.00      0.00
18时13分38秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
18时13分38秒     ens33     35.00     44.00      2.83     11.02      0.00      0.00      0.00
18时13分38秒   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
```

```shell
[root@localhost ~]# sar -n TCP 1          # 显示TCP连接情况，可用来描述系统负载
18时14分21秒  active/s passive/s    iseg/s    oseg/s
18时14分22秒      0.00      0.00     14.14     22.22
18时14分23秒      0.00      0.00     14.00     22.00

active/s：主动连接数，本地每秒创建的TCP连接数
passive/s：被动连接数，远程每秒创建的TCP连接数
retrans/s：每秒TCP重传次数
```
