服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - Linux系统下CPU性能问题分析案例

Linux系统下CPU性能问题分析案例

2023-12-05 17:03未知服务器之家 Linux

关于CPU使用率相关重要指标,我们经常在使用top、dstat、vmstat等工具看到,这里解读一下: user(通常缩写为us),代表用户态CPU时间。 nice(通常缩写为ni),代表低优先级用户态CPU时间,nice可取值范围是-20到19,数值越大,优先级

Linux系统下CPU性能问题分析案例

关于CPU使用率相关重要指标,我们经常在使用top、dstat、vmstat等工具看到,这里解读一下:

  • user(通常缩写为us),代表用户态CPU时间。
  • nice(通常缩写为ni),代表低优先级用户态CPU时间,nice可取值范围是-20到19,数值越大,优先级反而越低,默认值是0。
  • system(通常缩写为sys),代表内核态CPU时间。
  • idle(通常缩写为id),代表空闲时间。注意,它不包括等待I/O的时间(iowait)。
  • iowait(通常缩写为wa),代表等待 I/O的CPU时间。
  • irq(通常缩写为hi),代表处理硬中断的CPU时间。
  • softirq(通常缩写为si),代表处理软中断的CPU时间。
  • steal(通常缩写为st),代表当系统运行在虚拟机中的时候,虚拟机占用的CPU时间。
  • guest(通常缩写为guest),代表通过虚拟化运行其他操作系统的时间,也就是运行虚拟机的CPU时间。
  • guest_nice(通常缩写为gnice),代表以低优先级运行虚拟机的时间。

CPU的iowait突然升高,我该怎么处理?

分析过程

从上面的介绍可以看出,iowait升高,第一反应会想到查看系统的 I/O情况,I/O又分为磁盘I/O和网络I/O,这里先分析磁盘I/O。

1、运行 dstat 命令,观察 CPU 和 I/O 的使用情况

Linux系统下CPU性能问题分析案例

  • 结果分析。
  • 在iowait升高(wai)时,磁盘的读请求(read)都很高,最高时1271M。
  • 充分说明iowait的升高是磁盘I/O导致的,确切的说,是大量读磁盘导致的。

2、通过pidstat查询进程的I/O情况

# -d:统计进程的磁盘使用情况 1: 采集周期1s  10: 采集10次
pidstat -d 1 10

Linux系统下CPU性能问题分析案例

  • 结果分析。
  • 大量读磁盘的进程名称是app,而且app进程的pid在不停变化(短时进程?)

3、使用ps命令查看下app进程

Linux系统下CPU性能问题分析案例

  • 结果分析。
  • 进程的状态是Z+,命令行参数<defunct>,进程变成僵尸进程了。
  • 僵尸进程的产生和处理方法,这里暂不展开,有想了解的可以评论留言或者自行学习。
  • app的是谁创建的,是下一步分析的重点。

4、查询app进程的父进程

Linux系统下CPU性能问题分析案例

  • 结果分析。
  • pid为51780的父进程id是51688,进程名称也是app。

5、使用perf命令采集性能事件分析app函数调用

# 录制全局性能事件,如果只想录制某个进程的,可以使用-p指定
# perf record -ag -p {pid} -- sleep 10 #采集指定pid所有cpu的性能事件,周期是10s
perf record -g

# 分析报告
perf report

Linux系统下CPU性能问题分析案例

  • 分析结果。
  • app进程正在对磁盘进行直接读,也就是绕过了系统缓存,每个读请求都会从磁盘直接读。

思路总结

  • 使用dstat命令查看系统I/O情况(dstat可以同时观察cpu和磁盘的情况)。
  • 使用pidstat命令可以定位到进程维度的磁盘读写情况,找出可疑进程。
  • 使用ps、top等命令可以观测到进程的状态(D、R、S、Z、T等)。
  • 使用pstree命令我们找出了app进程的父进程(子进程的pid一直在变)。
  • 使用perf命令就可以对进程的函数调用关系分析了。
  • 没啥需要使用的啦。哈哈,点赞+收藏。

知识补充

进程状态

  • R是Running或Runnable 的缩写,表示进程在CPU的就绪队列中,正在运行或者正在等待运行。
  • D是Disk Sleep的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。
  • Z是Zombie的缩写,进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等)。
  • S是Interruptible Sleep的缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入R状态。
  • I是Idle的缩写,也就是空闲状态,用在不可中断睡眠的内核线程上。
  • T 或者 t,也就是Stopped或Traced的缩写,表示进程处于暂停或者跟踪状态。

僵尸进程

  • 一旦父进程没有处理子进程的终止,还一直保持运行状态,那么子进程就会一直处于僵尸状态。
  • 大量的僵尸进程会用尽PID进程号,导致新进程不能创建。
  • 僵尸进程在父进程回收它的资源后就会消亡,或者在父进程退出后,由init进程回收后也会消亡。

延伸 · 阅读

精彩推荐
  • Linux在Linux系统中创建新的亚马逊AWS访问密钥的方法

    在Linux系统中创建新的亚马逊AWS访问密钥的方法

    如何在Linux系统中创建新的亚马逊AWS访问密钥?我在配置一个需要访问我的亚马逊AWS帐号的应用时被要求提供AWS访问密钥ID和秘密访问密钥,我怎样创建一个...

    Linux教程网6182019-10-30
  • Linuxlinux设置tomcat自启动的方法

    linux设置tomcat自启动的方法

    这篇文章主要介绍了linux设置tomcat自启动的方法,需要的朋友可以参考下...

    Linux教程网8512021-10-10
  • Linux将 Linux 终端与 Nautilus 文件管理器结合起来

    将 Linux 终端与 Nautilus 文件管理器结合起来

    Nautilus 是 GNOME 桌面环境中的图形化文件浏览器。你可以使用它来访问和管理系统中的文件和文件夹。 尽管并非所有人都喜欢使用终端来管理文件和目录,...

    未知812023-08-08
  • Linuxlinux top命令详解

    linux top命令详解

    这篇文章主要介绍了linux top命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    sparkdev5622022-03-01
  • Linuxlinux驱动程序开发详细介绍

    linux驱动程序开发详细介绍

    前提,一般来说内核代码的错误可能会引起一个用户进程的死亡,或者整个系统的瘫痪,更严重的后果,可能导致磁盘损伤~因此建议最好有一台实验机进行...

    Linux教程网5392019-12-17
  • Linux理解 Linux/Unix 登录脚本的技巧

    理解 Linux/Unix 登录脚本的技巧

    有一些常见的情况,例如从Debian的包管理程序到Iaas的管理中,很多任务需要设置环境变量才能正常运行。 有时,程序通常只需要在 登陆时运行一次,例如...

    未知1042023-05-12
  • LinuxLinux系统下无法卸载挂载的目录怎么办?

    Linux系统下无法卸载挂载的目录怎么办?

    我们在日常运维中经常性会遇到需要进行磁盘的扩容、卸载、挂载等操作,但是有时候这个系统上跑的应用并没有停止或者有其他的运维同事在操作这个目...

    今日头条10302020-12-30
  • Linuxssh 登录很慢该如何解决

    ssh 登录很慢该如何解决

    这篇文章主要介绍了ssh 登录很慢该如何解决的相关资料,这里提供了两种方法,DNS反向解析及关闭ssh的gssapi认证的解决办法,需要的朋友可以参考下...

    linuxeye9922021-12-16