本章主要整理 Linux 命令中关于查看系统性能,定位问题的的相命令,包括 top、ps、pidstat、mpstat、iostat、vmstat、netstat、lsof、du、df 和 free 等命令。这些命令涵盖了对进程和系统的CPU、IO、网络等监控,希望对读者有所帮助。
注:本章内容来源网络各种博客
top
用于实时显示 process 的动态
命令参数:
参数 | 说明 |
q | 退出 |
c | 切换显示命令名称和完整命令行 |
M | 根据驻留内存大小进行排序 |
-p | 指定进程号 |
常用命令:
top |
top -p 指定进程 |
top -d n #每 N 秒刷新 |
头部字段意义说明:
USER | 进程的属主 |
PID | 进程的 ID |
%us | 表示用户空间程序的 cpu 使用率(没有通过 nice 调度) |
%sy | 表示系统空间的 cpu 使用率,主要是内核程序。 |
%ni | 表示用户空间且通过 nice 调度过的程序的 cpu 使用率 |
%id | 空闲 cp |
%wa | cpu 运行时在等待 io 的时间 |
%hi | cpu 处理硬中断的数量 |
%si | cpu 处理软中断的数量 |
%st | 被虚拟机偷走的 cpu |
Majflt/s | 任务每秒发生的主要错误,需要从磁盘中加载页 |
Command | 当前进程对应的命令 |
列表字段意义说明:
USER | 进程的属主 |
PID | 进程的 ID |
PR | 进程的调度优先级 |
NI | 进程的 nice 值 (优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级 |
%CPU | 进程占用的 CPU 百分比 |
%MEM | 进程使用的可用物理内存百分比 |
RES | 驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位 kb。RES=CODE+DATA |
VIRT | 进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
SHR | SHR 是进程使用的共享内存。共享内存大小,单位 kb |
S | 进程的状态 |
TIME+ | 任务启动后到现在所使用的全部 CPU 时间,精确到百分之一秒 |
Command | 当前进程对应的命令 |
注:可以去了解一下htop
ps
process status 命令用于显示当前进程的状态,类似于 windows 的任务管理器。
命令参数:
参数 | 说明 |
-f | 用 ASCII 字符显示树状结构,表达程序间的相互关系 |
-u | 以用户为主的进程状态 |
-x | 显示所有程序,不以终端机来区分 |
-p | 查看某个进程号 |
-a/-e | 显示现行终端机下的所有程序,包括其他用户的程序 |
常用命令:
ps -ef |
ps aux |
ps -up 进程号 |
列表字段意义说明:
USER | 进程的属主 |
PID | 进程的 ID |
PPID | 父进程 |
%CPU | 进程占用的 CPU 百分比 |
%MEM | 占用内存的百分比 |
VSZ | 进程使用的虚拟內存量(KB) |
RSS | 该进程占用的固定內存量(KB)(驻留中页的数量) |
START | 进程启动时间 |
STAT | 进程状态 |
TIME | 进程运行时间 |
TTY | 运行中断 |
pidstat
用于监控全部或指定进程的 cpu、内存、线程、设备IO 等系统资源的占用情况
命令参数:
参数 | 说明 |
-r | 显示各个进程的内存使用统计 |
-u | 默认的参数,显示各个进程的 cpu 使用统计 |
-d | 显示各个进程的 IO 使用情况 |
-w | 显示每个进程的上下文切换情况 |
-p | 指定进程号 |
-t | 显示选择任务的线程的统计信息外的额外信息 |
常用命令:
pidstat 1 -r/d/u -p 进程号 |
pidstat 1 -r/d/u |
列表字段意义说明:
USER | 进程的属主 |
PID | 进程的 ID |
%usr | 进程在用户空间占用 cpu 的百分比 |
%system | 进程在内核空间占用 cpu 的百分比 |
%guest | 进程在虚拟机占用 cpu 的百分比 |
%CPU | 进程占用的 cpu 百分比 |
CPU | 处理进程的 cpu 编号 |
RSS | 该进程占用的固定內存量(KB)(驻留中页的数量) |
VSZ | 虚拟地址大小,虚拟内存的使用 KB |
Minflt/s: | 任务每秒发生的次要错误,不需要从磁盘中加载页 |
Majflt/s | 任务每秒发生的主要错误,需要从磁盘中加载页 |
Command | 当前进程对应的命令 |
kB_rd/s | 每秒从磁盘读取的 KB |
kB_wr/s | 每秒写入磁盘 KB |
kB_ccwr/s | 任务取消的写入磁盘的 KB,当任务截断脏的pagecache 的时候会发生 |
Cswch/s | 每秒主动任务上下文切换数量 |
Nvcswch/s | 每秒被动任务上下文切换数量 |
mpstat
报告处理器相关的统计数据(统计信息来自/proc/stat文件)
常用命令:
mpstat -P ALL |
mpstat -P ALL 1 |
列表字段意义说明:
CPU | 进程的属主 |
PID | 处理器 ID |
%usr | 在 internal 时间段里,用户态的 cpu 时间(%),不包含 nice 值为负进程 |
%nice | 在 internal 时间段里,nice 值为负进程的 cpu 时间(%) |
%sys | 进程在虚拟机占用 cpu 的百分比 |
%iowait | 在 internal 时间段里,硬盘IO 等待时间(%) |
%irq | 在 internal 时间段里,硬中断时间(%) |
%soft | 在 internal 时间段里,软中断时间(%) |
%steal | 显示虚拟机管理器在服务另一个虚拟处理器时虚拟 cpu 处在非自愿等待下花费时间的百分比 |
%guest | 显示运行虚拟处理器时 cpu 花费时间的百分比 |
%idle | 在 internal 时间段里,cpu 除去等待磁盘IO 操作外的因为任何原因而空闲的时间闲置时间 |
vmstat
查看虚拟内存(Virtual Memory)使用状况的工具
命令参数:
参数 | 说明 |
-S | 使用指定单位显示。参数有 k 、K 、m 、M |
常用命令:
vmstat 1 -S m |
列表字段意义说明:
Procs | r:等待运行的进程数 b:等待 IO 的进程数量 |
Memory | swpd:使用的虚拟内存量 free:空闲内存量 buff:用作缓冲区的内存量 cache:用作高速缓存的内存量 inact:非活动内存的数量 active:活动内存量 |
swap | si:从磁盘交换的内存量(换入,从 swap 移到实际内存的内存) so:交换到磁盘的内存量(换出,从实际内存移动到 swap 的内存) |
I/O | bi:从块设备接收的块数 bo:发送到块设备的块数 |
system | in:每秒的系统中断数,包括时钟中断 cs:系统为了处理所以任务而上下文切换的数量 |
CPU | us:处理器在非内核程序消耗的时间 sy:处理器在内核相关任务上消耗的时间 id:处理器的空闲时间 wa:处理器在等待 IO 操作完成以继续处理任务上的时间 |
iostat
主要用于输出磁盘 IO 和 CPU 的统计信息
命令参数:
参数 | 说明 |
-c | 使显示 CPU 使用情况 |
-d | 显示磁盘使用情况 |
-k | 以 KB 为单位显示 |
-m: | 以 M 为单位显示 |
常用命令:
iostat 1 |
列表字段意义说明:
%user | CPU 处在用户模式下的时间百分比 |
%nice | CPU 处在带NICE值的用户模式下的时间百分比 |
%system | CPU 处在系统模式下的时间百分比 |
%steal | 管理程序维护另一个虚拟处理器时,虚拟 CPU 的无意识等待时间百分比 |
%idle | CPU 空闲时间百分比 |
device | 磁盘名称 |
tps | 每秒钟发送到的 I/O 请求数. |
Blk_read/s | 每秒读取的 block 数 |
Blk_wrtn/s | 每秒写入的 block 数 |
Blk_read | 读入的 block 总数. |
Blk_wrtn | 写入的 block 总数 |
rrqm/s | 每秒进行 merge 的读操作数目。即 rmerge/s |
wrqm/s | 每秒进行 merge 的写操作数目。即 wmerge/s |
r/s | 每秒完成的读 I/O 设备次数。即 rio/s |
w/s | 每秒完成的写 I/O 设备次数。即 wio/s |
rkB/s | 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。 |
wkB/ | 每秒写K字节数。是 wsect/s 的一半 |
avgrq-sz | 平均每次设备I/O操作的数据大小 (扇区) |
avgqu-sz | 平均I/O队列长度 |
rsec/s | 每秒读扇区数。即 rsect/s |
wsec/s | 每秒写扇区数。即 wsect/s |
r_await | :每个读操作平均所需的时间 不仅包括硬盘设备读操作的时间,还包括了在 kernel 队列中等待的时间 |
w_await | 每个写操作平均所需的时间 不仅包括硬盘设备写操作的时间,还包括了在 kernel 队列中等待的时间 |
await | 平均每次设备I/O操作的等待时间 (毫秒) |
svctm | 平均每次设备I/O操作的服务时间 (毫秒) |
%util | 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的 cpu 百分比 |
netstat
查看网络连接情况(tcp,upd,ip...)
命令参数:
参数 | 说明 |
-a或--all | 显示所有连中的 socket |
-i或--interfaces | 显示网络界面信息表单 |
-p或--programs | 显示正在使用 socket 的程序识别码和程序名称 |
-s或--statistics | 显示网络工作信息统计表 |
-t或--tcp | 显示 TCP 传输协议的连线状况 |
-u或--udp | 显示 UDP 传输协议的连线状况 |
-n或--numeric | 不进行 DNS 轮询,显示 IP(可以加速操作) |
-l或--listening | 显示监控中的服务器的 socket |
常用命令:
netstat -ntlp //查看当前所有 tcp 端口 |
netstat -ntulp |grep端口 //查看某端口使用情况 |
netstat -pnt |grep :端口 |wc //查看某一端口的连接数量,比如3306端口 |
列表字段意义说明:
Proto | 协议名 |
recv-Q | 网络接收队列,表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()如果接收队列 Recv-Q 一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击 |
send-Q | 在 internal 时间段里,用户态的 CPU 时间(%),不包含 nice 值为负进程 |
Local Address | 本地地址 |
Foreign Address | 与本机端口通信的外部 socket。显示规则与 Local Address 相同 |
State | 链路状态,共有11种 LISTEN SYN_SENT SYN_RECV ESTABLISHED TIME_WAIT .... |
lsof
list open files 是一个列出当前系统打开文件的工具
命令参数:
参数 | 说明 |
-c <进程名> | 输出指定进程所打开的文件 |
-p <进程号> | 输出指定 PID 的进程所打开的文件 |
+d <目录> | 输出目录及目录下被打开的文件和目录(不递归) |
-i | 显示所有连接 -i TCP -i UDP -i:port 指定端口 -i@127.0.0.5 @host来显示指定到指定主机的连接 |
注:https://www.jianshu.com/p/a3aa6b01b2e1
常用命令:
lsof abc.txt 显示开启文件 abc.txt 的进程 |
lsof 目录名 查找谁在使用文件目录系统 |
lsof -c abc 显示abc进程现在打开的文件 |
lsof -p 12 看进程号为12的进程打开了哪些文件 |
lsof -i :22 知道22端口被哪个进程占用 |
lsof -i @192.168.1.111 查看远程已打开的网络连接(连接到192.168.1.111) |
df
显示磁盘分区上可以使用的磁盘空间
命令参数:
参数 | 说明 |
-a | 查看全部文件系统,单位默认 KB |
-h | 使用 -h 选项以KB、MB、GB的单位来显示,可读性高~~~(最常用) |
du
显示指定的目录或文件所占用的磁盘空间
命令参数:
参数 | 说明 |
--max-depth=<目录层数> | 超过指定层数的目录后,予以忽略 |
-h | 使用 -h 选项以 KB、MB、GB 的单位来显示,可读性高~~~(最常用) |
-s或--summarize | 仅显示总计 |
常用命令:
du xxx文件 |
du -h 目录 |
du -sh ./xx |
free
显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer
命令参数:
参数 | 说明 |
-b | 以 Byte 为单位显示内存使用情况 |
-k | 以 KB 为单位显示内存使用情况 |
-m | 以 MB 为单位显示内存使用情况 |
-g | 以 GB 为单位显示内存使用情况 |