Linux系统监控命令速查手册
命令 | 功能作用 | 用法举例 |
---|---|---|
free |
查看内存使用情况,包括物理内存和虚拟内存 | free -h 或free -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 | [root@iZm5eae8wzyq0xrh8j2i1eZ ~]# free -h |
相关参数说明:
- total:物理内存大小,就是机器实际的内存
- used:已使用的内存大小,这个值包括了 cached 和 应用程序实际使用的内存
- free:未被使用的内存大小
- shared:共享内存大小,是进程间通信的一种方式
- buffers:被缓冲区占用的内存大小
- cached:被缓存占用的内存大小
vmstat命令
vmstat
(Virtual Meomory Statistics,虚拟内存统计)是对系统的整体情况进行统计,包括内核进程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。命令格式:vmstat 2 100
,其中2表示刷新间隔,100表示输出次数。运行命令结果如下:
1 | [root@iZm5eae8wzyq0xrh8j2i1eZ ~]# vmstat 2 100 |
相关参数说明:
procs
- r列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数,就说明CPU资源不足,可以考虑增加CPU;
- b列表示在等待资源的进程数,比如正在等待I/O或者内存交换等。
memory
- swpd列表示切换到内存交换区的内存数量(以KB为单位)。如果swpd的值不为0或者比较大,而且si、so的值长期为0,那么这种情况一般不用担心,不会影响系统性能;
- free列表示当前空闲的物理内存数量(以KB为单位);
- buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲;
- cache列表示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好。
swap
- si列表示由磁盘调入内存,也就是内存进入内存交换区的数量;
so列表示由内存调入磁盘,也就是内存交换区进入内存的数量
一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足,需要考虑是否增加系统内存。
IO
- bi列表示从块设备读入的数据总量(即读磁盘,单位KB/秒)
bo列表示写入到块设备的数据总量(即写磁盘,单位KB/秒)
这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。
system
- in列表示在某一时间间隔中观察到的每秒设备中断数;
cs列表示每秒产生的上下文切换次数。
上面这两个值越大,会看到内核消耗的CPU时间就越多。
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 | [root@localhost ~]# top |
相关的参数说明:
第一行:
- 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 | [root@iZm5eae8wzyq0xrh8j2i1eZ ~]# mpstat -P ALL 2 |
网络监控
sar命令
SAR是一个在Unix和Linux操作系统中用来收集、报告和保存CPU、内存、输入输出端口使用情况的命令。SAR命令可以动态产生报告,也可以把报告保存在日志文件中。命令格式:sar -n DEV 3 100
。效果如下:
1 | [root@iZm5eae8wzyq0xrh8j2i1eZ ~]# sar -n DEV 3 100 |
相关参数说明如下:
- IFACE:网络设备的名称
- rxpck/s:每秒钟接收到的包数目
- txpck/s:每秒钟发送出去的包数目
- rxkB/s:每秒钟接收到的字节数
- txkB/s:每秒钟发送出去的字节数
netstat
netstat
命令一般用于检验本机各端口的网络连接情况,用于显示与IP、TCP、UDP和ICMP协议相关的统计数据。
选取部分选项说明如下:
1 | -a, --all, --listening 显示所有连接中的Socket。 |
常用的几种:
1 | $ netstat -aup # 输出所有UDP连接状况 |
df
查看硬盘
uptime
系统启动时间也可以看负载