大多数Linux发行版本都装备了大量的监控工具,这些工具提供了能用作取得相关信息和系统活动的量度指标。下面我们将详细解释命令中各字段的含义。
分类
网络类:netstat、ss
进程类:ps
cpu:mpstat、uptime
内存:free、vmstat、pmap
磁盘:iostat
综合:top、sar
1.top - 进程活动
[root@node2 ~]# top top - 16:33:07 up 3:01, 2 users, load average: 0.00, 0.00, 0.00 Tasks: 154 total, 1 running, 153 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 2054528k total, 1891708k used, 162820k free, 102968k buffers Swap: 2621432k total, 8k used, 2621424k free, 1310284k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 13103 root 20 0 15036 1264 944 R 0.3 0.1 0:00.01 top 1 root 20 0 19356 1444 1132 S 0.0 0.1 0:01.37 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
PID:进程的唯一的进程ID
USER:这个进程的执行者的身份
PR:这个进程的优先级,RT的意思是realtime,表示这是个实时进程
NI:这个任务的nice值
VIRT:这个进程占用的虚拟内存大小,包括这个进程所有的代码、数据、共享库以及被置换到swap分区中的页
Linux中,页(page)是内核中内存基本管理单元,每个page的内存大小是固定的,对于x86来说,page是4k
RES:进程占用的物理内存大小,不包括swap
SHR:进程占用的共享内存的大小,共享内存就是多个进程可能都可以使用的内存空间
S:进程的状态,D=无法中断式睡眠,R=正在运行,S=睡眠状态,T=停止状态,Z=僵尸状态
TIME+:占用的CPU的时间,例如:第一个是0.01s,第二个是1.37s
2.vmstat - 系统活动、硬件以及系统信息
[root@node2 ~]# vmstat 1 5 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 8 162828 103224 1310288 0 0 854 453 78 252 1 1 94 4 0 0 0 8 162820 103224 1310288 0 0 0 0 45 21 0 0 100 0 0
proc(r):等待运行的进程的数量
proc(b):处于无法中断式睡眠的进程的数量
memory(swpd):已使用的swap分区的数量
memory(free):可用的内存大小
memory(buff):用作buff的内存的大小
memory(cache):用作cache的内存的大小
区别:Buffers(缓冲区)为还没有写入硬盘,cached(缓存)为已被从硬盘中读取和存入硬盘以备使用。
swap(si):每秒从磁盘的swap分区读到内存的数量
swap(so):每秒从内存写到swap分区的内存大小
io(bi):每秒从磁盘读取的块数
io(bo):每秒写入磁盘的块数
system(in):每秒中断数,包括时钟中断
system(cs):每秒上下文切换的数量
cpu(us):用户进程执行时间
cpu(sy):系统进程执行时间
cpu(id):空闲时间
cpu(wa):IO等待的时间
cpu(st):虚拟机占用的时间,安装了KVM等虚拟化并开启了虚拟机,虚拟机占用的CPU
PS:如果system(in)比较高,而system(cs)比较低,这时就要看proc(r),即run queue的数量,如果这个数量也比较低,说明某个进程可能霸占着CPU(不断请求资源)。
如果system(in)比较低,而system(cs)比较高,正在运行的应用程序调用了大量的系统调用(system call)。
3.uptime
[root@node2 ~]# uptime 17:15:14 up 3:43, 3 users, load average: 0.00, 0.00, 0.00
17:15:14指当前的系统时间
up 3:43:开机3小时43分钟了
3 users:当前有3个用户在线
load average:过去1min、5min、15分钟系统的平均负载
一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果你的主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重。
4.ps - 显示进程
[root@node2 ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 19356 1444 ? Ss 13:31 0:01 /sbin/init [root@node2 ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 13:31 ? 00:00:01 /sbin/init
VSZ:进程占用的虚拟内存大小,单位KB
RSS:进程占用的物理内存,不包括swap,单位KB
STAT:进程的状态,S: sleeping | s: session leader | <: high priority | N:Low priority
l: multithread | +: 前台进程组中的进程 | D: uninterruptible sleeping | R: running or runnable | T: stopped | Z: zombie
START:进程开始的时间
TIME:进程累积占用CPU的时间
COMMAND:开启该进程的命令,加了[ ]表示是内核调度的进程
PPID:该进程的父进程的ID
C:就是cpu%,可以使用dd if=/dev/zero of=/dev/null进行测试
STIME:和START相同
5.free - 查看内存
[root@mysql ~]# free total used free shared buffers cached Mem: 1914684 646936 1267748 0 11360 68468 -/+ buffers/cache: 567108 1347576 Swap: 4095992 0 4095992
6.iostat - cpu负载,硬盘活动
[root@oracle ~]# iostat 1 5 Linux 3.0.101 (oracle) 02/17/2014 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.21 0.00 0.12 0.07 0.00 99.59 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn scd0 0.00 0.00 0.00 184 0 sda 1.71 3.46 40.10 1868770 21654300 dm-0 3.20 3.44 40.09 1860106 21649128 dm-1 0.00 0.00 0.01 2576 5144
%user:用户占用的CPU使用率的百分比
%nice:调度用户进程nice所占用的CPU使用率的百分比
%system:系统占用的CPU使用率的百分比
%iowait:系统有一个未解决的磁盘I/O请求占用的CPU使用率的百分比
%steal:安装了KVM等虚拟化并开启了虚拟机,虚拟机占用的CPU
%idle:空闲的CPU使用率的百分比
tps:每秒传输的数据量,后面几个比较好理解,不提了
7.mpstat - 查看cpu的状态
[root@oracle ~]# mpstat 1 5 Linux 3.0.101 (oracle) 02/17/2014 _x86_64_ (1 CPU) 07:44:41 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 07:44:42 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 07:44:43 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 07:44:44 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 07:44:45 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 07:44:46 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
8.pmap - 进程的内存使用
[root@oracle ~]# pmap -x 30772 30772: sshd: root Address Kbytes RSS Dirty Mode Mapping 00007f667e501000 1280 4 4 rw-s- zero (deleted) 00007f667e641000 16 16 0 r-x-- pam_limits.so 00007f667e645000 2044 0 0 ----- pam_limits.so #pmap -x PID
[root@oracle ~]# pmap -d 30779 30779: sshd: root@pts/0,pts/1 Address Kbytes Mode Offset Device Mapping 00007fcc21679000 1280 rw-s- 0000000000000000 000:00004 zero (deleted) 00007fcc217b9000 16 r-x-- 0000000000000000 0fd:00000 pam_limits.so 00007fcc217bd000 2044 ----- 0000000000004000 0fd:00000 pam_limits.so
Address:内存开始地址
Kbytes:占用内存的字节数(KB)
RSS:保留内存的字节数(KB)
Dirty:脏页的字节数(包括共享和私有的)(KB)
Mode:内存的权限:read、write、execute、shared、private (写时复制)
Mapping:占用内存的文件、或[anon](分配的内存)、或[stack](堆栈)
Offset:文件偏移
Device:设备名,主设备号:从设备号(major:minor)
9.netstat - 网络相关信息
[root@oracle ~]# netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1280/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1122/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1368/master tcp 0 0 0.0.0.0:49755 0.0.0.0:* LISTEN 1090/rpc.statd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1046/rpcbind tcp 0 0 :::22 :::* LISTEN 1280/sshd
10.ss - 网络相关
可以显示网络套接字信息,和netstat差不多,具体可以看使用帮助
11.sar - 综合监控
Alias sar=’LANG=C sar’
Sar -q 报告CPU的负载信息
Sar -b 报告磁盘I/O和传输速率
Sar -P 0 报告第一个核心的详细信息
Sar -n DEV|EDEV DEV是报告网络的状态
EDEV是报告网络错误的状态,正常的情况下都是0