监控系统命令
1. w命令
w含义:用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。
学习如何监控系统状态,是因为作为一个运维工程师需要了解 Linux 系统运行时的各种信息和状态,当出现问题的时候就能够查找出问题的所在,这样才能对症下药的去解决。
- w 命令可以查看当前系统的负载
相信所有的 linux 管理员最常用的命令就是这个 w 了,该命令显示的信息还是蛮丰富的。我们最应该关注的应该是第一行中的 load average :后面的三个数值,第一个数值表示 1 分钟内系统的平均负载值;第二个数值表示 5 分钟内系统的平均负载值;第三个数值表示 15 分钟系统的平均负载值。
[root@sc ~]# w
12:45:05 up 1:50, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 10:56 1:48m 0.05s 0.05s -bash
root pts/0 192.168.94.1 10:57 1.00s 0.10s 0.00s w
第一行显示系统的汇总信息,字段分别表示系统当前时间、系统运行时间、登陆系统用户总数及系统平均负载信息。对于如上图显示的字段意义为:
12:45:05 #表示执行 w 的时间是在下午12点45分05秒。
up 1:50 #表示系统运行1小时50分。
2 users #表示当前系统登陆用户总数为 2。
load average: 0.00, 0.01, 0.05 #与后面的数字一起表示系统在过去 1,5,10 分钟内的负载程度,数值越小,系统负载越轻。
从第二行开始构成一个登录用户信息列表,共有8个栏目,分别显示各个用户正在做的事情及该用户所占用的系统资源:
USER #显示登陆用户帐号名。用户重复登陆,该帐号也会重复出现。
TTY #用户登陆所用的终端。
FROM #显示用户在何处登陆系统。
LOGIN@ #是 LOGIN AT 的意思,表示登陆进入系统的时间。
IDLE #用户空闲时间,从用户上一次任务结束后,开始记时。
JCPU #以终端代号来区分,表示在这段时间内,所有与该终端相关的进程任务所耗费的 CPU 时间。
PCPU #指 WHAT 域的任务执行后耗费的 CPU 时间。
WHAT #表示当前执行的任务。
查看某用户是否登陆系统用户很多的时候,可以在 w 后面加上某个用户名,则会查看该用户执行任务的情况。
- 使用 cat /proc/cpuinfo 此命令可查看系统的 CPU 数量,显示的是逻辑 CPU 数量,不是物理 CPU 数量
如果CPU 数量为 0 那么数值不超过 1 是最理想,也就是说负载数值不超过 CPU 的数量是最好的,如果负载数值大于 CPU 数量的话,那么就会有进程需要进行等待。
- lscpu命令 查看 cpu 汇总详细信息
[root@master proc]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 61
Model name: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
Stepping: 4
CPU MHz: 2699.797
BogoMIPS: 5399.59
Hypervisor vendor: VMware
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap xsaveopt arat spec_ctrl intel_stibp flush_l1d arch_capabilities
- uptime 命令也能够查看系统负载情况,不过查看不了用户的登录信息,所以大部分情况下都是用 w 命令
2. vmstat命令
vmstat介绍:可对操作系统的虚拟内存、进程、CPU活动进行监控。是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析(综合工具,断定瓶颈点)。
- 当系统负载值偏高的时候,CPU 不够用了,想要知道是哪些进程在使用着 CPU,可以使用 vmstat 命令查看
- 一般使用 vmstat 命令的时候会加个数字 1 ,表示每一秒显示一次,动态的显示信息也可以
- 也可以再加一个数字定义显示几次就结束,例如我只需要显示 5 次就结束
[root@sc ~]# 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
2 0 0 698288 2076 160956 0 0 13 2 32 60 0 0 100 0 0
0 0 0 698288 2076 160956 0 0 0 0 55 74 0 0 100 0 0
0 0 0 698288 2076 160956 0 0 0 0 37 53 0 1 99 0 0
0 0 0 698288 2076 160956 0 0 0 0 30 34 0 0 100 0 0
0 0 0 698288 2076 160956 0 0 0 0 31 47 0 0 100 0 0
Procs(进程):
r:(run,运行) 表示运行或等待 CPU 时间片的进程数。
b:(block,块)表示等待资源的进程数,这个资源指的是 I/O、内存等。
Memory(内存):
swpd:当内存不够时,系统可以拿出内存总的一部分数据临时放到 swap 交换分区里去。如果 swpd 值一直交换时,说明交换分区和内存在频繁的交换数据,代表内存不够了。
free:表示当前空闲的内存数量,单位为 KB。
buff:表示(即将写入磁盘的)缓冲大小,单位为 KB。
cache:表示(从磁盘中读取的)缓存大小,单位为 KB。
swap(虚拟磁盘交换分区):
si:有多少 k 的块数据,从 swap 进入到内存中。
so:有多少 k 的块数据,从内存中进到 swap。
注意:如果 swpd 在频繁变换时,这两个值肯定也会变动。
IO(磁盘):
bi:有多少 k 的数据,从磁盘进入到内存中。
bo:有多少 k 的数据,从内存吸入到磁盘。
注意:随机磁盘读写的时候,这 2 个值越大(如超出1024k),能看到 CPU 在 IO 等待的值也会越大。
system(系统):
in:表示在某一时间间隔内观测到的每秒设备的中断次数。
cs:表示每秒产生的上下文切换数。
注意:这两个数值很大时,说明磁盘再频繁的读写。跟 CPU 和内存比,磁盘是很慢的,如果很频繁的读些数据会导致 b 列的增加。因为有很多进程在等待磁盘。
CPU(以百分比表示):
us:用户级别的,数字不会超过 100,百分比表示用户的资源占用 CPU 的百分比,
如果数字大于 50,说明系统肯定资源不够。
sy:系统本身的一些进程、服务、占用资源的百分比。
id:表示 CPU 处于空闲状态的时间百分比,us+sy+id+wa=st=100。
wa:wait 有多少进程在等待 CPU 的百分比。
st:表示被偷走的 CPU 所占百分比(一般都为0,不用关注)。
3. top命令
top含义:是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
- top 命令可以具体查看进程使用资源情况,top 命令是三秒钟更新一次信息,是动态显示的
[root@sc ~]# top
top - 14:56:20 up 1:28, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 99 total, 1 running, 98 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
KiB Mem : 1005628 total, 706416 free, 138456 used, 160756 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 695476 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
第一行:top - 14:56:20 up 1:28, 3 users, load average: 0.00, 0.01, 0.05
14:56:20:当前时间。
up 1:28:系统已运行的时间。
3 users:当前登录用户的数量。
load average: 0.00, 0.01, 0.05:相应最近1、5和15分钟内的平均负载。
第二行:Tasks: 99 total, 1 running, 98 sleeping, 0 stopped, 0 zombie
系统现在total(共计)99个进程。
其中处于running(运行)中的有1个。
98个在休眠(sleep)。
stoped状态的有0个。
zombie状态(僵尸)的有0个。
第三行:%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
us #user,运行(未调整优先级的) 用户进程的CPU时间
sy #system,运行内核进程的CPU时间
ni #niced,运行已调整优先级的用户进程的CPU时间
wa #IO wait,用于等待IO完成的CPU时间
hi #处理硬件中断的CPU时间
si #处理软件中断的CPU时间
st #这个虚拟机被hypervisor偷去的CPU时间
(译注:如果当前处于一个 hypervisor 下的 vm ,实际上 hypervisor 也是要消耗一部分 CPU 处理时间的)。
第四行:KiB Mem : 1005628 total, 706416 free, 138456 used, 160756 buff/cache
Men物理内存:
1005628k total — 物理内存总量(1005M)
706416k free — 空闲内存总量(706M)
138456k used — 使用中的内存总量(138M)
160756k buff/cache — 缓存的内存量 (106M)
第五行:KiB Swap: 2097148 total, 2097148 free, 0 used. 695476 avail Mem
Swap交换分区:
2097148k total — 交换区总量(2097M)
2097148k free — 空闲交换区总量(2097M)
0k used — 使用的交换区总量(0)
695476k avail Mem — 可用内存(69M)
第六行:PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID:进程 ID,进程的唯一标识符
USER:进程所有者的实际用户名。
PR:进程的调度优先级,这个字段的一些值是 'rt' ,这意味这这些进程运行在实时态。
NI:进程的 nice 值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES:驻留内存大小,驻留内存是任务使用的非交换物理内存大小,进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR:SHR 是进程使用的共享内存。共享内存大小,单位 kb
S:这个是进程的状态。它有以下不同的值:
D - 不可中断的睡眠态。
R – 运行态
S – 睡眠态
T – 被跟踪或已停止
Z – 僵尸态
%CPU:自从上一次更新时到现在任务所使用的 CPU 时间百分比。
%MEM:进程使用的可用物理内存百分比。
TIME+:任务启动后到现在所使用的全部 CPU 时间,精确到百分之一秒。
COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)
还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组 ID 和其他更多的信息。
- top 里按 Shift+m 使用内存使用率来排序,同样的是由高到低
- top 里按 Shift+p 切换回按CPU排序
- top 里按数字 1,会列出所有的逻辑 CPU 使用情况
再按 1 则切换回平均值的查看方式:
- top -c 可以看到具体的进程、命令、全局的路径
- top -bn1 可以静态地显示,会一次性地把所有的进程信息都列出来,一般适合在写脚本的时候使用
4. sar命令
sar介绍:监控系统状态(外号:瑞士军刀)。
- sar 是一个非常全面的分析系统状态的命令,sar 被称做 Linux 系统里的“瑞士军刀”,也即是说这个命令的功能非常的复杂和丰富