linux工作常用命令

370 阅读14分钟

引言:更多相关请看 JVM+GC解析系列
面试问题:生产环境服务器变慢,诊断思路和性能评估谈谈?可以通过下面几个命令查看解决。

整机:top

性能指标。uptime,系统性能命令的精简版。 命令:top
效果:

top - 18:56:36 up 12:22,  4 users,  load average: 0.01, 0.06, 0.06
Tasks: 267 total,   1 running, 266 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2027952 total,   176992 free,   814960 used,  1036000 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1024676 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND       
 10432 root      20   0  162128   2428   1600 R   0.7  0.1   0:04.02 top           
 11212 root      20   0  162152   2420   1588 S   0.7  0.1   0:03.14 top           
    17 root      rt   0       0      0      0 S   0.3  0.0   0:01.16 watchdog/2    
   834 root      20   0  324680   6908   5392 S   0.3  0.3   1:13.84 vmtoolsd      
     1 root      20   0  193912   7064   4204 S   0.0  0.3   0:06.64 systemd       
     ...

命令:uptime
效果:

18:58:58 up 12:24,  4 users,  load average: 0.00, 0.04, 0.05

任务队列参数

首先第一行是任务队列参数:

top - 18:56:36 up 12:22,  4 users,  load average: 0.01, 0.06, 0.06

其显示跟uptime命令一样,代表的意思分别是当前时间,系统开机到现在的运行时间(格式为日,时:分),当前登录用户数,系统负载(三个数值分别为1分钟、5分钟、15分钟前到现在的平均值)。
注意:如果下面的结果值大于60,代表系统负载数过大

(系统负载的三个值相加) / 3 * 100 

系统负载:是任务队列的平均长度,一般包括cpu正在运行的进程数或线程和等待cpu的进程或线程数。Linux的负载高,主要是由于CPU使用、内存使用、IO消耗三部分构成。任意一项使用过多,都将导致服务器负载的急剧攀升。

进程信息

第二行为进程信息:

Tasks: 267 total,   1 running, 266 sleeping,   0 stopped,   0 zombie

分别表示:进程总数,正在运行的进程数,睡眠的进程数,停止的进程数,僵尸进程数。
什么是僵尸进程:简单来说就是完成了生命周期但却依然留在进程表中的那些进程,称之为 “僵尸进程”。

CPU信息

第三行为CPU信息:

%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

第三行cpu使用情况分别表示:用户空间占用CPU百分比,内核空间占用CPU百分比,用户进程空间内改变过优先级的进程占用CPU百分比,空闲CPU百分比,等待输入输出的CPU时间百分比,硬件中断占cpu比例,软件中断占cpu比例,虚拟系统等待得到真正的cpu资源时间比例(如果这个值为50,表明你vm需要cpu时有一半时间在等待)。

内存情况

第四行为内存情况:

KiB Mem :  2027952 total,   176992 free,   814960 used,  1036000 buff/cache

第四行分别表示:物理内存总量,空闲内存总量,使用的物理内存总量,用作内核缓存的内存量。

交换区情况

第五行为交换区情况:

KiB Swap:  2097148 total,  2097148 free,        0 used.  1024676 avail Mem 

第五行分别表示:交换区总量,空闲交换区总量,使用的交换区总量,缓冲的交换区总量(内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入)。
交换区:交换区是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合。简单点说,当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问swap上存储的内容时,再将swap上的数据加载到内存中,这就是我们常说的swap out和swap in。

进程信息

第七行开始的如下参数:

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND       
 10432 root      20   0  162128   2428   1600 R   0.7  0.1   0:04.02 top           
 11212 root      20   0  162152   2420   1588 S   0.7  0.1   0:03.14 top 

默认情况下仅显示比较重要的PID进程id、USER进程所有者的用户名、PR优先级、NI-nice值、VIRT进程使用的虚拟内存总量、RES进程使用的且未被换出的物理内存大小、SHR共享内存大小、S进程状态、%CPU上次更新到现在的CPU时间占用百分比、%MEM进程使用的物理内存百分比、TIME+ 进程使用的CPU时间总计、COMMAND命令名/命令行几个列!
可以通过下面的快捷键来更改显示内容:更改显示内容通过f键可以选择显示的内容(按f键之后会显示列的列表,按 a-z。即可显示或隐藏对应的列,最后按回车键确定)。按o键可以改变列的显示顺序(按小写的a-z可以将相应的列向右移动,而大写的A-Z 可以将相应的列向左移动,最后按回车键确定)。按大写的F或O键,然后按a-z可以将进程按照相应的列进行排序,而大写的R键可以将当前的排序倒转。
参数详解如下:

列名 含义
PID 进程id
PPID 父进程id
RUSER Real user name
UID 进程所有者的用户id
USER 进程所有者的用户名
GROUP 进程所有者的组名
TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
PR 优先级
NI nice值。负值表示高优先级,正值表示低优先级
P 最后使用的CPU,仅在多CPU环境下有意义
%CPU 上次更新到现在的CPU时间占用百分比
TIME 进程使用的CPU时间总计,单位秒
TIME+ 进程使用的CPU时间总计,单位1/100秒
%MEM 进程使用的物理内存百分比
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP 进程使用的虚拟内存中,被换出的大小,单位kb
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE 可执行代码占用的物理内存大小,单位kb
DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR 共享内存大小,单位kb
nFLT 页面错误次数
nDRT 最后一次写入到现在,被修改过的页面数。
S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
COMMAND 命令名/命令行
WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
Flags 任务标志

常用命令

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的进程的资源使用情况,并显式该进程启动的命令行参数

CPU:vmstat

查看CPU(包含不限于)。命令:

vmstat -n 2 3

效果:

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 159088    212 1038740    0    0     2     1   12   14  0  0 100  0  0
 0  0      0 158808    212 1038740    0    0     0     0  106  123  0  0 100  0  0
 0  0      0 158808    212 1038740    0    0     0     0   65   84  0  0 100  0  0

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数表示时间间隔数,单位是秒,第二个参数是表示次数。比较重要的是procs和cpu。
procs:
r 运行和等待CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不能超过总核数的2倍,否则代表系统压力过大;
b 等待资源的进程数,比如正在等待磁盘I/O、网络I/0等。

cpu:
us 用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时向多,如果长期大于50%,优化程序;
sy 内核进程消耗的CPU时间百分比。
us+sy参考值为80%,如果us+sy大于80%,说明可能存在CPU不足。
id:处于空闲的CPU百分比。
wa:系统等待I0的CPUH时间百分比。
st:来自于一个虚拟机偷取的CPU时间的百分比。

额外

查看所有CPU核信息:

mpstat -P ALL 2

效果:

Linux 3.10.0-1062.7.1.el7.x86_64 (root) 	2020年02月07日 	_x86_64_	(8 CPU)

21时32分53秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
21时32分55秒  all    0.06    0.00    0.19    0.00    0.00    0.00    0.00    0.00    0.00   99.75
21时32分55秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分55秒    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分55秒    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分55秒    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分55秒    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分55秒    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分55秒    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分55秒    7    0.50    0.00    1.51    0.00    0.00    0.00    0.00    0.00    0.00   97.99

21时32分55秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
21时32分57秒  all    0.06    0.00    0.13    0.00    0.00    0.00    0.00    0.00    0.00   99.81
21时32分57秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分57秒    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分57秒    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分57秒    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分57秒    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分57秒    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分57秒    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21时32分57秒    7    0.50    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   99.00
^C

平均时间:  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
平均时间:  all    0.06    0.00    0.16    0.00    0.00    0.00    0.00    0.00    0.00   99.78
平均时间:    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
平均时间:    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
平均时间:    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
平均时间:    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
平均时间:    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
平均时间:    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
平均时间:    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
平均时间:    7    0.50    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   98.50

每个进程使用cpu的用量分解信息:

pidstat -u 1 -p 进程编号

如:

pidstat -u 1 -p 37

效果:

Linux 3.10.0-1062.7.1.el7.x86_64 (root) 	2020年02月07日 	_x86_64_	(8 CPU)

21时34分11秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
21时34分12秒     0        37    0.00    0.00    0.00    0.00     6  watchdog/6
21时34分13秒     0        37    0.00    0.00    0.00    0.00     6  watchdog/6
21时34分14秒     0        37    0.00    0.00    0.00    0.00     6  watchdog/6
21时34分15秒     0        37    0.00    0.00    0.00    0.00     6  watchdog/6
21时34分16秒     0        37    0.00    0.00    0.00    0.00     6  watchdog/6
^C
平均时间:     0        37    0.00    0.00    0.00    0.00     -  watchdog/6

内存:free

应用程序可用内存数。应用程序可用内存系统物理内存>70%,内存充足;应用程序可用内存系统物理内存<20%,内存不足,需要增加内存;20%<应用程序可用内存系统物理内存<70%内存基本够。用
命令:free(默认单位字节),效果:

              total        used        free      shared  buff/cache   available
Mem:        2027952      831952      156840       19908     1039160     1007696
Swap:       2097148           0     2097148

命令:free -g(默认单位G),效果:

              total        used        free      shared  buff/cache   available
Mem:              1           0           0           0           0           0
Swap:             1           0           1

命令:free -m(默认单位M),效果:

              total        used        free      shared  buff/cache   available
Mem:           1980         812         153          19        1014         983
Swap:          2047           0        2047

查看额外:pidstat -p 进程号 -r 采样间隔秒数。

硬盘:df

disk file查看磁盘剩余空闲数。-h:human给人类看的,展示更友好。 命令:df

文件系统                   1K-块    已用    可用 已用% 挂载点
devtmpfs                  997584       0   997584    0% /dev
tmpfs                    1013976       0  1013976    0% /dev/shm
tmpfs                    1013976   10728  1003248    2% /run
tmpfs                    1013976       0  1013976    0% /sys/fs/cgroup
/dev/mapper/centos-root 52403200 5291588 47111612   11% /
/dev/sda1                1038336  212840   825496   21% /boot
/dev/mapper/centos-home 28289540   39436 28250104    1% /home
tmpfs                     202796       8   202788    1% /run/user/42
tmpfs                     202796      36   202760    1% /run/user/0
/dev/sr0                 4414592 4414592        0  100% /run/media/root/CentOS 7 x86_64

命令:df -h

文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 975M     0  975M    0% /dev
tmpfs                    991M     0  991M    0% /dev/shm
tmpfs                    991M   11M  980M    2% /run
tmpfs                    991M     0  991M    0% /sys/fs/cgroup
/dev/mapper/centos-root   50G  5.1G   45G   11% /
/dev/sda1               1014M  208M  807M   21% /boot
/dev/mapper/centos-home   27G   39M   27G    1% /home
tmpfs                    199M  8.0K  199M    1% /run/user/42
tmpfs                    199M   36K  199M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64

磁盘IO:iostat

磁盘I/O性能评估。
命令:iostat -xdk 2 3,效果:

Linux 3.10.0-1062.7.1.el7.x86_64 (root) 	2020年02月07日 	_x86_64_	(8 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.02    0.37    0.13    16.54     5.14    86.46     0.00    1.25    1.15    1.53   0.57   0.03
scd0              0.00     0.00    0.00    0.00     0.02     0.00    72.41     0.00    1.28    1.28    0.00   1.00   0.00
dm-0              0.00     0.00    0.32    0.15    16.31     5.07    89.49     0.00    1.40    1.29    1.63   0.58   0.03
dm-1              0.00     0.00    0.00    0.00     0.04     0.00    50.09     0.00    0.20    0.20    0.00   0.18   0.00
dm-2              0.00     0.00    0.01    0.00     0.04     0.04    15.04     0.00    0.21    0.20    0.46   0.19   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.50    0.00     4.00     0.00    16.00     0.00    1.00    1.00    0.00   1.00   0.05
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.50    0.00     4.00     0.00    16.00     0.00    1.00    1.00    0.00   1.00   0.05
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

磁盘块设备分布重点参数如下:
rkB/s每秒读取数据量;
wkB/s每秒写入数据量kB;
svctm I/O 请求的平均服务时间,单位毫秒;
await I/O 请求的平均等待时间,单位亳秒。值越小,性能越好;
%util 一秒中有百分几的时间用于I/O操作。接近100%时,表示磁盘带宽跑满,需要优化程序或者增加磁盘;
rkB/s、wkB/s根据系统应用不同会有不同的值,但有规律遵循:长期、超大数据读写,肯定不正常,需要优化程序读取。svctm的值与awat的值很接近,表示几乎没有I/O等待,磁盘性能好,如果await的值远高于systm的值,则表示I/O队列等待太长,需要优化程序或更换更快磁盘。

额外

命令:pidstat -d 采样间隔秒数 -p 进程号。
如:pidstat -d 2 -p 37。

Linux 3.10.0-1062.7.1.el7.x86_64 (root) 	2020年02月07日 	_x86_64_	(8 CPU)

22时37分10秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
22时37分12秒     0        37      0.00      0.00      0.00  watchdog/6
22时37分14秒     0        37      0.00      0.00      0.00  watchdog/6
^C
平均时间:     0        37      0.00      0.00      0.00  watchdog/6

网络IO:ifstat

默认本地没有,需下载安装ifstat:

wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz
tar xzvf ifstat-1.1.tar.gz
cd ifstat-1.1
./configure
make
make install

命令:ifstat -l

        lo                ens33               virbr0      
 KB/s in  KB/s out   KB/s in  KB/s out   KB/s in  KB/s out
    0.00      0.00      0.06      0.23      0.00      0.00
    0.00      0.00      0.29     12.74      0.00      0.00
    0.00      0.00      0.06      0.17      0.00      0.00
    0.00      0.00      0.06      0.17      0.00      0.00
    0.00      0.00      0.12      3.66      0.00      0.00
    ...

可通过参数查看:

各个网卡的in、out;
观察网络负载情况;
程序网络读写是否正常;
程序网终I/O优化;
增加网络I/O带宽