Linux系统性能监控之CPU

关注点

首先,我们来看监控CPU运行状况时需要关注的几个:

  1. CPU使用率:
    CPU使用率分为用户态CPU使用率和系统态CPU使用率。用户态CPU使用率是指执行应用程序代码的时间占总CPU时间的百分比;系统态CPU使用率是指应用执行操作系统调用的时间占总CPU时间的百分比。系统态CPU使用率高意味着共享资源有竞争或者I/O设备之间有大量的交互。提高应用性能和扩展性的一个目标是尽可能降低系统态CPU使用率。

  2. 上下文切换:
    如果可运行的线程数大于CPU的数量,那么OS最终会强行换出正在执行的线程,从而使其他线程能够使用CPU。这会引起上下文切换,它会保存当前运行线程的执行上下文,并重建新调入线程的执行上下文。
    上下文切换又分为2种:让步式上下文切换和抢占式上下文切换。前者是指执行线程主动释放CPU,与锁竞争严重程度成正比,可通过减少锁竞争来避免;后者是指线程因分配的时间片用尽而被迫放弃CPU或者被其他优先级更高的线程所抢占,一般由于线程数大于CPU可用核心数引起,可通过调整线程数,适当减少线程数来避免。

  3. 运行队列
    每个CPU都会维持一个运行队列,理想情况下,调度器会不断让队列中的进程运行。进程不是处在sleep状态就是run able状态。如果CPU过载,就会出现调度器跟不上系统的要求,导致可运行的进程会填满队列。队列愈大,程序执行时间就愈长。

  4. Load Average
    Load Average是 CPU的 Load,它所包含的信息不是 CPU的使用率状况,而是在一段时间内 CPU正在处理以及等待 CPU处理的进程数之和的统计信息,也就是 CPU使用队列的长度的统计信息。
    经验值: 安全的load一般是cpu的个数

  5. CPU的利用率
    User Time, System Time, WaitIO, Idle

  6. 中断
    Devices tell the kernel that they are done processing.

建议

  1. 运行队列:每个处理器应该运行的队列不超过1-3个线程。例子,一个双核处理器应该运行队列不要超过6个线程。经验值: 安全的load一般是cpu的个数

  2. CPU利用率:如果一个CPU被充分使用,利用率分类之间均衡的比例应该是:
    65%~70% User Time
    30%~35% System Time
    0%~5% Idle Time

操作命令

  1. 查看CPU信息

    cat /proc/cpuinfo
    grep 'processor' /proc/cpuinfo | wc -l  查看CPU个数 
  2. uptime命令
    以下显示输入uptime的信息:

    04:03:58 up 10 days, 13:19,  1 user,  load average: 0.54, 0.40, 0.20
    • 当前时间 04:03:58
    • 系统已运行的时间 10 days, 13:19
    • 当前在线用户 1 user
    • 平均负载:0.54, 0.40, 0.20 (最近1分钟、5分钟、15分钟系统的负载)
      系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中: 它没有在等待I/O操作的结果,它没有主动进入等待状态(也就是没有调用’wait’) ,没有被停止(例如:等待终止)。一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果你的主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重。当然如果达到20,那就表示当前系统负载非常严重,估计打开执行web脚本非常缓慢。
  3. vmstat命令
    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况, IO读写情况。
    一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
    r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
    0  0      0 5000628      0 122932    0    0  8543 31070    4    9  1  0 93  0  7

    r 表示运行队列。当这个值超过了CPU数目,就会出现CPU瓶颈了。
    b 表示阻塞的进程。
    swpd 虚拟内存已使用的大小,切换到内存交换区的内存数量(k表示)。如果大于0,表示你的机器物理内存不足了。
    free 当前的空闲页面列表中内存数量(k表示)。
    buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
    cache: 作为page cache的内存数量,一般作为文件系统的cache
    si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
    so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
    bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte。
    bo 块设备每秒发送的块数量。
    in 每秒CPU的中断次数,包括时间中断
    cs 每秒上下文切换次数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
    us 用户CPU时间。
    sy 系统CPU时间。
    id 空闲 CPU时间。
    wa 等待IO CPU时间。
    st Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.

  4. Top命令
    TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表。

    top - 12:38:33 up 50 days, 23:15,  2 users,  load average: 60.58, 61.14, 61.22
    Tasks: 203 total,  60 running, 139 sleeping,   4 stopped,   0 zombie
    Cpu(s)  : 27.0%us, 73.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   1939780k total,  1375280k used,   564500k free,   109680k buffers
    Swap:  4401800k total,   497456k used,  3904344k free,   848712k cached
    PID   USER      PR  NI  VIRT   RES  SHR  S  %CPU %MEM    TIME+  COMMAND                                
    4338 oracle    25   0  627m  209m 207m  R   0   11.0    297:14.76 oracle                                  

    多U多核CPU监控
    在top基本视图中,按键盘数字1,可监控每个逻辑CPU的状况
    在top基本视图中,按键盘输入H后,top将以上一次系统记得的“H”状态的相反的状态运行。如上次top的H状态是off,则这次运行时H状态就变成on了,H状态是on时,所有的单独的线程都会被显示出来。
    TOP视图解析:
    第一行:
    12:38:33 当前系统时间
    50days, 23:15 系统已经运行了50天23小时15分钟(在这期间没有重启过)
    2 users 当前有2个用户登录系统
    load average: 60.58, 61.14, 61.22 load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
    load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

    第二行:
    Tasks 任务(进程),系统现在共有203个进程,其中处于运行中的有60个,139个在休眠(sleep),stoped状态的有4个,zombie状态(僵尸)的有0个。

    第三行:cpu状态
    27.0% us 用户空间占用CPU的百分比。
    73.0%sy 内核空间占用CPU的百分比。
    0.0% ni 改变过优先级的进程占用CPU的百分比
    0.0%id 空闲CPU百分比
    0.0% wa IO等待占用CPU的百分比
    0.0% hi 硬中断(Hardware IRQ)占用CPU的百分比
    0.0% si 软中断(Software Interrupts)占用CPU的百分比

    第四行:内存状态
    total 物理内存总量
    used 使用中的内存总量
    free 空闲内存总量
    buffers 缓存的内存量
    第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。

    第五行:swap交换分区
    total 交换区总量
    used 使用的交换区总量
    free 空闲交换区总量
    cached 缓冲的交换区总量
    如果出于习惯去计算可用内存数,这里有个近似的计算公式:第四行的free + 第四行的buffers + 第五行的cached,按这个公式此台服务器的可用内存:530668+79236+4231276 = 4.7GB。
    对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。

    第六行是空行

    第七行以下:各进程(任务)的状态监控
    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 进程名称(命令名/命令行)

  5. mpstat命令
    mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

    mpstat -P ALL

    这里请大家注意区分物理cpu和逻辑cpu的区别,不要混淆了

  6. sar命令

    sar -q      查看load状况
    sar -u      查看cpu使用率
    sar -u -f /var/log/sa/sa12       查看历史情况
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值