七周一次课(1月22日)

10.1 使用w查看系统负载

10.2 vmstat命令

10.3 top命令

10.4 sar命令

10.5 nload命令

众所周知,生病了需要去医院看病,大夫首先要询问我们哪里不舒服,然后再通过观察和自己的经验,大体上就能判定我们得的是什么病。然而Linux不会说话,它不会主动告诉我们哪里出现了问题,需要我们自己去观察。那么如何评估系统运行状态是否良好呢?下面阿铭就介绍一些帮我们分析系统状态的工具。

10.1 使用w查看系统负载

2018.1.22 7周1次课_学习

相信所有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

2018.1.22 7周1次课_Linux_02

查看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这几列信息

2018.1.22 7周1次课_学习_03

  1. procs显示进程的相关信息

  • r (run):表示运行或等待CPU时间片的进程数。大家不要误认为等待CPU时间片意味着这个进程没有运行,实际上某一时刻1个CPU只能有一个进程占用,其他进程只能排着队等着,此时这些排队等待CPU资源的进程依然是运行状态该数值如果长期大于服务器CPU的个 数,则说明CPU资源不够用了

  • b (block):表示等待资源的进程数,这个资源指的是I/O、内存等。举个例子,当磁盘读写非常频繁时,写数据就会非常慢,此时CPU运算很快就结束了,但进程需要把计算的结果写入磁盘,这样进程的任务才算完成,那此时这个进程只能慢慢地等待磁盘了,这样这个进程就是这个b状态。该数值如果长时间大于1,则需要关注一下了。

  1. memory显示内存的相关信息

  • swpd:表示切换到交换分区中的内存数量,单位为KB。

  • free:表示当前空闲的内存数量,单位为KB

  • buff:表示(即将写入磁盘的)缓冲大小,单位为KB

  • cache:表示(从磁盘中读取的)缓存大小,单位为KB

2018.1.22 7周1次课_Linux_04

  1. swap显示内存的交换情况

2018.1.22 7周1次课_学习_05

  • si:表示由交换区写入内存的数据量,单位为KB

2018.1.22 7周1次课_学习_06

  • so:表示由内存写入交换区的数据量,单位为KB

  1. io显示磁盘的使用情况

  • bi:表示从块设备读取数据的量(读磁盘),单位为KB

  • bo:表示从块设备写入数据的量(写磁盘),单位为KB

  1. system显示采集间隔内发生的中断次数

  • in:表示在某一时间间隔内观测到的每秒设备的中断次数

  • cs:表示每秒产生的上下文切换次数

  1. 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查看系统状态时,通常都是使用如下形式

2018.1.22 7周1次课_Linux_07

2018.1.22 7周1次课_学习_08

10.3 top命令显示进程所占用的系统资源

top命令用于动态监控进程所占的系统资源,每隔3秒变一次。它的特点是把占用系统资源(CPU、内存、磁盘I/O等)最高的进程放到最前面。top命令打印出了很多信息,包括系统负载(load average)、进程数(Tasks)、CPU使用情况、内存使用情况以及交换分区使用情况。这些内容其实可以通过其他命令来查看,用top重点查看的还是下面的进程使用系统资源的详细状况,其中你需要关注%CPU、%MEM和COMMAND这几项所代表的意义。RES这一项为进程所占的内存大小,而%MEM这一项为使用内存的百分比。

2018.1.22 7周1次课_Linux_09

第一行:

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文件,是哪一天就以那天的数字结尾。

2018.1.22 7周1次课_Linux_10

  1. 查看网卡流量 sar -n DEV

2018.1.22 7周1次课_Linux_11

这个命令会把当天记录的网卡信息打印出来,每隔10分钟记录一次。

IFACE:这一列表示设备名称

rxpck/s:这一列表示每秒进入收取的包的数量

txpck/s:这一列表示每秒发送出去的包的数量

rxkB/s:这一列表示每秒收取的数据量(单位为KB)

txkB / s这一列表示每秒发送的数据量

后面几列不需要关注

如果有一天服务器丢包非常严重,那么你就应该查一下网卡流量是否异常了。如果 rxpck/ s那一列的数值大于4000,或者rxkB/ s那一列的数值大于5000000,很有可能是被攻击了。正常的服务器网卡流量不会这么高,除非是你自己在复制数据。

另外也可以使用-f选项查看某一天的网卡流量历史,后面跟文件名。sar的库文件一定在/var/log/sa目录下。文件最多保留1个月

2018.1.22 7周1次课_Linux_12

  1. 查看历史负载 sar -q 有助于我们查看服务器在过去某个时间的负载状况

2018.1.22 7周1次课_学习_13

  1. 磁盘读写 sar –b

2018.1.22 7周1次课_学习_14

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命令,然后回车就会出现动态的界面,很直观

2018.1.22 7周1次课_学习_15

最上面一行为网卡名字以及IP地址,向右箭头可以查看其他网卡的网络流量。输出结果分为两部分,Incoming为进入网卡的流量,Outgoing为网卡出去的流量,我们关注的当然是curr那行的数据,其单位也可以动态自动调整,非常人性化。按q退出该界面