【JVM】CPU飙升问题

摘要:
在线程序的CPU突然飙升。在一个低并发的网站中,99.99%的程序有一个无休止的循环。接下来,让我们看看如何具体查找和排除故障。检查最新的代码并在期间搜索关键字。根据我多年的临床经验,100%的新人都写了这个bug。如果找不到原因,请继续查找。线程dump1.查找java进程id jps-l2。通过进程id查找进程中每个线程的状态,包括CPU使用率top-pid3。根据CPU使用率输出H

前言

 线上程序突然CPU飙升,,,在一个并发不大的网站,这种情况基本上99.99%都是程序有死循环。接下来看看怎么具体定位排查吧。

硬啃

看看最近的代码,搜索关键字while,根据我多年临床经验,100%是哪位菜鸟写了bug。

如果找不到原因,继续往下看。

线程dump

1、找出java的进程id

jps -l 


2、通过进程id找到进程中各个线程的情况,包含CPU使用占比

top -p pid


3、输出H,按照CPU使用占比排序,并找到CPU占比高的线程threadId

 H


4、通过线程id打印出线程dump

jstack -l threadId > /tmp/threadId.txt


5、然后就可以找到可以代码处了

【JVM】CPU飙升问题第1张

免责声明:文章转载自《【JVM】CPU飙升问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# api调用,上窗口在最上面,模拟键盘cartographer---第二篇(imu与lidar外参的自动标定)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ACE_Task笔记

ACE_Task封装了任务,每个任务都含有一或多个线程,以及一个底层消息队列。各个任务通过这些消息队列进行通信。 其主要成员如下: open():初始化资源 close():释放资源 activate():启动线程,可指定线程的数目 svc():线程的启动位置 putq():放置消息到任务的消息队列中 getq():从任务的消息队列中取出消息 thr_co...

基于无锁的C#并发队列实现

最近开始学习无锁编程,和传统的基于Lock的算法相比,无锁编程具有其独特的优点,Angel Lucifer的关于无锁编程一文对此有详细的描述。 无锁编程的目标是在不使用Lock的前提下保证并发过程中共享数据的一致性,其主要的实现基础是CAS操作,也就是compare_and_swap,通过处理器提供的指令,可以原子地更新共享数据,并同时监测其他线程的干...

HashMap之原理及死锁

一、HashMap原理 1.HashMap的本质就是数组和链表。table是一个entry数组,每一个数组元素保存一个Entry节点,而Entry节点内部又连接着同样key的下一个Entry节点,就构成了链表。. 详情见 HashMap源码分析 2.HashMap死锁原因: HashMap会造成死锁,因为HashMap是线程非安全的,多并发的情况...

Java多线程 -yield用法

 前几天复习了一下多线程,发现有许多网上讲的都很抽象,所以,自己把网上的一些案例总结了一下!  一. Thread.yield( )方法:  使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次中不会执行到了。 ...

.NET应用程序7种最常见的性能问题及其解决方案

译者注:这篇文章依然是介绍.NET Framework框架下的性能问题排查,可能并不直接适用于.NET Core,但有时也能提供一些参考。   .NET应用程序7种最常见的性能问题及其解决方案 原文地址:https://www.eginnovations.com/blog/top-7-net-application-performance-problems...

Oracle报 ORA-00054资源正忙的解决办法

来源于:http://www.cnblogs.com/loveLearning/p/3625544.html oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT 问题如下: SQL> conn scott/tiger@vm_databaseConnected to Oracle Database 11g Enterprise...