Linux 监控命令整理

Linux系统监控命令速查手册

命令 功能作用 用法举例
free 查看内存使用情况,包括物理内存和虚拟内存 free -hfree -m
vmstat 对系统的整体情况进行统计,包括内核进程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息 vmstat 2 100
top 实时显示系统中各个进程的资源占用状况及总体状况 top
mpstat 实时系统监控工具,它会报告与CPU相关的统计信息 mpstat
sar 收集、报告和保存CPU、内存、输入输出端口使用情况 sar -n DEV 3 100
netstat 检验本机各端口的网络连接情况,用于显示与IP、TCP、UDP和ICMP协议相关的统计数据 netstat -a
tcpdump 用于捕捉或者过滤网络上指定接口上接收或者传输的TCP/IP包 tcpdump -i eth0 -c 3
IPTraf 用来生成包括TCP信息、UDP计数、ICMP和OSPF信息、以太网负载信息、节点状态信息、IP校验和错误等等统计数据 iptraf
df 检查linux的文件系统的磁盘空间占用情况 df -h
iostat 收集显示系统存储设备输入和输出状态统计 iostat -x -k 2 100
iotop 用来监视磁盘I/O使用状况的top类工具 iotop
lsof 用于以列表的形式显示所有打开的文件和进程 lsof
atop 显示的是各种系统资源(CPU, memory, network, I/O, kernel)的综合,并且在高负载的情况下进行了彩色标注 atop
htop 它和top命令十分相似,高级的交互式的实时linux进程监控工具 htop
ps 最基本同时也是非常强大的进程查看命令 ps aux
glances 监视 CPU,平均负载,内存,网络流量,磁盘 I/O,其他处理器 和 文件系统 空间的利用情况 glances
dstat 全能系统信息统计工具,可用于替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具 dstat
uptime 用于查看服务器运行了多长时间以及有多少个用户登录,快速获知服务器的负荷情况 uptime
dmesg 主要用来显示内核信息。使用dmesg可以有效诊断机器硬件故障或者添加硬件出现的问题。 dmesg
mpstat 用于报告多路CPU主机的每颗CPU活动情况,以及整个主机的CPU情况。 mpstat 2 3
nmon 监控CPU、内存、I/O、文件系统及网络资源。对于内存的使用,它可以实时的显示 总/剩余内存、交换空间等信息。 nmon
mytop 用于监控 mysql 的线程和性能。它能让你实时查看数据库以及正在处理哪些查询。 mytop
iftop 用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等 iftop
jnettop 以相同的方式来监测网络流量但比 iftop 更形象。它还支持自定义的文本输出,并能以友好的交互方式来深度分析日志。 jnettop
ngrep 网络层的 grep。它使用 pcap ,允许通过指定扩展正则表达式或十六进制表达式来匹配数据包。 ngrep
nmap 可以扫描你服务器开放的端口并且可以检测正在使用哪个操作系统 nmap
du 查看Linux系统中某目录的大小 du -sh 目录名
fdisk 查看硬盘及分区信息 fdisk -l

内存监控

free命令

free可以用来快速查看VPS主机的内存使用情况,包括了物理内存和虚拟内存。后面可以加上参数:-h-m,否则默认会以kb为单位显示。运行命令结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@iZm5eae8wzyq0xrh8j2i1eZ ~]# free -h
total used free shared buffers cached
Mem: 7.8G 7.6G 196M 23M 223M 3.4G
-/+ buffers/cache: 4.0G 3.8G
Swap: 0B 0B 0B
[root@iZm5eae8wzyq0xrh8j2i1eZ ~]# free -m
total used free shared buffers cached
Mem: 8001 7805 195 23 223 3478
-/+ buffers/cache: 4102 3898
Swap: 0 0 0
[root@iZm5eae8wzyq0xrh8j2i1eZ ~]# free
total used free shared buffers cached
Mem: 8193180 7992848 200332 24056 229300 3562332
-/+ buffers/cache: 4201216 3991964
Swap: 0 0 0

相关参数说明:

  • total:物理内存大小,就是机器实际的内存
  • used:已使用的内存大小,这个值包括了 cached 和 应用程序实际使用的内存
  • free:未被使用的内存大小
  • shared:共享内存大小,是进程间通信的一种方式
  • buffers:被缓冲区占用的内存大小
  • cached:被缓存占用的内存大小

vmstat命令

vmstat(Virtual Meomory Statistics,虚拟内存统计)是对系统的整体情况进行统计,包括内核进程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。命令格式:vmstat 2 100,其中2表示刷新间隔,100表示输出次数。运行命令结果如下:

1
2
3
4
5
6
7
8
9
[root@iZm5eae8wzyq0xrh8j2i1eZ ~]# vmstat 2 100
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 1 0 186124 230100 3575140 0 0 8 6 0 0 0 0 100 0 0
0 0 0 186092 230128 3575176 0 0 14 30 1484 2683 0 0 99 0 0
0 0 0 186100 230132 3575332 0 0 78 0 1433 2678 0 0 100 0 0
0 0 0 185976 230140 3575344 0 0 6 36 1417 2676 0 0 100 0 0
0 0 0 185992 230160 3575400 0 0 40 0 1434 2658 0 0 100 0 0
0 0 0 185868 230160 3575424 0 0 10 0 1440 2659 0 0 99 1 0

相关参数说明:

  1. procs

    • r列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数,就说明CPU资源不足,可以考虑增加CPU;
    • b列表示在等待资源的进程数,比如正在等待I/O或者内存交换等。
  2. memory

    • swpd列表示切换到内存交换区的内存数量(以KB为单位)。如果swpd的值不为0或者比较大,而且si、so的值长期为0,那么这种情况一般不用担心,不会影响系统性能;
    • free列表示当前空闲的物理内存数量(以KB为单位);
    • buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲;
    • cache列表示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好。
  3. swap

    • si列表示由磁盘调入内存,也就是内存进入内存交换区的数量;
    • so列表示由内存调入磁盘,也就是内存交换区进入内存的数量

      一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足,需要考虑是否增加系统内存。

  4. IO

    • bi列表示从块设备读入的数据总量(即读磁盘,单位KB/秒)
    • bo列表示写入到块设备的数据总量(即写磁盘,单位KB/秒)

      这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。

  5. system

    • in列表示在某一时间间隔中观察到的每秒设备中断数;
    • cs列表示每秒产生的上下文切换次数。

      上面这两个值越大,会看到内核消耗的CPU时间就越多。

  6. CPU

    • us列显示了用户进程消耗CPU的时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序啥的。
    • sy列显示了内核进程消耗CPU的时间百分比。sy的值比较高时,说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。
    • id列显示了CPU处在空闲状态的时间百分比;
    • wa列表示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。
    • st列一般不关注,虚拟机占用的时间百分比。

CPU监控

top命令

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况及总体状况。运行结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost ~]# top
top - 16:50:45 up 32 days, 7:08, 3 users, load average: 0.00, 0.03, 0.05
Tasks: 231 total, 2 running, 229 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8011564 total, 3276644 free, 3041664 used, 1693256 buff/cache
KiB Swap: 4063228 total, 4063228 free, 0 used. 4655796 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4605 root 20 0 148468 2180 1448 R 7.7 0.0 0:02.86 top
1 root 20 0 41436 3748 2456 S 0.0 0.0 0:09.37 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.08 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.12 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.06 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/2
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/3

相关的参数说明:

  • 第一行:

    • 16:50:45: 这是wzfou.com测试时系统时间
    • up xxx days, 7:08:系统运行时间,系统已经运行了xx天7小时8分钟了。
    • 2 users:当前登录用户数
    • load average:系统负载,即任务队列的平均长度。三个数值分别为最近1分钟、最近5分钟、最近15分钟的平均负载 —— 超过N(CPU核数)说明系统满负荷运行。也可以通过$w$uptime命令查看load average。
  • 第二行:

    • 显示进程总数、正在运行的进程数、休眠的进程数、停止的进程数、僵尸进程数
  • 第三行:

    • %us:用户进程消耗的CPU百分比
    • %sy:内核进程消耗的CPU百分比
    • %ni:改变过优先级的进程占用CPU的百分比
    • %id:空闲CPU的百分比
    • %wa:IO等待消耗的CPU百分比

排序

进程的CPU使用率排序:运行top命令后,键入大写P
内存使用率排序:运行top命令后,键入大写M

mpstat命令

mpstat(Multiprocessor Statistics,多处理器统计)是实时系统监控工具,它会报告与CPU相关的统计信息,这些信息存放在/proc/stat文件中。格式:mpstat -P ALL 2 # ALL表示显示所有CPUs,也可以指定某个CPU;2表示刷新间隔。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@iZm5eae8wzyq0xrh8j2i1eZ ~]# mpstat -P ALL 2
Linux 2.6.32-696.3.2.el6.x86_64 (iZm5eae8wzyq0xrh8j2i1eZ) 10/21/2020 _x86_64_ (4 CPU)

12:27:45 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
12:27:47 PM all 0.13 0.00 0.25 0.38 0.00 0.00 0.00 0.00 99.25
12:27:47 PM 0 0.50 0.00 1.00 1.50 0.00 0.00 0.00 0.00 97.00
12:27:47 PM 1 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.50
12:27:47 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
12:27:47 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

12:27:47 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
12:27:49 PM all 0.13 0.00 0.25 0.13 0.00 0.00 0.00 0.00 99.50
12:27:49 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
12:27:49 PM 1 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 99.50
12:27:49 PM 2 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 99.50
12:27:49 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

网络监控

sar命令

SAR是一个在Unix和Linux操作系统中用来收集、报告和保存CPU、内存、输入输出端口使用情况的命令。SAR命令可以动态产生报告,也可以把报告保存在日志文件中。命令格式:sar -n DEV 3 100。效果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@iZm5eae8wzyq0xrh8j2i1eZ ~]# sar -n DEV 3 100
Linux 2.6.32-696.3.2.el6.x86_64 (iZm5eae8wzyq0xrh8j2i1eZ) 10/21/2020 _x86_64_ (4 CPU)

12:30:28 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
12:30:31 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:30:31 PM eth0 10.33 10.33 2.11 6.36 0.00 0.00 0.00

12:30:31 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
12:30:34 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:30:34 PM eth0 6.00 5.00 3.20 2.90 0.00 0.00 0.00

12:30:34 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
12:30:37 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:30:37 PM eth0 4.35 4.01 2.02 1.71 0.00 0.00 0.00

相关参数说明如下:

  • IFACE:网络设备的名称
  • rxpck/s:每秒钟接收到的包数目
  • txpck/s:每秒钟发送出去的包数目
  • rxkB/s:每秒钟接收到的字节数
  • txkB/s:每秒钟发送出去的字节数

netstat

netstat命令一般用于检验本机各端口的网络连接情况,用于显示与IP、TCP、UDP和ICMP协议相关的统计数据。

选取部分选项说明如下:

1
2
3
4
5
6
7
8
9
10
-a, --all, --listening     显示所有连接中的Socket。
-n, --numeric 以数字形式显示地址和端口号。
-t, -–tcp 显示TCP传输协议的连线状况。
-u, -–udp 显示UDP传输协议的连线状况。
-p, --programs 显示正在使用socket的程序名/进程ID
-l, --listening 显示监控中的服务器的Socket。
-o, --timers 显示计时器。
-s, --statistics 显示每个网络协议的统计信息(比如SNMP)
-i, --interfaces 显示网络界面信息表单(网卡列表)
-r, --route 显示路由表

常用的几种:

1
2
3
4
5
$ netstat -aup        # 输出所有UDP连接状况
$ netstat -atp # 输出所有TCP连接状况
$ netstat -s # 显示各个协议的网络统计信息
$ netstat -i # 显示网卡列表
$ netstat -r # 显示路由表信息

df

查看硬盘

uptime

系统启动时间也可以看负载

参考链接:https://wzfou.com/linux-jiankong/

坚持原创技术分享,您的支持将鼓励我继续创作!
0%