Linux学习笔记(2月26日)

5.5-5.7 监控Linux系统状态

  1. vmstat
      vmstat可对操作系统的虚拟内存、进程、IO读写、CPU活动等进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。
      指令所在路径:/usr/bin/vmstat
    Linux学习笔记(2月26日)

Procs
  r:等待运行的进程数。如果等待运行的进程数越多,意味着CPU非常繁忙。另外,如果该参数长期大于和等于逻辑cpu个数,则CPU资源可能存在较大的瓶颈。
  b:处在非中断睡眠状态的进程数。意味着进程被阻塞。主要是指被资源阻塞的进程对列数(比如IO资源、页面调度等),当这个值较大时,需要根据应用程序来进行分析,比如数据库产品,中间件应用等。

Memory
  swpd:已使用的虚拟内存大小。如果虚拟内存使用较多,可能系统的物理内存比较吃紧,需要采取合适的方式来减少物理内存的使用。swapd不为0,并不意味物理内存吃紧,如果swapd没变化,si、so的值长期为0,这也是没有问题的。
  free:空闲的物理内存的大小
  buff:用来做buffer(缓存,主要用于块设备缓存)的内存数,单位:KB
  cache:用来做cache(缓存,主要用于缓存文件)的内存,单位:KB
  inact:inactive memory的总量
  active:active memroy的总量。
Swap
  si:从磁盘交换到swap虚拟内存的交换页数量,单位:KB/秒。如果这个值大于0,表示物理内存不够用或者内存泄露了
  so:从swap虚拟内存交换到磁盘的交换页数量,单位:KB/秒,如果这个值大于0,表示物理内存不够用或者内存泄露了
  内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。当看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,这个是不正确的。不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。当内存的需求大于RAM的数量,服务器启动了虚拟内存机制,通过虚拟内存,可以将RAM段移到SWAP DISK的特殊磁盘段上,这样会出现虚拟内存的页导出和页导入现象,页导出并不能说明RAM瓶颈,虚拟内存系统经常会对内存段进行页导出,但页导入操作就表明了服务器需要更多的内存了, 页导入需要从SWAP DISK上将内存段复制回RAM,导致服务器速度变慢。

IO
  bi:每秒从块设备接收到的块数,单位:块/秒 也就是读块设备。
  bo:每秒发送到块设备的块数,单位:块/秒 也就是写块设备。
System
  in:每秒的中断数,包括时钟中断
  cs:每秒的环境(上下文)切换次数。比如我们调用系统函数,就要进行上下文切换,而过多的上下文切换会浪费较多的cpu资源,这个数值应该越小越好。

CPU
  us:用户CPU时间(非内核进程占用时间,单位为百分比)。 us的值比较高时,说明用户进程消耗的CPU时间多
  sy:系统使用的CPU时间(单位为百分比)。sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
  id:空闲的CPU的时间(百分比),在Linux 2.5.41之前,这部分包含IO等待时间。
  wa:等待IO的CPU时间,在Linux 2.5.41之前,这个值为0 .这个指标意味着CPU在等待硬盘读写操作的时间,用百分比表示。wait越大则机器io性能就越差。说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。

  1. sar
    sar是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等,sar命令有sysstat(iostat也属于此包的命令)安装包安装。

sar -u 1 5统计CPU的使用情况,每间隔1秒钟统计1次,总共统计5次
Linux学习笔记(2月26日)%user:用户空间的CPU使用
%nice:改变过优先级的进程的CPU使用率
%system:内核空间的CPU使用率
%iowait:CPU等待IO的百分比
%steal:虚拟机的虚拟机CPU使用的CPU
%idle:空闲的CPU
  在以上的显示当中,主要看%iowait和%idle,%iowait过高表示存在I/O瓶颈,即磁盘IO无法满足业务需求,如果%idle过低表示CPU使用率比较严重,需要结合内存使用等情况判断CPU是否瓶颈。

sar -p 1 5:报个每个CPU的使用状态
Linux学习笔记(2月26日)%user:用户态的CPU使用统计
%nice:更改过优先级的进程的CPU使用统计
%iowait:CPU等待IO数据的百分比
%steal:虚拟机的vCPU占用的物理CPU的百分比
%idle:空闲的CPU百分比

sar -u -o /tmp/1.txt 2 3:保存文件,保存后的文件是二进制的,无法使用vim和cat直接打开;

sar -u -f /tmp/1.txt:从二进制文件读取内容

sar -q:查看平均负载
Linux学习笔记(2月26日)runq-sz:运行队列的长度(等待运行的进程数,每核的CP不能超过3个)
plist-sz:进程列表中的进程(processes)和线程数(threads)的数量
ldavg-1:最后1分钟的CPU平均负载,即将多核CPU过去一分钟的负载相加再除以核心数得出的平均值,5分钟和15分钟以此类推
ldavg-5:最后5分钟的CPU平均负载
ldavg-15:最后15分钟的CPU平均负载

sar -r:查看内存使用情况
Linux学习笔记(2月26日)kbmemfree:空闲的物理内存大小
kbmemused:使用中的物理内存大小
%memused:物理内存使用率
kbbuffers:内核中作为缓冲区使用的物理内存大小,kbbuffers和kbcached:这两个值就是free命令中的buffer和cache
kbcached:缓存的文件大小
kbcommit:保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区)
commit:这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值

sar -W:查看系统swap分区的统计信息
Linux学习笔记(2月26日)pswpin/s:每秒从交换分区到系统的交换页面(swap page)数量
pswpott/s:每秒从系统交换到swap的交换页面(swap page)的数量

sar -b:查看I/O和传递速率的统计信息
Linux学习笔记(2月26日)tps:磁盘每秒钟的IO总数,等于iostat中的tps
rtps:每秒钟从磁盘读取的IO总数
wtps:每秒钟从写入到磁盘的IO总数
bread/s:每秒钟从磁盘读取的块总数
bwrtn/s:每秒钟此写入到磁盘的块总数

sar -d:磁盘使用详情统计
Linux学习笔记(2月26日)DEV:磁盘设备的名称,如果不加-p,会显示dev253-0类似的设备名称,因此加上-p显示的名称更直接
tps:每秒I/O的传输总数
rd_sec/s:每秒读取的扇区的总数
wr_sec/s:每秒写入的扇区的 总数
avgrq-sz:平均每次次磁盘I/O操作的数据大小(扇区)
avgqu-sz:磁盘请求队列的平均长度
await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间
svctm:I/O的服务处理时间,即不包括请求队列中的时间
%util:I/O请求占用的CPU百分比,值越高,说明I/O越慢

sar -n DEV 1 5:统计网络信息,每间隔1秒统计1次,总计统计5次,下面的average是在多次统计后的平均值
Linux学习笔记(2月26日)IFACE:本地网卡接口的名称
rxpck/s:每秒钟接受的数据包
txpck/s:每秒钟发送的数据库
rxKB/S:每秒钟接受的数据包大小,单位为KB
txKB/S:每秒钟发送的数据包大小,单位为KB
rxcmp/s:每秒钟接受的压缩数据包
txcmp/s:每秒钟发送的压缩包
rxmcst/s:每秒钟接收的多播数据包

  1. 其它查看网卡信息的命令:
    nload命令依赖epel-release包,需要先安装epel-release,然后再安装nload,nload可以更直观地查看每块网卡流量的动态信息;nload命令依赖epel-release包,需要先安装epel-release,然后再安装nload,nload可以更直观地查看每块网卡流量的动态信息;
    ethtool+网卡名可以查询网卡参数,ethtool命令也可以设置网卡的参数;
    mii-tool+网卡名可以查看网卡的连接状态;
  2. ps命令:
    ps命令用来列出系统中当前运行的进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。ps为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的,如果想对进程时间监控,应该用 top工具。

Linux上进程有5种状态:

  1. 运行‘R’(正在运行或在运行队列中等待)
  2. 中断‘S’(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  3. 不可中断‘D’(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  4. 僵死‘Z’(进程已终止, 但进程描述符存在)
  5. 停止‘T’(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

命令参数:
  -aux:显示所有包含其他使用者的行程
  -elf:以长格式、完整格式列出所有进程
  -eLf:以完整格式列出所有进程及线程
STAT的一些状态信息:
  s —— 父进程
  N —— 低优先级
  < —— 高优先级
  + —— 前台进程
  l —— 多线程进程
查看进程的详细信息,还可以使用ls -l /proc/pid/