Linux系统指令记录

Linux系统指令记录

九月 22, 2022

常用指令记录

ps -ef|grep java

Linux系统CPU/内存使用率过高的问题排查

  1. top指令定位CPU/内存使用率过高的
    执行 top 命令后按 M,根据驻留内存大小进行排序,查看“RES” 及 “SHR” 列是否有进程占用内存过高。按 P,以 CPU占用率大小的顺序排列进程列表,查看是否有进程占用cpu过高。

    这里顺便解释下上图各个参数的意义,有利于读者更好的排查问题。

    a. 第一行是任务队列信息
    top - 14:06:34 up 537 days, 6 min, 6 users, load average: 0.41, 0.45, 0.43

    b. 第二行为进程的信息

    c. 第三行为cpu信息

    d. 第四、五行为内存信息

    如果有异常进程占用了大量 CPU 或内存资源,记录需要终止的进程 PID,输入k,再输入需要终止进程的 PID ,按 Enter。
    另外说明一下,top 运行中可以通过 top 的内部命令对进程的显示方式进行控制,最常用的是M和P。

  2. CPU 空闲但高负载情况处理
    CPU 空闲但高负载情况,Load average 是 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。执行ps -axjf命令,查看进程状态,并检查是否存在 D 状态进程。D 状态指不可中断的睡眠状态,该状态进程无法被杀死,也无法自行退出。若出现较多 D 状态进程,可通过恢复该进程依赖资源或重启系统进行解决。
  3. Kswapd0 进程占用 CPU 较高处理.
    Linux 系统通过分页机制管理内存的同时,将磁盘的一部分划出来作为虚拟内存。而 kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。当系统内存不足时,kswapd0 会频繁的进行换页操作。换页操作非常消耗 CPU 资源,导致该进程持续占用高 CPU 资源。
    执行top命令,找到 kswapd0 进程。观察 kswapd0 进程状态,若持续处于非睡眠状态,且运行时间较长并持续占用较高 CPU 资源,执行 vmstat ,free,ps 等指令,查询系统内进程的内存占用情况,重启系统或终止不需要且安全的进程。如果 si,so 的值也比较高,则表示系统存在频繁的换页操作,当前系统的物理内存已经不能满足您的需要。 si 表示每秒从交换区写入内存的大小(单位:kb/s) ,so 每秒从内存写到交换区的大小。
  4. 查看共享内存占用是否过高(未尝试)
    执行cat/proc/meminfo |grep-i shmem命令查看共享内存。
  5. 查看不可回收的 slab 内存占用是否过高。
    buddy可以以页为单位获取连续的物理内存了,即4K为单位。slab负责需要频繁的获取/释放并不大的连续物理内存,比如几十字节。执行cat /proc/meminfo | grep -i SUnreclaim命令查看slab 内存。
  6. 查看是否存在内存大页
    标准的 4KB 大小的页面外,内存大页管理内存中的巨大的页面,处理较少的页面映射表,从而减少访问/维护它们的开销。执行cat /proc/meminfo | grep -iE “HugePages_Total|Hugepagesize” 查看内存大页。

    内存使用率计算:
    (Total - available)100% / Total
    (Total - Free - Buffers - Cached - SReclaimable + Shmem)* 100% / Total
    cat /proc/meminfo查看信息含义: