当前位置:   article > 正文

开发实战之CPU使用100%怎么办_前端代码cpu占用过高

前端代码cpu占用过高

CPU使用100%怎么办?

总的原则是:先止损解决问题,然后再分析原因进行复盘。

先用top或ps查看CPU使用情况,找到占用过大的进程,然后用perf top实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数。

需要重点关注的几个指标:

  • 用户 CPU 和 Nice CPU 高,说明用户态进程占用了较多的 CPU,所以应该着重排查进程的性能问题。
  • 系统 CPU 高,说明内核态占用了较多的 CPU,所以应该着重排查内核线程或者系统调用的性能问题。
  • I/O 等待 CPU 高,说明等待 I/O 的时间比较长,所以应该着重排查系统存储是不是出现了 I/O 问题。
  • 软中断和硬中断高,说明软中断或硬中断的处理程序占用了较多的 CPU,所以应该着重排查内核中的中断服务程序。

ps命令:查看正在运行的进程

模糊查找

  • ps aux:查看系统中所有的进程;

  • ps -ef | grep pid/进程名
    ps查找,grep过滤
    -e:显示系统内所有进程的信息
    -f:使用完整格式显示进程信息
    |是管道,使ps和grep能共同使用

准确查询:

  • ps -p pid/进程名
  • top -pid pid/进程名

top命令详解:持续监听进程运行状态

top 命令可以动态地持续监听进程地运行状态,而ps只输出当前进程运行状态

top 命令的基本格式:top [选项]
选项:
-d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
-b : 使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到指定的文件中;
-n 次数:指定 top 命令执行的次数。
-p 进程PID:仅查看指定 ID 的进程;
-s: 使 top 命令在安全模式中运行,避免在交互模式中出现错误;
-u 用户名: 只监听某个用户的进程;

比如:

 top -b -n 1 > /root/top.log #让top命令只执行一次,然后把执行结果保存到top.log文件中,这样就能看到所有的进程了
  • 1

输出信息详解
我们看看 top 命令的执行结果,如下:
在这里插入图片描述
第一部分: 显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的;
第二部分:显示的是系统中进程的信息;

第一部分
第一行 :任务队列信息
在这里插入图片描述
第二行: 进程信息
在这里插入图片描述
第三行: CPU 信息
在这里插入图片描述
第四行:物理内存信息
在这里插入图片描述
第五行为交换分区(swap)信息
在这里插入图片描述

我们通过 top 命令的第一部分就可以判断服务器的健康状态

  • 如果 1 分钟、5 分钟、15 分钟的平均负载高于 1,则证明系统压力较大。

  • 如果 CPU 的使用率过高或空闲率过低,则证明系统压力较大。如果物理内存的空闲内存过小,则也证明系统压力较大。

这时,我们就应该判断是什么进程占用了系统资源

  • 如果是不必要的进程,就应该结束这些进程;
  • 如果是必需进程,那么我们该増加服务器资源(比如増加虚拟机内存),或者建立集群服务器。

第二部分
主要是系统进程信息,各个字段的含义如下:
PID:进程的 ID。
USER:该进程所属的用户。
PR:优先级,数值越小、优先级越高。
NI:优先级,数值越小、优先级越高。
VIRT:该进程使用的虚拟内存的大小,单位为 KB。
RES:该进程使用的物理内存的大小,单位为 KB。
SHR:共享内存大小,单位为 KB。
S:进程状态。
%CPU:该进程占用 CPU 的百分比。
%MEM:该进程占用内存的百分比。
TIME+:该进程共占用的 CPU 时间。
COMMAND:进程的命令名。

kill:进程通信

kill 并不是杀死进程的意思,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。

原理
kill 命令会向操作系统内核发送一个信号和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。

kill命令常用信号及其含义

信号编号信号名含义
0EXIT程序退出时收到该信息
1HUP该信号让进程立即关闭.然后重新读取配置文件之后重启
2INT表示结束进程,但并不是强制性的,同 "Ctrl+C"
3QUIT退出 同 Ctrl + \
9SIGKILL用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。一般用于强制中止进程
11SEGV段错误
14SIGALRM时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号
15SIGTERM正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9
18SIGCONT该信号可以让暂停的进程恢复执行。本信号不能被阻断
19SIGSTOP该信号可以暂停前台进程,同 Ctrl+Z 。本信号不能被阻断

vmstat

vmstat命令,是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。此命令的基本格式有如下 2 种:

[root@localhost ~]# vmstat [-a] [刷新延时 刷新次数]# -a 的含义是用 inact/active(活跃与否) 来取代 buff/cache 的内存输出信息。
[root@localhost ~]# vmstat [选项] 
  • 1
  • 2

下表罗列出了 vmstat 命令的第二种基本格式中常用的选项及各自的含义。
在这里插入图片描述

[root@localhost proc]# vmstat 1 3
#使用vmstat检测,每隔1秒刷新一次,共刷新3次
procs ——memory—— swap —io system ——cpu——
r b swpd free buff cache si so bi bo in cs us sy id wa st
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 407376 55772 84644 0 0 5 2 9 10 0 0 100 0 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

该命令输出信息中,各个字段以及含义如下表 :
在这里插入图片描述
如果服务器上的资源占用率比较高,我们就需要手工进行干预。如果是非正常进程占用了系统资源,则需要判断这些进程是如何产生的,不能一杀了之;如果是正常进程占用了系统资源,则说明服务器需要升级了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/637345
推荐阅读
相关标签
  

闽ICP备14008679号