1. 首页
  2. 生活常识
  3. cpu负载过高怎么办(CPU占用过高处理方法)

cpu负载过高怎么办(CPU占用过高处理方法)

简介:关于cpu负载过高怎么办(CPU占用过高处理方法)的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于生活常识技术大全及相关资讯,可以多多关注茶馆百科网。

一,排查步骤

1.使用top 定位到占用CPU高的进程PID 然后按shift+p按照CPU排序

top命令是Linux系统中常用的性能分析工具。它实时显示系统中每个进程的资源使用情况,类似于Windows中的任务管理器

第一行包含任务队列信息和uptime命令的执行结果

系统时间:07:27:05运行时间:up 1:57 min当前用户:3用户uptime load average: 0.00、0.00、0.00 1分钟、5分钟、15分钟内的负载。平均负载是每5秒检查的活动进程数,并根据特定算法计算。如果这个数字除以逻辑cpu的数量,则大于5表示系统超载第二行,即任务行。

总进程数:150个,运行进程数:1个,睡眠进程数:149个,停止进程数:0个,停止进程数:0个

第三行包含cpu状态信息

0.00% us [user space] -用户空间占用CPU的百分比。sysctl -内核空间占用的CPU百分比。0.0%ni[] -优先级发生变化的进程占用的CPU百分比99.7%id[偶像]-空闲CPU百分比0.0%wa [wait] - IO等待CPU百分比0.0%hi[硬件IRQ] -硬中断占用CPU百分比0.0%si[软件中断]-软中断占用CPU百分比第四行,内存状态

1003020k total, 234464k used, 777824k free, 24084k buffers

第五行是交换分区信息

总共2031612k,已用536k,空闲2031076k,缓存505864k

对于内存监视,我们需要监视第5行中swap的使用情况。如果这个值不断变化,则意味着内核不断地在交换空间和内存之间进行交换。这是一个真正的内存短缺。第4行中使用的内存总量是指内核当前控制的内存总量,第4行中的空闲内存总量是指内核尚未控制的内存总量。并非所有由内核管理的内存都在使用,但也有一些已使用的内存现在可以被重用。内核不会将这些可重用的内存返回给free,所以linux上的空闲内存会越来越少,但是不用担心。更多Linux内核视频资料免费获取后台私信【kernel】自行获取。

第六行,空行

以下第7行:监视每个进程(任务)的状态

PID -进程idUSER -进程所有者PR -进程优先级NI - nice值。负值表示优先级高,正值表示优先级低。VIRT -进程使用的虚拟内存量,单位为kb。VIRT=SWAP+RESRES -未交换出的进程所使用的物理内存的大小,单位为kb。RES=CODE+DATASHR—共享内存大小,单位kbS—进程状态。D=不可中断睡眠状态R=运行S=休眠T=跟踪/停止Z=僵尸进程%CPU -自上次更新以来占用的CPU时间百分比%MEM -进程使用的物理内存百分比TIME+ -进程使用的CPU总时间,单位:1/100秒COMMAND -进程名称的详细信息(命令名称/命令行)

1、进程“需要”的虚拟内存量,包括进程使用的库、代码、数据等。2、如果进程请求100 MB的内存,但只使用了10 MB,它将增加100 MB,而不是实际使用量RES:进程使用的内存不包括在swap out中2,包括其他进程的共享内存3。如果申请100m内存并使用10m内存,则与VIRT 4相比,内存只增加10m。除了自己进程的共享内存外,还包括其他进程的共享内存。虽然进程只使用共享内存的几个功能,但它包含了整个共享内存的大小。在RES - SHR4之后,换出,它将减少DATA1, data所使用的内存。如果没有显示top,按“f”键显示。2、程序所需的真实数据空间在运行中得到真正的利用。使用top命令时,可以使用top内部命令控制进程的显示方式。内部命令如下:s -改变屏幕更新频率l -关闭或启用表示的信息在第一行的t -第1部分关闭或启用表示cpu信息任务的第二行和第三行中的cpu信息的第1部分m - Mem的关闭或启用表示第四排第1部分中的信息和交换信息在第五行的N -第1部分的前后顺序过程PID的大小表明P -列表按照CPU占用率的顺序排列进程列表M -按照内存占用率的顺序排列进程列表h -显示帮助n -设置进程列表中显示的进程个数q -退出top -更改屏幕更新周期top usage:

格式为top [-] [d] [p] [q] [c] [c] [S] [S] [n]参数说明如下:d:表示两次屏幕信息刷新的时间间隔。当然,用户可以使用s交互式命令来更改这一点。p:指定进程ID,只监控进程的状态。q:这个选项会使顶部刷新没有任何延迟。如果调用者具有超级用户权限,top将以尽可能高的优先级运行。S:表示累积模式。s:使top命令以安全模式运行。这消除了交互式命令的潜在危险。i:使top不显示任何空闲或死进程。c:显示整个命令行,而不仅仅是命令名。如果Java进程占用率过高,导致进程无法下线,请检查导致占用率过高的线程。以图中流程为例。如果PID为31357的Java进程占用CPU较多,请记录该进程的PID

2. 检查Java进程中线程的使用情况

top -H -p 31357然后shift+p按CPU排序

说明:-H表示显示线程,-p表示指定的进程

正如您所看到的,具有高CPU使用率的线程,写下它们的pid,假设31357始终是50%的CPU

或者是再用ps -mp pid -o THREAD,tid,time 查询进程中,那个线程的cpu占用率高 记住TID

将上图中线程占用率最高的tid 29108转换为十六进制- 71b4

3.通过jstack命令获取占用资源异常的线程栈,可暂时保存到一个文件中查看

jstack 31357 jstack.31357.log

上面可以看到指定线程的堆栈信息。如果希望查看线程中锁的其他信息,可以添加-l参数

4. 上述方法用于工艺正常时的叠印

jstack -l命令无响应。估计CPU处于空闲状态,无法正常执行命令。根据提示[-F选项可在目标进程无响应时使用],只能放大命令。

0

输出的实际日志结果如下:

找到一堆线程阻塞,有用的结果在这里:

很明显,线程19576一直在运行,并且一直在执行EXCEL导出的相关方法。这就是问题所在。下一个任务是检查这个地方的代码逻辑。

Jstack命令格式:

jstack [ option ] pid

参数描述:

-F jstack [-l]当pid响应失败时,它强制打印堆栈-l长列表。打印关于锁的其他信息,例如属于java.util.concurrent的可拥有同步器列表。-m混合模式输出的堆栈(包括java和本机c/c++片段)。Pid: Java应用程序的进程号。5jps命令以实用的命令格式显示java进程的pid

jps [ options ] [ hostid ]

参数描述:

-m输出传递给main方法的参数,如果是嵌入式JVM则输出null。-l输出应用程序主类的完整包名,或应用程序JAR文件的完整路径。-v输出到JVM的参数。这三个参数一起显示更详细的信息:

这些Java进程在其启动参数中打开了一个JMX远程端口,您通常可以通过jconsole远程连接看到JVM的日常参数。例如,本地访问支付。上图所示的战争过程:

本文主要介绍了关于cpu负载过高怎么办(CPU占用过高处理方法)的相关养殖或种植技术,生活常识栏目还介绍了该行业生产经营方式及经营管理,关注生活常识发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解生活常识技术怎么管理的要点,是您生活常识致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://23.234.50.4:8411/article/1484511.html