美文网首页DevOps/SRE
Linux CPU、内存、磁盘、使用率计算

Linux CPU、内存、磁盘、使用率计算

作者: PublicBook | 来源:发表于2019-01-24 10:08 被阅读0次

    Linux CPU、内存、磁盘、使用率计算

    原创作品,转载请标明出处。

    命令方式查看:

    cpu使用率:

    如果发现多个进程cpu使用率加起来高于100%,或者单个进程(可能开多个线程导致)使用率高于100%,说明该top工具版本比较旧,使用单核cpu方式计算的使用率。

    解决办法:
    1. 更新top工具或者使用其他工具(经测试busybox-1.29.3中的top命令是准确的)。
    2. 手动计算,用 使用率 除以 cpu核数 = 真实的cpu使用率。
    [root@agent ~]# top
    
    1548244028619.png

    memory使用率:

    计算方式:used / total * 100% = 内存使用率
    [root@agent ~]# free
    
    1548244619967.png

    disk使用率:

    [root@agent ~]# df
    
    1548244755982.png

    解析proc文件获取:

    cpu使用率:

    proc文件:/proc/stat
    字段解释:只看行首以cpu开头的行,每列字段含义为:
    • name 设备名
    • user 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。
    • nice 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间。
    • system 从系统启动开始累计到当前时刻,处于核心态的运行时间。
    • idle 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间。
    • iowait 从系统启动开始累计到当前时刻,IO等待时间。
    • irq 从系统启动开始累计到当前时刻,硬中断时间。
    • softirq 从系统启动开始累计到当前时刻,软中断时间。
    • stealstolen 从系统启动开始累积到当前时刻,在虚拟环境运行时花费在其他操作系统的时间。
    • guest 从系统启动开始累积到当前时刻,在Linux内核控制下的操作系统虚拟cpu花费的时间。
    • guest_nice 从系统启动开始累积到当前时刻,在Linux内核控制下的操作系统虚拟cpu花费在nice进程上的时间。
    cpu每核时间:
    • 第一行name为cpu,描述的是总的cpu时间分配。
    • cpu[0 1 2 3 ...],指的是cpu单核的时间分配。
    单位:jiffies

    jiffies 是内核中的一个全局变量,用来记录系统启动以来产生的节拍数,在 Linux 中,一个节拍大致可以理解为操作系统进程调度的最小时间片,不同的 Linux 系统内核这个值可能不同,通常在 1ms 到 10ms 之间。

    计算方式:
    • cpu总时间 = user + nice + system + idle + iowait + irq + softirq + stealstolen + guest + guest_nice
    • cpu使用率计算
      1. 请在一段时间内(推荐:必须大于0s,小于等于1s),获取两次cpu时间分配信息。
      2. 计算两次的cpu总时间:total_2 - total_1
      3. 计算两次的cpu剩余时间:idle_2 - idle_1
      4. 计算两次的cpu使用时间:used = (total_2 - total_1) - (idle_2 - idle_1)
      5. cpu使用率 = 使用时间 / 总时间 * 100% = used / total * 100%
    [root@agent ~]# cat /proc/stat
    
    1548244985880.png

    memory使用率

    proc文件:/proc/meminfo
    字段解释:
    • MemTotal 可用的总内存--总物理内存减去kernel 代码/数据段占用再减去保留的内存区,mem_init_print_info里面有具体计算方式。
    • MemFree 完全未用到的物理内存 LowFree + HighFree。
    • MemAvailable MemFree+Active(file)+Inactive(file) - (watermark+min(watermark,Active(file)+Inactive(file)/2)) file占用的内存是可以释放的,但是释放的过多,会导致swap发生。
    • Buffers block device 文件读写用到的page 。
    • Cached 普通文件占用的缓冲,所有缓冲页(page cache)的总和,包括:
      cached+buffer+swap cache swap cache中包含的是被确定要swapping换页、但是尚未写入物理交换区的匿名内存页(匿名指的是未关联任何具体文件)
    • SwapCached 内存足够的情况下,这个值一般为0,那些匿名内存页,比如用户进程通过malloc()申请的内存页是没有关联任何文件的(有别于backing storage基于磁盘文件的内存页),如果发生swapping换页,这类内存页会被写入交换区。从一个匿名内存页被确定要被换页开始,它就被计入了swap cache,但是不一定会被立刻写入物理交换区,因为Linux的原则是除非绝对必要,尽量避免I/O。所以swap cache中包含的是被确定要swapping换页、但是尚未写入物理交换区的匿名内存页。
    • Active (pages[LRU_ACTIVE_ANON] + pages[LRU_ACTIVE_FILE]),ACTIVE_ANON和ACTIVE_FILE,分别表示anonymous pages和mapped pages。用户进程的内存页分为两种:与文件关联的内存(比如程序文件、数据文件所对应的内存页)和与文件无关的内存(比如进程的堆栈,用malloc申请的内存),前者称为file pages或mapped pages,后者称为anonymous pages。
    • Inactive pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE],这部分具体可以参考LRU 内存管理算法。
    • SwapTotal 可用的swap空间的总的大小。
    • SwapFree 剩余swap空间的大小。
    • Dirty 需要写入磁盘的内存区大小。
    • Writeback 正在被写回磁盘的大小。
    • AnonPages 未映射页的内存大小。
    • Mapped 设备和文件等映射的大小。
    • Slab 内核数据结构slab的大小,可以减少申请和释放内存带来的消耗。
    • 其他字段请自行百度参考。
    计算方式
    • 内存使用率 = (MemTotal - MemAvailable) / MemTotal * 100%
    [root@agent ~]# cat /proc/meminfo
    
    1548246581741.png

    disk使用率

    目前没有最准确的方式(没有精力去百度翻资料)来获取,后续补上。。。

    相关文章

      网友评论

        本文标题:Linux CPU、内存、磁盘、使用率计算

        本文链接:https://www.haomeiwen.com/subject/usgsjqtx.html