七周一次课(1月22日)
10.1 使用w查看系统负载
10.2 vmstat命令
10.3 top命令
10.4 sar命令
10.5 nload命令
众所周知,生病了需要去医院看病,大夫首先要询问我们哪里不舒服,然后再通过观察和自己的经验,大体上就能判定我们得的是什么病。然而Linux不会说话,它不会主动告诉我们哪里出现了问题,需要我们自己去观察。那么如何评估系统运行状态是否良好呢?下面阿铭就介绍一些帮我们分析系统状态的工具。
10.1 使用w查看系统负载
相信所有Linux管理员最常用的命令就是这个w了,该命令显示的信息很丰富。
第1行从左至右显示的信息依次为:时间(红框)、系统运行时间(黄框)、登录用户数(蓝框)、平均负载(白框)。
从第2行开始的所有行则是告诉我们:当前登录的用户名及其登录地址等。
其实在这些信息中,最应该关注第1行中的load average:后面的3个数值。
第1个数值表示1分钟内系统的平均负载值,第2个数值表示5分钟内系统的平均负载值,第3个数值表示15分钟内系统的平均负载值 我们着重看第1个值,它表示单位时间段内使用CPU的活动进程数 ( 在这里其实就是1分钟内 ),值越大就说明服务器压力越大。一般情况下,这个值只要不超过服务器的CPU数量就没有关系。如果服务器的CPU数量为8,那么值小于8就说明当前服务器没有压力;否则就要关注一下了。
命令格式:w [-fhlsuV][用户名称]
参数
-h 不显示标题。
-u 列出当前进程和CPU时间时忽略用户名。这主要是用于执行su命令后的情况。
-s 使用短模式。不显示登录时间、JCPU(终端机阶段作业)和PCPU(程序消耗)时间。
-f 切换显示FROM项,也就是远程主机名项。默认值是不显示远程主机名
-V 显示版本信息。
使用说明:
User:登录用户名 TTY:登录后系统分配的终端号 From:远程主机名,即从哪登录的 login@:何时登录 IDLE:用户空闲时间。这是个计时器,一旦用户执行任何操作,改计时器就会被重置。 JCPU:和终端连接的所有进程占用时间。包括当前正在运行的后台作业占用时间 PCPU:当前进程所占用时间 WHAT:当前正在运行进程的命令行
类似命令:uptime
查看cpu核数:cat /proc/cpuinfo
/proc/cpuinfo这个文件记录了CPU的详细信息。目前市面上的服务器有很多是2颗多核CPU,在Linux看来,它就是2*n个CPU(这里的n为单颗物理CPU上有几核)。假如n是4,则查看这个文件时会显示8段类似的信息,而最后一段信息的processor:后面会显示7。所以查看当前系统有几个CPU,我们可以使用命令grep -c 'processor' /proc/cpuinfo。然而查看有几颗物理CPU时,则需查看关键字physical id。
10.2 vmstat命令监控系统的状态
命令w查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力。但它无法判断具体是哪里(CPU、内存、磁盘等)有压力,所以这就用到了vmstat。vmstat命令打印的结果共分为6 分:procs、memory、swap、io、system和cpu。请重点关注一下r、b、si、so、bi、bo这几列信息
procs显示进程的相关信息
r (run):表示运行或等待CPU时间片的进程数。大家不要误认为等待CPU时间片意味着这个进程没有运行,实际上某一时刻1个CPU只能有一个进程占用,其他进程只能排着队等着,此时这些排队等待CPU资源的进程依然是运行状态该数值如果长期大于服务器CPU的个 数,则说明CPU资源不够用了
b (block):表示等待资源的进程数,这个资源指的是I/O、内存等。举个例子,当磁盘读写非常频繁时,写数据就会非常慢,此时CPU运算很快就结束了,但进程需要把计算的结果写入磁盘,这样进程的任务才算完成,那此时这个进程只能慢慢地等待磁盘了,这样这个进程就是这个b状态。该数值如果长时间大于1,则需要关注一下了。
memory显示内存的相关信息
swpd:表示切换到交换分区中的内存数量,单位为KB。
free:表示当前空闲的内存数量,单位为KB
buff:表示(即将写入磁盘的)缓冲大小,单位为KB
cache:表示(从磁盘中读取的)缓存大小,单位为KB
swap显示内存的交换情况
si:表示由交换区写入内存的数据量,单位为KB
so:表示由内存写入交换区的数据量,单位为KB
io显示磁盘的使用情况
bi:表示从块设备读取数据的量(读磁盘),单位为KB
bo:表示从块设备写入数据的量(写磁盘),单位为KB
system显示采集间隔内发生的中断次数
in:表示在某一时间间隔内观测到的每秒设备的中断次数
cs:表示每秒产生的上下文切换次数
cpu显示CPU的使用状态
us:显示用户下所花费CPU的时间百分比的
sy:显示系统花费CPU的时间百分比
id:表示CPU处于空闲状态的时间百分比
wa:表示I/O等待所占用CPU的时间百分比
st: 表示被偷走的CPU所占百分比 (一般都为0,不用关注)。
us+sy+id=100
以上所介绍的各个参数中,需要经常会关注r、b和wa这3列。io部分的bi和bo也是要经常参考的对象,如果磁盘io压力很大,这两列的数值会比较高。另外,当si和so两列的数值比较高并且不断变化说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。
我们使用vmstat查看系统状态时,通常都是使用如下形式
10.3 top命令显示进程所占用的系统资源
top命令用于动态监控进程所占的系统资源,每隔3秒变一次。它的特点是把占用系统资源(CPU、内存、磁盘I/O等)最高的进程放到最前面。top命令打印出了很多信息,包括系统负载(load average)、进程数(Tasks)、CPU使用情况、内存使用情况以及交换分区使用情况。这些内容其实可以通过其他命令来查看,用top重点查看的还是下面的进程使用系统资源的详细状况,其中你需要关注%CPU、%MEM和COMMAND这几项所代表的意义。RES这一项为进程所占的内存大小,而%MEM这一项为使用内存的百分比。
第一行:
20:09:18 — 当前系统时间
1:41— 系统已经运行了1小时41分钟(在这期间没有重启过)
1 users — 当前有1个用户登录系统
load average: 0.00, 0.01, 0.05 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
第二行:
Tasks — 任务(进程),系统现在共有119个进程,其中处于运行中的有1个,118个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
第三行:cpu状态
0.0% us — 用户空间占用CPU的百分比。
0.1% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
99.9% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si — 软中断(Software Interrupts)占用CPU的百分比
第四行:内存状态
3865304k total — 物理内存总量
3538468k free — 空闲内存总量
148860k used — 使用中的内存总量
177976k buffers — 缓存的内存量
第五行:swap交换分区
8388604k total — 交换区总量
8388604k free — 空闲交换区总量
0k used — 使用的交换区总量
3482120k cached — 缓冲的交换区总量
第七行以下:各进程(任务)的状态监控
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
在top状态下,按大写M键可以按照内存使用大小排序。大写字母P按cpu使用排序。按数字1可以列出所有核 CPU的使用状态,按q键可以退出top。按b键打开或关闭加亮效果。按y键关闭或打开运行态进程的加亮效果。按x键打开或关闭排序列的加亮效果。按shift + >或shift + <可以向右或左改变排序列。敲击“f”键,top进入另一个视图,在这里可以编排基本视图中的显示字段。
top -c 显示详细的进程信息
top -bn1 静态显示所有进程。它表示非动态打印系统资源的使用情况。和top命令唯一的区别就是,它一次性输出所有信息而非动态显示。
10.4 sar命令监控系统状态
sar命令很强大,它可以监控系统几乎所有资源的状态,比如平均负载、网卡流量、磁盘状态、内存使用等。与其他系统状态监控工具不同,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。
如果你的系统没有安装这个命令,请使用命令yum install -y sysstat安装。
初次使用sar命令会报错,那是因为sar工具还没有生成相应的数据库文件(无需实时监控,因为不用去查询那个库文件)。它的数据库文件在/var/log/sa目录下 。每隔10分钟会自动生成数据库文件,本例是sa22文件,是哪一天就以那天的数字结尾。
查看网卡流量 sar -n DEV
这个命令会把当天记录的网卡信息打印出来,每隔10分钟记录一次。
IFACE:这一列表示设备名称
rxpck/s:这一列表示每秒进入收取的包的数量
txpck/s:这一列表示每秒发送出去的包的数量
rxkB/s:这一列表示每秒收取的数据量(单位为KB)
txkB / s这一列表示每秒发送的数据量
后面几列不需要关注
如果有一天服务器丢包非常严重,那么你就应该查一下网卡流量是否异常了。如果 rxpck/ s那一列的数值大于4000,或者rxkB/ s那一列的数值大于5000000,很有可能是被攻击了。正常的服务器网卡流量不会这么高,除非是你自己在复制数据。
另外也可以使用-f选项查看某一天的网卡流量历史,后面跟文件名。sar的库文件一定在/var/log/sa目录下。文件最多保留1个月
查看历史负载 sar -q 有助于我们查看服务器在过去某个时间的负载状况
磁盘读写 sar –b
sar命令的数据库文件目录/var/log/sa下,生成的sa22开头的二进制文件。无法用cat命令查看,只用-f选项加载它。
第二天会在当前目录下生成sar开头的文件,这个文件是可以用cat命令打开。
10.5 nload命令查看网卡流量
sar虽然可以查看网卡流量,但是不够直观,还有一个更好用的工具,那就是nload。系统没有默认安装它,安装方法如下:
yum install -y epel-release; yum install -y nload
要想安装nload,前提是先安装epel-elease包,nload包是在epel这个扩展源里面的。以后在工作中,你一定会经常使用epel扩展源安装一些软件包,非常方便。安装完之后,直接运行nload命令,然后回车就会出现动态的界面,很直观
最上面一行为网卡名字以及IP地址,向右箭头可以查看其他网卡的网络流量。输出结果分为两部分,Incoming为进入网卡的流量,Outgoing为网卡出去的流量,我们关注的当然是curr那行的数据,其单位也可以动态自动调整,非常人性化。按q退出该界面