Linux常用运维命令
top
top
经常用来监控Linux
系统状况,是常用的性能分析工具,能够实时显示各个进程的资源占用情况;
参数详解
-d num:每个num秒刷新一次统计数据,默认为5秒;
-b:使用非交互模式,一般用于编写脚本;
-n:设置刷新次数;
-p:显示指定进程信息;
在
top
命令交互模式下,可通过以下命令进行操作:
- M:按使用内存从大到小排序;
- P:按使用CPU从大到小排序;
- N:按进程号从大到小排序;
- T:按进程使用时间从大到小排序;
- 1:数字1,可显示多核CPU信息;
- b:高亮显示当前活动进程及标题行;
- x:高亮显示排序列;
SHIFT+ <>
:可向左或向右调整排序列
返回结果说明

top命令返回前5行统计信息说明:
第一行:top - 14:36:52 up 104 days, 0 min, 5 users, load average: 0.79, 0.70, 0.76
第一行是任务队列信息,代表的含义为:
内容 | 含义 |
---|---|
14:36:52 | 当前系统时间 |
up 104 days , 0 min | 系统运行时间 格式为天:时:分(即系统最近一次启动到当前时间) |
5 users | 当前登录用户数 |
load average: 0.79, 0.70, 0.76 | 系统负载,即任务队列的平均长度;三个数值分别表示1分钟、5分钟、15分钟前到现在的平均值 |
第二行:Tasks: 500 total, 1 running, 499 sleeping, 0 stopped, 0 zombie
第二行是进程信息,代表的含义为:
内容 | 含义 |
---|---|
500 total | 系统运行的进程总数 |
1 running | 正在运行的进程数 |
499 sleeping | 处于睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
第三行:%Cpu(s): 0.6 us, 0.3 sy, 0.0 ni, 99.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
第三行是cpu信息,代表的含义为:
内容 | 含义 |
---|---|
0.6 us | 用户 空间占用cpu百分比 |
0.3 sy | 内核空间占用cpu百分比 |
0.0 ni | 用户进程空间内改变过优先级的进程占用cpu百分比 |
99.1 id | 空闲cpu百分比 |
0.0 wa | 等待输入输出的cpu时间百分比 |
0.0 hi | 硬中断占用cpu百分比 |
0.0 si | 软中断占用cpu百分比 |
0.0 st | ? |
第四行:KiB Mem : 98804368 total, 2543620 free, 78503992 used, 17756760 buff/cache
第四行为内存信息,代表含义为:
内容 | 含义 |
---|---|
98804368 total | 物理总内存 |
2543620 free | 空间总内存 |
78503992 used | 使用总内存 |
17756760 buff/cache | 用作内核缓存的总内存 |
第五行:KiB Swap: 33554428 total, 33554428 free, 0 used. 15247328 avail Mem
第五行为交换内存信息,代表含义为:
内容 | 含义 |
---|---|
33554428 total | 交换区大小 |
33554428 free | 交换区空闲大小 |
0 used | 交换区使用大小 |
15247328 avail Mem | 可用于进程下一次分配的物理内存大小 |
进程信息
列名 | 含义 |
---|---|
PID | 进程编号 |
PPID | 父进程编号 |
RUSER | 真实用户名 |
UID | 进程拥有者用户编号 |
USER | 进程拥有者用户名 |
GROUP | 进程拥有者归属组 |
TTY | 启动进程的终端名,非终端启动则显示为? |
PR | 优先级 |
NI | nice值,复制表示高优先级,正值表示低优先级 |
P | 最后使用的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 | 可执行diamante外的部分(数据+ 栈)占用大小,单位为kb |
SHR | 共享内存大小,单位为kb |
nFLT | 页面错误吃书 |
nDRT | 最后一次写入到现在,被修改过的页面数 |
S | 进程状态;D-不可中断睡眠状态 R-运行 S=睡眠 T-跟踪/停止 Z=僵尸进程 |
COMMAND | 启动命令行 |
WCHAN | 若进程在睡眠,则显示睡眠中的函数名 |
Flags | 任务标志 |
iotop
iotop
是一个用来监视磁盘使用状况的top
类工具,可监测到程序级别的磁盘IO信息;
主要监控项
- 进程/线程的IO读写带宽;
- 进程线程调度SWAPIN耗时占比;
- 进程线程的IO阻塞耗时占比
- 进程/线程的IO优先级;
- 系统IO总读写带宽;
- 系统IO实际读写带宽;
参数详解
--version:显示版本号
-h,--help:显示帮助
-o,--only:显示当前有IO活动的进程或线程,可通过命令`o`进行切换
-b, --batch:运行在非交互式模式,常用于编写脚本文件中;
-n, NUM, --iter NUM:设置刷新次数;
-d SEC, --delay=SEC:设置刷新间隔的秒数,支持非整数;
-p PID, --pid=PID:显示指定进程信息;
-u USER,--user=USER:显示指定用户下进程信息;
-P, --processes:只显示进程信息,默认显示进程+线程信息;
-a, --accumulated:显示命令启动后每个线程的IO累计值;
-k, --kilobutes:以KB为单位显示;
-t,--time:在每一行天添加一个当前时间
-q,--quiet:仅打印一次首行标题,经常与`batch`结合使用;
-qq:完全不打印标题行;
-qqq:禁止打印统计信息;
返回结果说明
TID:进程或线程编号;
PRIO:进程或线程优先级;
USER:进程或线程启动用户;
DISK_READ:采样周期内磁盘读取带宽;
DISK_WRITE:采样周期内磁盘写入带宽;
SWAPIN:磁盘换入的时间占总时间的百分比;(内存不足时会将数据换入到硬盘中)
IO:普通的磁盘读写等待时间占总时间的百分比;
COMMAND:启动进程或线程的命令行语句;
示例
- 每10秒打印一次信息,显示单位为kb,使用累加模式,且仅打印活跃的进程;
iotop -d 10 -k -a -o
批处理模式,每10秒打印一次统计信息,显示单位为kb,使用累加模式,打印10次结束;
iotop -d 10 -k -a -n 10
批处理模式,打印1000号进程信息,每次打印添加时间戳,并重定向至日志文件中;
iotop -p 1000 -t -b |tee iotop.txt
sysstat
sysstat
是一个软件包,包含检测系统性能及效率的一组工具,包括iostat
、mpstat
、pidstat
、sar
、sadc
、sa1
、sa2
、sadf
、sysstat
、nfsiostat
、cifsiostat
;
iostat
iostat是IO statistics的缩写,iostat工具将对系统的磁盘操作活动进行监视;iostat在汇报磁盘活动统计情况时,也会汇报出cpu使用情况,但iostat无法针对进程级别进行深入分析,仅支持对系统整体情况进行分析;
iostat [参数] [间隔时间] [次数]
参数详解
-c:显示cpu使用情况
-d:显示磁盘使用情况
-N:显示磁盘阵列(LVM)信息
-n:显示NFS使用情况
-k:以kb为单位显示
-m:以mb为单位显示
-t:报告每秒向终端读取和写入的字符数和CPU信息
-V:显示版本信息
-x:显示详细信息
-p:显示指定磁盘和分区情况
-y:跳过不显示第一次报告数据;第一次输出的是自系统启动以来累计数据;
-z:只显示在采样周期内有活动的磁盘
返回结果说明
root@bigdata-demo10:~# iostat
Linux 3.10.0-693.11.6.el7.youdata.x86_64 (bigdata-demo10.jdlt.163.org) 08/09/2021 _x86_64_ (32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.18 0.00 0.34 0.02 0.00 98.47
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 5.89 0.18 34.42 1650913 309417616
sdc 0.27 0.00 2.50 35165 22439940
sdd 0.02 0.00 2.78 36117 24993196
sde 0.00 0.00 0.03 11017 239784
sda 45.49 8.85 569.48 79552888 5119477220
sdf 0.00 0.00 0.03 28517 239812
sdg 0.00 0.00 0.03 29065 239812
sdh 0.00 0.00 0.03 28733 239812
sdi 0.00 0.00 0.03 29805 239812
sdj 0.00 0.00 0.03 29973 239812
sdk 0.00 0.00 0.03 30229 239812
sdl 0.00 0.01 0.03 91881 308792
sdm 0.19 3.07 6.00 27623653 53980620
cpu属性
iostat结果面板的avg-cpu
描述的是系统cpu使用情况:
%user
:cpu处在用户模式下的时间百分比;%nice
:cpu处在带nice值的用户模式下的时间百分比;%system
:cpu处于系统模式下的时间百分比;%iowait
:cpu等待输入输出完成时间的百分比;%steal
:管理成语维护另一个虚拟处理器时,虚拟cpu的无疑是等待时间百分比;%idle
:cpu空闲时间百分比;
磁盘属性
iostat结果面板的Device
描述的是系统磁盘使用情况:
tps
:该设备每秒的传输次数;(一次传输即为一次IO请求;)kB_read/s
:每秒从设备读取的数据量;kB_wrtn/s
:每秒想设备写入的数据量;kB_read
:读取的总数据量;wB_wrtn
:写入的总数据量;
root@bigdata-demo10:~# iostat -x -p sdc
Linux 3.10.0-693.11.6.el7.youdata.x86_64 (bigdata-demo10.jdlt.163.org) 08/09/2021 _x86_64_ (32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.18 0.00 0.34 0.02 0.00 98.47
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdc 0.00 0.29 0.00 0.27 0.00 2.50 18.32 0.00 0.37 1.16 0.36 0.04 0.00
sdc1 0.00 0.29 0.00 0.27 0.00 2.50 18.32 0.00 0.37 1.16 0.36 0.04 0.00
磁盘属性
rrqm/s
:每秒合并读操作次数;wrqm/s
:每秒合并写操作次数;r/s
:每秒读操作次数;w/s
:每秒写操作次数;rKB/s
每秒读取字节数;wKB/s
:每秒写入字节数;avgrq-sz
:平均每次设备IO操作的数据大小;avgqu-sz
:平均IO队列长度;rsec/s
:每秒写扇区数;wsec/s
:每秒写扇区数;r_await
:每个读操作平均时长,包括硬盘读操作时间和kernel队列中等待时间;w_await
:每个写操作平均时长,包括硬盘写操作时间和kernel队列中等待时间;await
:平均每次设别IO操作等待时间(毫秒);svctm
:平均每次设备IO操作的服务时间(毫秒);%util
:每秒中用于操作的时长占用百分比,即IO消耗的CPU百分比;
如果
%util
接近100%,说明产生的IO请求过多,IO系统满负荷,此时磁盘可能存在瓶颈;如果await
远大于svctm
,则说明IO队列太长,IO响应慢,需进行优化;avgqu-sz
比较大,也表示当前有大量IO在等待;
示例
查看磁盘吞吐量,以kb为单位,每2秒统计一次,共统计10次
iostat -d -k 2 10
显示设备使用率,以kb为单位,每2秒统计一次,共统计10次
iostat -x -d -k 2 10
sar
sar
(System ActivityReporter)是目前Linux上最为全面的系统性能分析工具之一,可从多方面对系统的活动进行报告,包括:文件读写情况、系统调用情况、磁盘IO、CPU效率、内存使用情况、进程活动及IPC有关活动等;
参数详解
-A:所有报告的总和;
-b:显示IO和传递速率的统计信息;
-B:显示换页状态;
-d:输出每一块磁盘的使用信息;
-e:显示报告的结束时间;
-f:从指定的文件读取报告;
-i:设置状态信息刷新时间间隔;
-P:报告每个CPU状态;
-R:显示内存状态;
-u:输出cpu使用情况和统计信息;
-v:显示索引节点、文件和其他内核表的状态;
-w:显示交换分区的状态;
-x:显示给定进程状态;
-r:报告雷村利用率统计信息;
-o:指定输出文件;
示例
每2秒采样一次,连续4次查看cpu使用情况,并将结果写入sar.out(二进制)中;
sar -u -o sar.out 2, 4
读取sar输出文件
sar -u -f sar.out
ss
ss
是Socket Statistics
的缩写,用来统计socket
链接的相关信息。与netstat
差不多,但有着比netstat
更强大的统计功能;
参数详解
-h, --help:显示帮助菜单;
-V, --version:显示版本信息;
-n, --numeric:不解析服务名;
-r, --resolve:解析主机名;
-a, --all:显示所有的套接字;
-l, --listen:显示监听状态的套接字;
-o, --options:显示计时器信息;
-e, --extended:展示详细的套接字信息;
-m, --memory:显示套接字的内存使用;
-p, --processes:展示使用套接字的进程;
-i, --info:展示tcp内部信息;
-s, --summary:展示套接字汇总信息;
-4, --ipv4:只显示ipv4套接字;
-6, --ipv6:只显示ipv6套接字;
-0, --packet display 显示包经过的网络接口;
-t, --tcp:显示tcp套接字;
-u, --udp:显示udp套接字;
-d, --dccp:显示dccp套接字;
-w, --raw:显示raw套接字;
-x, --unix:显示unix套接字;
-f,--family==FAMILY:显示指定类型的套接字;
-A, --query=QUERY, --socket=QUERY:查看某种类型套接字;(QUERY:={all|inet|tcp|udp|raw|unix|packet|netlink})
-D, --diag=FILE:将关于tcp套接字的原始信息转存到文件中;
-F, --filter=FILE:指定过滤规则文件,过滤某种状态的连接;(FILTER:=[state TCP-STATE])
示例
显示进程名及监听的端口
ss -pl
nc
nc
是netcat
的简写,有着网络界的瑞士军刀美誉;它是一个短小精悍、功能实用,被设计为一个简单、可靠的网络工具;
作用:
- 实现任意TCP/UDP端口的监听,
nc
可以作为server
以TCP或UDP方式侦听指定端口; - 端口扫描,
nc
可以作为client
发起TCP或UDP链接; - 机器间传输文件;
- 机器之间网络测速;
参数详解
-l:使用监听模式;
-n:直接使用ip地址,不通过域名服务器;
-i:设置时间间隔,一遍传送信息及扫描通信端口;
-o:指定文件名称,将往来数据以16进制字节码写入文件保存;
-p:设置本地主机使用的通信端口;
-r:指定源端口和目的端口都随机;
-s:设置本地主机送出数据包的IP地址;
-u:使用UDP传输协议;
-v:显示执行过程;
-w:设置等待连线的时间;
-z:使用0输入/输出模式,只在扫描通信端口使用;
-g:设置路由器通信网关,最多设置8个;
-G:设置来源路由器,其数值为4的倍数;
示例
tcp端口扫描:扫描192.168.0.1地址1-1000端口,超时时间为2秒;
nc -t -z -w2 192.168.0.1 1-1000
tcpdump
nethogs
nethogs
是一款开源、免费的、中断下的网络流量监控工具,它可以监控Linux的进程或应用程序的网络流量。nethogs
只能实时监控进程的网络带宽占用情况,nethogs
支持IPv4和IPv6协议,也支持本地网卡以及PPP链接;
参数详解
-d:数据统计刷新时间;
-h:显示帮助;
-p:混合模式下嗅探(不推荐使用)
-t:跟踪模式
-c:限制刷新次数
交互模式:
m:切换显示单位;切换顺序为KB/sec,KB,B,MB
r:按接收流量排序
s:按发送流量排序
q:退出