必威体育Betway必威体育官网
当前位置:首页 > IT技术

某个进程的CPU使用率达到100%,怎么办?

时间:2019-07-05 17:47:43来源:IT技术作者:seo实验室小编阅读:74次「手机版」
 

cpu使用率100怎么办

你用什么方法查看cpu使用率?除了topps,你还知道其他查看CPU使用率的工具吗?


如何查看 CPU 使用率

说道查看 CPU 使用率的工具,大多数人第一反应肯定是topps,毕竟这两个是最常用的性能分析工具,也是初步接触 linux 性能优化时最易上手的工具:

  • top 显示系统总体的 CPU 和内存使用情况,以及各个进程的资源使用情况。
  • ps 显示每个进程的资源使用情况,常用命令如 ps aux 、ps -ef 等。

比如,top 的输出格式为:

top - 21:05:55 up  4:47,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 255 total,   1 running, 254 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.7 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   985888 total,    71740 free,   606652 used,   307496 buff/cache
KiB Swap:  1046524 total,   709116 free,   337408 used.   169712 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ commaND                                                                                                                                 
  1039 root      20   0  527548  87584  18984 S   2.0  8.9   0:50.74 Xorg                                                                                                                                    
  2109 zwx       20   0  641036  18088  10368 S   1.0  1.8   0:08.19 gnome-terminal-                                                                                                                         
  1803 zwx       20   0 1367480  77788  16872 S   0.3  7.9   1:17.32 compiz                                                                                                                                  
  1926 zwx       20   0  192776  11276   8744 S   0.3  1.1   0:14.72 vmtoolsd                                                                                                                                
  6007 root      20   0   49028   3664   2880 R   0.3  0.4   0:00.53 top                                                                                                                                     
     1 root      20   0  185308   3700   2052 S   0.0  0.4   0:02.61 systemd                                                                                                                                 
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.03 kthreadd 

该输出结果中,第三行 %Cpu 就是系统 CPU 使用率,top 默认显示的是所有 CPU 的平均值,这个时候你只需要按下数字 1,就可以切换到每个 CPU 的使用率。不过,top 并没有细分进程的用户态 CPU 和内核态 CPU,要想查看每个进程的详细情况,可以使用pidstat,它是专用于分析每个进程 CPU 使用情况的工具。比如,下面的 pidstat 命令,每隔 1 秒展示进程的 5 组 CPU 使用率,包括:

  • 用户态 CPU 使用率( %usr );
  • 内核态 CPU 使用率( %system );
  • 运行虚拟机 CPU 使用率( %guest );
  • 等待 CPU 使用率( %wait );
  • 总 CPU 使用率( %CPU );
  • 5 组数据平均值。
# 每隔 1 秒输出一组数据,共输出 5 组
$ pidstat 1 5
15:56:02      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
15:56:03        0     15006    0.00    0.99    0.00    0.00    0.99     1  dockerd
...
Average:      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
Average:        0     15006    0.00    0.99    0.00    0.00    0.99     -  dockerd

CPU 使用率过高怎么办

面对这种情况,利用 top、ps 等工具,通常只能定位到 CPU 使用率较高的进程,而如何找到大量占用 CPU 的那块代码,才是我们真正想要做到的。如果只是发现某个进程大量占用 CPU,或许该进程正是我们的业务程序,难道直接告诉研发人员程序有问题,把难题抛给研发人员吗?

正确的做法是,选择合适的 Linux 调试工具,定位到造成这一问题的具体函数。我估计大部分人第一时间想到的会是 GDB(The GNU Project debugger),但实际上 GDB 并不是一个优秀的前期性能分析工具,因为它在调试过程中会不断中断程序的运行,这在线上环境往往是不允许的,另外,它对于新人玩家并不太友好。

相较于 GDB,我认为 perf 是更好的选择,它内置于 Linux 2.6.31之后的版本,主要通过性能事件采样,分析系统的各种事件和内核性能,且可以用来分析指定程序的性能问题。关于 perf,就不做过多介绍了,详细内容可参考 man手册(想学好 Linux 离不开 man 的帮助),在此只提供一种使用 perf 分析 CPU性能问题的用法—— perf top,它的表现形式类似于 top,不同的是,perf top 能够实时显示占用 CPU 时钟最多的函数或指令,因此可以用来定位高频函数,形式如下图所示:

$ perf top
Samples: 729  of event 'cpu-clock', Event count (APProx.): 72684182
Overhead  Shared Object       symbol
   8.04%  perf                [.] 0x00000000003b6210
   5.13%  [kernel]            [k] vsnprintf
   4.67%  [kernel]            [k] module_get_kallsym
   4.01%  [kernel]            [k] _raw_spin_unlock_irqrestore
...

代码块中第二行有三个参数,分别是 Samples(采样数)、Event(时间类型)和 Event count(事件总数),共采集 729 个 CPU 时钟事件,总事件数为 72684182。第三行有四个指标,分别是 :

  • Overhead —— 该符号的性能事件在所有采样中所占比例;
  • Shared —— 该函数或指令所属对象,如内核、进程、动态库、模块等;
  • Object —— 表示对象的类型,如 [.] 表示用户空间的可执行程序、或动态库,[k]表示内核空间;
  • Symbol —— 符号名,即函数名,当函数名未知时,用十六进制的地址来表示。

大致了解输出形式之后,我们再来看 perf top 的具体表现,其中占用 CPU 时钟最多的是 perf 工具自身,不过也仅占 8.04%,这意味着当前系统并没有 CPU 性能问题,如果某个程序占用 CPU 异常,那么你会看到一个趋近于 100% 的数值。现在让你去解决一个 CPU 使用率异常的问题,应该是手到擒来了吧,perf top足以应付大部分这方面的场景。

小结

CPU 使用率是最直观且常用的系统性能指标,也是在系统环境下排查性能问题是,通常会关注的第一个参数。因此,熟练掌握 CPU 使用率的相关概念至关重要,尤其对于几种不同类型的 CPU 使用率要区分清楚,如user(用户)、nice(Nice)、system(系统)、iowait(等待 I/O)、irq(中断)以及 softirq(软中断)。常见场景如:

  • 用户 CPU 使用率高,说明用户态进程占用 CPU 较多,所以应该重点排查进程性能问题;
  • 系统 CPU 使用率高,说明内核态占用较多 CPU,所以应该重点排查内核线程或系统调用的性能问题;
  • 中断 CPU 使用率高,说明中断处理程序占用较多 CPU,所以应该重点排查内核中的中断服务函数;

当然,perf top也不是万能的,在实际解决问题时,应当合理利用不同工具来进行不同阶段的问题定位,对于 perf top 存在的缺陷或不足,比如它仅支持查看实时数据而不支持保存功能,就需要利用其它工具进行弥补。

相关阅读

478主板CPU供电图解

  cpu供电电路主要由电源管理芯片、场效应管、电感、滤波电容等组成   跑线路过程如下:   电源12V经过电感和滤波电容到达

CPU频率和单位换算

在电子技术中,脉冲信号是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号。脉冲信号之间的时间间隔称为周期;而将在单位时间(如

不花钱推广,如何让短视频播放量达到100万+?

视频拍摄出来后,不仅仅是发布出去那么简单,还要有推广过程。今天就跟大家分享一下短视频渠道及推广过程。一、渠道分类有哪些?渠道现

java应用cpu使用率过高问题排查

---------------------------------------linux下如何定位代码问题------------------------------- 1、先通过top命令找到消耗cp

100种方法,教你搞定手绘专题页设计!

今天的内容量很多也很实用,建议大家耐心阅读完后收藏备用呐~不知道大家发现没有,就是随着技能工具的增多,我们现在的设计形式越来越多

分享到:

栏目导航

推荐阅读

热门阅读