从零开始缓慢深入Linux - 基础指令篇(3)

Linux下常用性能监控指令

概述

运维的职责之一就是排查故障,而排查故障意味着我们必须要有能够及时定位问题的能力。如果对操作系统的本身的性能状态后知后觉,那又从何谈起故障排除呢?学会使用合适的工具来监控服务器的性能状态,就变成了对于运维而言的一个硬性的要求。这里我们就来看一下常用的几种查看我们性能状态的指令。

监控CPU状态指令

常用指令:top、atop、htop、lscpu、numactl

涉及文件:/proc/cpuinfo

运行top的时候会看到这么一行:
%Cpu(s):  1.9 us,  1.5 sy,  0.0 ni, 96.4 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
按1则会将单个cpu的信息显示出来:
%Cpu0  :  1.4 us,  2.1 sy,  0.0 ni, 96.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  2.0 us,  2.0 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  1.6 us,  1.8 sy,  0.0 ni, 96.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  2.0 us,  2.0 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
0.0 st
%Cpu4  :  11.7 us,  2.4 sy,  0.0 ni, 96.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  2.0 us,  2.0 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :  1.4 us,  2.1 sy,  0.0 ni, 96.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :  2.0 us,  2.0 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

us 用户空间占用CPU百分比
sy 内核空间占用CPU百分比
ni 用户进程空间内改变过优先级的进程占用CPU百分比
id 空闲CPU百分比
wa 等待输入输出的CPU时间百分比
hi 硬件中断
si 软件中断 

[root@foundation0 ~]# lscpu
Architecture:          x86_64 
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2 # 个数
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Model name:            Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
Stepping:              3
CPU MHz:               3600.009
BogoMIPS:              7200.01
Virtualization:        VT-x
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0,1
# 通过lscpu可以看到cpu的频率,版本,核数和缓冲等数据。

这里可以看到几个关键数据

  1. cpu的缓冲:是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。主要为了解决CPU运算速度比内存速度更快的问题,避免cpu花费很长时间等待数据写入内存,通常这部分数据是cpu即将访问到的数据。

    cpu缓冲分为L1(性价比低),L2(原则越大越好)和L3(二级缓冲未命中后的一种缓冲)

  2. numa参数

    numa把一台计算机分成多个节点(node),每个节点内部拥有多个CPU,节点内部使用共有的内存控制器,节点之间是通过互联模块进行连接和信息交互。因此节点的所有内存对于本节点所有的CPU都是等同的。对于其他节点中的所有CPU都不同。因此每个CPU可以访问整个系统内存,但是访问本地节点的内存速度最快(不经过互联模块),访问非本地节点的内存速度较慢(需要经过互联模块),即CPU访问内存的速度与节点的距离有关,该距离成为Node Distance。

    假设我们当前状态是这样的:

    Thread(s) per core:    2                               # 每个core有2个threads  
    Core(s) per socket:    6                               # 每个socket有6个cores  
    Socket(s):             4                               # 共有4个sockets  
    NUMA node(s):          4                               # 共有4个NUMA nodes  
    NUMA node0 CPU(s):     0-5,24-29        
    NUMA node1 CPU(s):     6-11,30-35  
    NUMA node2 CPU(s):     12-17,36-41  
    NUMA node3 CPU(s):     18-23,42-47 
    

    从上表我们可以看到,numa处于开启的状态,并且我们的每个numa节点里有12个cpu。打开numa容易面临CPU节点之间内存分配不均衡的问题,因为numa默认的内存分配策略是优先在进程所在CPU的本地内存中分配。当某个CPU节点内存不足时,会导致swap产生,而不是从远程节点分配内存。所以像mysql之类的服务都是关闭numa模式的。

    可在bios里面关闭numa,或者在启动文件grub里指定numa=off。numa状态也可通过numactl获取。

监控内存使用情况指令

常用指令:free,swapon,top,vmstat,sar

涉及文件:/proc/meminfo

[root@foundation0 ~]# free -m # 以M为单位显示内存
              total        used        free      shared  buff/cache   available
Mem:           5857        3562         301          75        1993        1940
Swap:          8064           5        8059
		      #总内存	     #已使用    #空闲内存   #多个进程  #磁盘缓存的大小 #可以使用的内存总量
		       									#共享的内存
		       									#总额

内存分成物理内存和swap,swap是以磁盘模拟空间提供给内存用的方式,故该方式会直接导致性能下降。

free和available的区别:

Free:空闲内存数,表示系统尚未使用的内存。

Available:应用程序可用内存数。系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以MemFree不能代表全部可用的内存,这部分可回收的内存加上Free才是系统可用的内存,是一个估计值。

buffer和cache的区别:

buffer的核心作用是用来缓冲,假设你将数据写入磁盘,实时同步写入会导致磁盘io消耗过大且磁盘利用率低,那可以选择将数据先存放在buffer里,变成异步模式,对系统的磁盘利用率和整体的性能就变高了。

cache的核心作用是缓存,旨在加快数据取用的速度。比如你做了一些运算,该计算的结果需要被反复调用,那我们就可以将这个数据存入cache,加速数据取用的速度。

通常我们会看到write-buffer和read-cache,但并不代表buffer不可以参与读,cache不可以参与写。

vmstat的用法:
 vmstat [-a] [-n] [-S unit] [delay [ count]]
       vmstat [-s] [-n] [-S unit]
       vmstat [-m] [-n] [delay [ count]]
       vmstat [-d] [-n] [delay [ count]]
       vmstat [-p disk partition] [-n] [delay [ count]]
       vmstat [-f]
       vmstat [-V]
      
举例:
[root@Foundation0 ~]# vmstat -a 2 10 # 开启显示active/inactive memory,每两秒输出一条
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值