瑞星 发表于 2025-4-14 10:15:01

CPU使用率过高标题排查及Linux之top下令用法详解_top下令检察线程cpu

https://img-blog.csdnimg.cn/img_convert/2f4ed8137a35dcc0b0b3df613b0a230a.png
   

[*]us(user):体现 CPU 在用户运行的时间百分比,通常用户 CPU 高体现有应用程序比较繁忙。典型的用户程序有:数据库、Web 服务器等。
[*]sy(sys):体现 CPU 在内核态运行的时间百分比(不包括中断),通常内核态 CPU 越低越好,否则体现体系存在某些瓶颈。
[*]ni(nice):体现用 nice 修正进程优先级的用户进程实行的 CPU 时间。nice 是一个进程优先级的修正值,如果进程通过它修改了优先级,则会单独统计 CPU 开销。
[*]id(idle):体现 CPU 处于空闲态的时间占比,此时,CPU 会实行一个特定的虚拟进程,名为 System Idle Process。
[*]wa(iowait):体现 CPU 在等待 I/O 操纵完成所耗费的时间,通常该指标越低越好,否则体现 I/O 存在瓶颈,可以用 iostat 等下令做进一步分析。
[*]hi(hardirq):体现 CPU 处理硬中断所耗费的时间。硬中断是由外设硬件(如键盘控制器、硬件传感器等)发出的,必要有中断控制器加入,特点是快速实行。
[*]si(softirq):体现 CPU 处理软中断所耗费的时间。软中断是由软件程序(如网络收发、定时调理等)发出的中断信号,特点是延迟实行。
[*]st(steal):体现 CPU 被其他虚拟机占用的时间,仅出如今多虚拟机场景。如果该指标过高,可以检查下宿主机或其他虚拟机是否异常。
排查用户 CPU 使用率高
用户 CPU 使用率反映了应用程序的繁忙程度,通常与我们本身写的代码痛痒相关。
操纵步调:
1) 通过 top 下令找到 CPU 斲丧最多的进程号;
https://img-blog.csdnimg.cn/img_convert/d763347a45cb5e17149e433d6b60efb8.png
2) 通过 top -Hp 进程号下令找到 CPU 斲丧最多的线程号(列名仍然为 PID);
3) 通过printf “%x\n” 线程号下令输出该线程号对应的 16 进制数字;
https://img-blog.csdnimg.cn/img_convert/28d0be80d642ddd58bdc4461948ead64.png
4) PID进程在内核调用情况。
如果是Java应用可通过 jstack 进程号 | grep 16进制线程号 -A 10 下令找到 CPU 斲丧最多的线程方法堆栈。
非 Java 应用可使用 perf
   perf top -p 7574

如果提示perf: command not found,使用yum install perf安装。
https://img-blog.csdnimg.cn/img_convert/30886b515c2f84a1a837e748750b9103.png
perf利用Linux的trace特性,可以用于及时跟踪,统计event计数(perf stat);大概使用采样(perf record),报告(perf report|script|annotate)的使用方式进行诊断。
top下令用法

top下令经常用来监控linux的体系状态,是常用的性能分析工具,能够及时显示体系中各个进程的资源占用情况。
top的使用方式 top [-d number] | top [-bnp]
参数表明:
-d:number代表秒数,体现top下令显示的页面更新一次的间隔。默认是5秒。 -b:以批次的方式实行top。 -n:与-b共同使用,体现必要进行几次top下令的输出效果。 -p:指定特定的pid进程号进行观察。
在top下令显示的页面还可以输入以下按键实行相应的功能(注意巨细写区分的):
?:显示在top当中可以输入的下令 P:以CPU的使用资源排序显示 M:以内存的使用资源排序显示 N:以pid排序显示 T:由进程使用的时间累计排序显示 k:给某一个pid一个信号。可以用来杀死进程 r:给某个pid重新定制一个nice值(即优先级) q:退出top(用ctrl+c也可以退出top)。
top各输出参数含义

下面是使用top下令来进行性能检测的截图:
图一(ubuntu):
https://img-blog.csdn.net/2018080815173689?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqY2xzeA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
图二(centos):
https://img-blog.csdn.net/20180808151327700?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqY2xzeA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
一、top前5行统计信息

第1行:top - 05:43:27 up 4:52, 2 users, load average: 0.58, 0.41, 0.30
第1行是任务队列信息,其参数如下:
内容含义05:43:27体现当前时间up 4:52体系运行时间 格式为时:分2 users当前登任命户数load average: 0.58, 0.41, 0.30体系负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到如今的平均值。 load average: 如果这个数除以逻辑CPU的数量,效果高于5的时间就表明体系在超负荷运转了。
第2行:Tasks: 159 total, 1 running, 158 sleeping, 0 stopped, 0 zombie
第3行:%Cpu(s): 37.0 us, 3.7 sy, 0.0 ni, 59.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
第2、3行为进程和CPU的信息
当有多个CPU时,这些内容大概会超过两行,其参数如下:
内容含义159 total进程总数1 running正在运行的进程数158 sleeping睡眠的进程数0 stopped停止的进程数0 zombie僵尸进程数37.0 us用户空间占用CPU百分比3.7 sy内核空间占用CPU百分比0.0 ni用户进程空间内改变过优先级的进程占用CPU百分比59.3 id空闲CPU百分比0.0 wa等待输入输出的CPU时间百分比0.0 hi硬中断(Hardware IRQ)占用CPU的百分比0.0 si软中断(Software Interrupts)占用CPU的百分比0.0 st 第4行:KiB Mem: 1530752 total, 1481968 used, 48784 free, 70988 buffers
第5行:KiB Swap: 3905532 total, 267544 used, 3637988 free. 617312 cached Mem
第4、5行为内存信息
其参数如下:
内容含义KiB Mem: 1530752 total物理内存总量1481968 used使用的物理内存总量48784 free空闲内存总量70988 buffers(buff/cache)用作内核缓存的内存量KiB Swap: 3905532 total交换区总量267544 used使用的交换区总量3637988 free空闲交换区总量617312 cached Mem缓冲的交换区总量。3156100 avail Mem代表可用于进程下一次分配的物理内存数量 上述末了提到的缓冲的交换区总量,这里表明一下,所谓缓冲的交换区总量,即内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的巨细。相应的内存再次被换出时可不必再对交换区写入。
计算可用内存数有一个近似的公式:
第四行的free + 第四行的buffers + 第五行的cached
二、进程信息

列名含义PID进程idPPID父进程idRUSERReal user nameUID进程全部者的用户idUSER进程全部者的用户名GROUP进程全部者的组名TTY启动进程的终端名。不是从终端启动的进程则显示为 ?PR优先级NInice值。负值体现高优先级,正值体现低优先级P末了使用的CPU,仅在多CPU情况下故意义%CPU前次更新到如今的CPU时间占用百分比TIME进程使用的CPU时间总计,单位秒TIME+进程使用的CPU时间总计,单位1/100秒%MEM进程使用的物理内存百分比VIRT进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RESSWAP进程使用的虚拟内存中,被换出的巨细,单位kbRES进程使用的、未被换出的物理内存巨细,单位kb。RES=CODE+DATACODE可实行代码占用的物理内存巨细,单位kbDATA可实行代码以外的部分(数据段+栈)占用的物理内存巨细,单位kbSHR共享内存巨细,单位kbnFLT页面错误次数nDRT末了一次写入到如今,被修改过的页面数。S进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程COMMAND下令名/下令行WCHAN若该进程在睡眠,则显示睡眠中的体系函数名Flags任务标记 Top 1的用法

默认进入top时,各进程是按照CPU的占用量来排序的。
1、在top基本视图中,按键盘数字“1”可以监控每个逻辑CPU的状态:
https://img-blog.csdn.net/201808081521060?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqY2xzeA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
2、敲击键盘‘b’(打开关闭加亮效果)top视图变换如下:
https://img-blog.csdn.net/20180808152549473?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqY2xzeA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
PID为16283为当前top视图中唯一的运行态进程。也可以敲击键盘‘y’来打开大概关闭运行态进程的加亮效果。
3、敲击键盘‘x’(打开/关闭排序列的加亮效果),top视图变换如下:
https://img-blog.csdn.net/20180808152729792?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqY2xzeA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
可以看到如今是按"%CPU"进行排序的,可以按”shift+>”大概”shift+<”左右改变排序序列。
4、改变进程显示字段
在top基本视图中,敲击”f”进入另一个视图,在这里可以编辑基本视图中的显示字段:
https://img-blog.csdn.net/20180808153036303?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqY2xzeA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
用上下键选择选项,按下空格键可以决定是否在基本视图中显示这个选项。
top下令是一个非常强大的功能,但是它监控的最小单位是进程,如果想监控更小单位时,就必要用到ps大概netstate下令来满足我们的要求。
%CPU和us%的区别

有的同砚会把%CPU和us%搞晕,也就是下图所示在top的时间检察cpu的信息
https://img-blog.csdnimg.cn/ecb4d79d86e445a79f689cc7acde5baa.png
这时有的同砚会问:这两个CPU到底哪个是对的。
其实都是对的,只是表达的意思不一样。
官方表明如下

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: CPU使用率过高标题排查及Linux之top下令用法详解_top下令检察线程cpu