• Linux查看CPU和内存使用情况


    Linux查看CPU和内存使用情况

    Linux查看CPU和内存命令:ps

    1.CPU占用最多的前10个进程:

    ps auxw|head -1;ps auxw|sort -rn -k3|head -10
    
    • 1

    2.内存消耗最多的前10个进程

    ps auxw|head -1;ps auxw|sort -rn -k4|head -10
    
    • 1

    3.虚拟内存使用最多的前10个进程

    ps auxw|head -1;ps auxw|sort -rn -k5|head -10
    
    • 1
    1. 查看某一类进程占用总资源
      思路:使用ps命令,对内存相关的列进行求和。

    查看哪一列是内存、哪一列是内存百分比

     ps auxw | more 
    
    • 1

    在这里插入图片描述由上图,内存百分比 我们就使用$4, 具体内存(KB)我们就用$6
    如下,我们查看python相关进程,内存占用情况:

    ps auxw | grep python | awk '{sum+= $4} END {print sum}'
    
    • 1
    ps auxw | grep python | awk '{sum+= $6} END {print sum}'
    
    • 1

    另外,我们python程序中,我们想排除一些额外的进程,我们可以继续利用 grep -v 去排除一下,例如:

    ps auxw | grep python |  grep -v  xxxx | awk '{sum+= $6} END {print sum}'
    
    • 1

    查看系统内存命令:free

    free命令是一个快速查看内存使用情况的方法,它是对 /proc/meminfo 收集到的信息的一个概述。

    free命令可以显示当前系统未使用的和已使用的内存大小,还可以显示被内核使用的内存缓冲区:
    在这里插入图片描述

    • Mem:内存的使用信息
    • Swap:交换空间的使用信息
    • total:总计物理内存的大小
    • used:已使用物理内存
    • free:可用物理内存
    • shared:多个进程共享的内存总额
    • buffers/cached:缓存缓冲使用物理内存大小
    • available:还可以被应用程序使用的物理内存大小

    free与available的区别

    total = used + free + buffer/cache
    avaiable = free + buffer/cache(服务器或者公共云普通用户有部分buffer/cache是用不了的就会有avaiable < free + buffer/cache)

    free是未被使用的内存
    available是应用程序认为可用的内存
    注意:Linux为了提升读写性能,消耗一部分内存资源作为缓存或者缓冲内存,在内核看来这部分buffer/cache属于已被使用的内存;在应用程序申请内存,而free内存不够时,就会让内核回收buffer和cache来满足应用程序的内存需求。

    htop (推荐)

    官网:https://htop.dev/
    github: https://github.com/htop-dev/htop

    htop命令显示了每个进程的内存实时使用率。它提供了所有进程的常驻内存大小、程序总内存大小、共享库大小等的报告。列表可以水平及垂直滚动。
    在这里插入图片描述

    htop相比较top的优势:

    • 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。
    • 在启动上比top 更快。
    • 杀进程时不需要输入进程号。
    • 通过鼠标操作条目。
    • top 已不再维护。

    安装

    yum -y install  epel-release
    yum -y install htop
    
    • 1
    • 2

    htop 参数

    -C --no-color        使用一个单色的配色方案
    -d --delay=DELAY     设置延迟更新时间,单位秒
    -h --help           显示htop 命令帮助信息
    -u --user=USERNAME    只显示一个给定的用户的过程
    -p --pid=PID,PID…       只显示给定的PIDs
    -s --sort-key COLUMN     依此列来排序
    -v –version          显示版本信息
    交互式命令(INTERACTIVE COMMANDS)
    上下键或PgUP, PgDn 选定想要的进程,左右键或Home, End 移动字段,当然也可以直接用鼠标选定进程;
    Space    标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程
    U    取消标记所有进程
    s    选择某一进程,按s:用strace追踪进程的系统调用
    l    显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件
    I    倒转排序顺序,如果排序是正序的,则反转成倒序的,反之亦然
    +, -    When in tree view mode, expand or collapse subtree. When a subtree is collapsed a "+" sign shows to the left of the process name.
    a (在有多处理器的机器上)    设置 CPU affinity: 标记一个进程允许使用哪些CPU
    u    显示特定用户进程
    M    按Memory 使用排序
    P    按CPU 使用排序
    T    按time+ 使用排序
    F    跟踪进程: 如果排序顺序引起选定的进程在列表上到处移动,让选定条跟随该进程。这对监视一个进程非常有用:通过这种方式,你可以让一个进程在屏幕上一直可见。使用方向键会停止该功能。
    K    显示/隐藏内核线程
    H    显示/隐藏用户线程
    Ctrl-L    刷新
    Numbers    PID 查找: 输入PID,光标将移动到相应的进程上
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    常用

    -u参数查看指定用户进程信息

    htop -u xxx_name
    
    • 1

    s:显示光标所在进程执行的系统调用;

    界面说明

    在这里插入图片描述该行主要显示CPU使用情况,htop还为将不同颜色来区分是使用情况:
    (1)蓝色的表示low-prority(低优先级)使用
    (2)绿色的表示normal(标准)使用情况
    (3)红色的表示kernel(内核)使用情况
    (4)青色的表示virtuality(虚拟性)使用情况

    在这里插入图片描述该行主要表示内存使用情况,同样的htop使用了不同颜色来区分是使用情况:
    (1)绿色的表示已经使用内存情况
    (2)蓝色的表示用于缓冲的内存使用情况
    (3)黄色的表示用于缓存的内存使用情况

    在这里插入图片描述

    • PID:进行的标识号
    • USER:运行此进程的用户
    • PRI:进程的优先级
    • NI:进程的优先级别值,默认的为0,可以进行调整
    • VIRT:进程占用的虚拟内存值
    • RES:进程占用的物理内存值
    • SHR:进程占用的共享内存值
    • S:进程的运行状况,R表示正在运行、S表示休眠,等待唤醒、Z表示僵死状态
    • %CPU:该进程占用的CPU使用率
    • %MEM:该进程占用的物理内存和总内存的百分比
    • TIME+:该进程启动后占用的总的CPU时间(他代表的并不是程序从启动到现在总共经过了多久,而是这个程式总共占用了多少 CPU Time)
      如果想知道长期而言哪个程序最占 CPU 的话,就看 Time+ 的数值
    • COMMAND:进程启动的启动命令名称

    这里主要需要理解:
    理解virt、res、shr之间的关系(linux系统篇)
    参考URL:https://baijiahao.baidu.com/s?id=1743908545937632735

    • VIRT:进程占用的虚拟内存值。
      VIRT代表进程当前时刻有多少内存可以访问。进程虚拟空间的大小, 是真实使用的内存,加上映射进程自己使用的内存。
      基本上你可以把他想成 process 可以存取到的 memory 总和。
    • RES:进程占用的物理内存值
      意味驻留内存大小, 是当前进程真正占用物理内存的精确反映. (直接与%MEM列相对应.) RES始终要比VIRT小。
      RES=CODE+DATA SHR:共享内存大小,单位kb
    • SHR:进程占用的共享内存值
      SHR:共享内存大小,单位kb
      其实我们写的程序会依赖于很多外部的动态库(.so),比如libc.so、libld.so等等。这些动态库在内存中仅仅会保存/映射一份,如果某个进程运行时需要这个动态库,那么动态加载器会将这块内存映射到对应进程的虚拟内存空间中。多个进展之间通过共享内存的方式相互通信也会出现这样的情况。

    某个进程占用的内存除了和别的进程共享的内存之外就是自己的独占内存了。所以要计算进程独占内存的大小只要用RES的值减去SHR值即可。

    atop

    Atop 是一个基于 ASCII 的全屏的性能监控工具,可用来监控进程的活动时间,高亮显示出一些过载的进程,还包括其他的一些系统指标例如:CPU、内存、交换分区、磁盘和网络等信息。

    yum install atop
    
    • 1

    nmon(推荐)

    nmon是一个基于ncurses的系统基准测试工具,它可以监控CPU、内存、I/O、文件系统及网络资源等的互动模式。对于内存的使用,它可以实时的显示 总/剩余内存、交换空间等信息。

    参考文章:服务器资源监控工具-nmon、nmon_analyser

    /proc/meminfo

    MemTotal: 45964 kB //所有可用的内存大小,物理内存减去预留位和内核使用。系统从加电开始到引导完成,firmware/BIOS要预留一些内存,内核本身要占用一些内存,最后剩下可供内核支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的,重启会改变。
    MemFree: 1636 kB //表示系统尚未使用的内存。
    MemAvailable: 8496 kB //真正的系统可用内存,系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以这部分可回收的内存加上MemFree才是系统可用的内存
    Buffers: 0 kB //用来给块设备做缓存的内存,(文件系统的 metadata、pages)
    Cached: 7828 kB //分配给文件缓冲区的内存,例如vi一个文件,就会将未保存的内容写到该缓冲区
    SwapCached: 0 kB //被高速缓冲存储用的交换空间(硬盘的swap)的大小
    Active: 19772 kB //经常使用的高速缓冲存储器页面文件大小
    Inactive: 3128 kB //不经常使用的高速缓冲存储器文件大小
    Active(anon): 15124 kB //活跃的匿名内存
    Inactive(anon): 52 kB //不活跃的匿名内存
    Active(file): 4648 kB //活跃的文件使用内存
    Inactive(file): 3076 kB //不活跃的文件使用内存
    Unevictable: 0 kB //不能被释放的内存页
    Mlocked: 0 kB //系统调用 mlock 家族允许程序在物理内存上锁住它的部分或全部地址空间。这将阻止Linux 将这个内存页调度到交换空间(swap space),即使该程序已有一段时间没有访问这段空间
    SwapTotal: 0 kB //交换空间总内存
    SwapFree: 0 kB //交换空间空闲内存
    Dirty: 4 kB //等待被写回到磁盘的
    Writeback: 0 kB //正在被写回的
    AnonPages: 15100 kB //未映射页的内存/映射到用户空间的非文件页表大小
    Mapped: 7160 kB //映射文件内存
    Shmem: 100 kB //已经被分配的共享内存
    Slab: 9236 kB //内核数据结构缓存
    SReclaimable: 2316 kB //可收回slab内存
    SUnreclaim: 6920 kB //不可收回slab内存
    KernelStack: 2408 kB //内核消耗的内存
    PageTables: 1268 kB //管理内存分页的索引表的大小
    NFS_Unstable: 0 kB //不稳定页表的大小
    Bounce: 0 kB //在低端内存中分配一个临时buffer作为跳转,把位于高端内存的缓存数据复制到此处消耗的内存
    WritebackTmp: 0 kB //FUSE用于临时写回缓冲区的内存
    CommitLimit: 22980 kB //系统实际可分配内存
    Committed_AS: 536244 kB //系统当前已分配的内存
    VmallocTotal: 892928 kB //预留的虚拟内存总量
    VmallocUsed: 29064 kB //已经被使用的虚拟内存
    VmallocChunk: 860156 kB //可分配的最大的逻辑连续的虚拟内存

  • 相关阅读:
    STM32F4系列单片机GPIO概述和寄存器分析
    反转字符串中的单词
    DBeaver 与 Navicat:数据库工具对决
    LeetCode高频题:n杯溶液按照顺序排成一排,可以混合相邻2杯,合并代价/时间是两杯质量和,经过n-1次合并为1杯,最小时间/代价是多少
    【目标检测】Object Detection in 20 Years: A Survey
    m3u8 文件格式详解
    PyQt5快速开发与实战 9.7 UI层的自动化测试
    如何配置微信小程序id
    酷开科技智能大屏OS Coolita亮相第134届中国进出口商品交易会
    Jaya算法在电力系统最优潮流计算中的应用(创新点)【Matlab代码实现】
  • 原文地址:https://blog.csdn.net/inthat/article/details/119800108