`
Appleses
  • 浏览: 347864 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java项目服务器cpu占用100%解决办法

 
阅读更多

项目上线后运行一段时间,突然发现cpu 8个逻辑核心都占用100%,心情很紧张,然后就在网上找了一些解决方法,具体如下: 
       1.查找哪些进程在耗cpu  
       进入服务器,top 命令看一下,发现进程6633占用了800%  
       [root@3server ~]# top 
       2.把进程的栈dump到文件里,以便后面的分析 
       [root@3server ~]# jstack 6633 > cpu1128.log 
       3.看看这个进程里面哪些线程在占用cpu  
       [root@3server ~]# top -p 6633 -H 
       一大片占用cpu很高的线程,选一个最高的吧,PID=5159 
       4.接着要看刚才dump出来的cpu日志了,里面会有6633这个进程下面每个线程的栈信息,但是是十六进制显示的,所以先把5159转换成16进制  
       [root@3server ~]# printf %0x 5159 
       [root@3server ~]# 1427 
       5.在cpu日志里找PID=1427的线程 

       [root@3server ~]# vi cpu1128.log

  cpu1128.log         6.分析原因 
            看日志,很明显是org.hibernate.exception.ExceptionUtils.getCauseUsingWellKnowTypes(...)这里“卡住”了。这个线程是"RUNABLE"状态的,为什么会"卡住"呢?不用说了,一定是死循环。后来花了很多时间在debug状态下把这个问题重现了(Hibernate 3.3.1.GA版本,通过hessian调用远程服务器报SQLGrammarException异常,就会出现这个问题)。跟踪到hibernate源码里发现了问题:

             

public static int getThrowableCount(Throwable throwable) {
		int count = 0;
		while ( throwable != null ) {
			count++;
			throwable = ExceptionUtils.getCause( throwable );
		}
		return count;
}

         这个方法里,throwable和它的cause引用的同一个SQLGrammarException对象,导致在while这里产生了死循环。这肯定是hibernate的bug了。于是把hibernate升级到3.3.2.GA(原来是3.3.1.GA,不敢升太多)问题解决。 

 

转自:http://itindex.net/detail/52080-java-%E9%A1%B9%E7%9B%AE-%E6%9C%8D%E5%8A%A1%E5%99%A8

分享到:
评论

相关推荐

    linux服务器找到占用cpu高的java代码的办法

    4. **分析JStack日志**:打开`jstack.log`,寻找CPU占用率高的线程。线程堆栈中显示的调用路径就是当前正在执行的代码路径。如果某个线程的堆栈中有很多重复的调用,那很可能就是问题所在。 5. **代码审查**:根据`...

    【原创】java程序cpu占用过高问题分析

    这篇原创博客“【原创】java程序cpu占用过高问题分析”探讨了如何识别和解决这些问题。 首先,分析CPU占用过高的第一步是获取性能数据。这通常通过Java的JMX(Java Management Extensions)或者监控工具如VisualVM...

    CPU占用高

    标题“CPU占用高”指的是计算机或服务器的中央处理器在运行过程中消耗资源过多,导致系统响应变慢或无法正常处理任务的现象。这种情况可能是由于多种因素引起的,包括但不限于恶意软件、资源密集型应用程序、系统...

    Java实现对系统CPU、内存占用率的控制

    背景:由于使用的业主的云资源,由于使用率低,会不持续的缩减服务器配置。...问题:怎样通过Java程序实现CPU、内存占用超过50%? 方案:详见我的博客:https://blog.csdn.net/taotao_guiwang?spm=1010.2135.3001.5343

    使用dotnet-dump 查找 .net core 3.0 占用CPU 100%的原因解析

    公司的产品一直紧跟 .net core 3.0 preview 不断升级, 部署到 Linux 服务器后, 偶尔会出现某个进程CPU占用100%.  由于服务部署在云上, 不能使用远程调试; 在局域网内的Linux 服务器 或 Windows开发机上又不能重现这...

    java实战CPU占用过高问题的排查及解决

    Java 实战 CPU 占用过高问题的排查及解决 在 Java 应用程序中,CPU 占用过高是一个常见的问题,可能会导致服务器崩溃或应用程序崩溃。因此,快速定位和解决 CPU 占用过高问题是非常重要的。本文将分享 Java 实战 ...

    java获取计算机cpu利用率和内存使用

    java 获取计算机cpu利用率和内存使用信息,需要的自己下载测试吧。

    java监控linux cpu使用率

    CPU使用率是指在特定时间间隔内,CPU被占用的时间比例,通常以百分比表示。在Linux中,可以通过`/proc/stat`文件获取这些信息。这个文件包含了系统启动以来的CPU使用统计,包括用户进程、系统进程、空闲时间等。 在...

    线上服务CPU100%问题快速定位实战

    突然间,运维团队收到了服务器CPU异常告警,提示CPU使用率达到100%。此时,我们需要确定哪些服务进程导致了CPU过载,进而定位到具体是哪个线程及哪段代码导致了CPU占用过高。 #### 三、定位步骤详解 ##### 步骤一...

    LINUX类主机JAVA应用程序占用CPU、内存过高分析手段

    当用户量过大,或服务器性能不足以支持大用户量,但同时又得不到扩容的情况下,进行性能分析,并对系统、应用、程序进行优化显得尤为重要,也是节省资源的一种必不可少的手段。目前大多数运维产品都基于JAVA语言开发...

    Java进程cpu占用过高问题解决

    Java进程cpu占用过高问题解决是指Java进程中cpu占用率过高的问题,导致了系统性能下降和服务器崩溃。解决这个问题需要了解Java进程的cpu占用率的原因,并采取相应的措施来解决。 cpu占用率过高的原因: 1、Java ...

    Java获取系统CPU、内存、硬盘等系统信息

    本文将详细探讨如何利用Java获取Windows和Linux系统的CPU、内存以及硬盘信息。 首先,让我们聚焦于CPU信息的获取。在Java中,`java.lang.management`包提供了ManagementFactory类,它包含了获取系统管理信息的方法...

    控制cpu的占用率

    在IT领域,优化CPU占用率是一项重要的任务,特别是在服务器管理和应用程序性能调优中。本文将深入探讨如何控制CPU的占用率,并提供相关的源码和工具分析。首先,我们需要理解CPU占用率的概念及其影响因素。 CPU占用...

    Java堆栈分析服务器

    首先,当服务器CPU负载持续100%且线程被阻塞导致服务响应变慢时,我们需要使用系统工具`top`来查看哪个进程占用了最多的资源。`top`命令会显示当前系统中所有进程的资源使用情况,包括CPU和内存等。通过这个命令,...

    长连接和短连接性能测试结果差异 (1).docx

    例如,当并发线程数为1时,响应时间为0.015秒,APP服务器CPU占用达到780%,DB服务器CPU占用23%,内存占用85%。 2. **TCP短连接**: - 短连接是在每次通信完成后立即关闭连接,下次通信需重新建立。虽然每次连接...

    CPU占用率检测模块.rar

    如果CPU占用率为100%,则表明CPU正在满负荷运行,没有空闲时间处理其他任务。 2. **CPU占用率检测方法** - **操作系统内置工具**:大多数操作系统(如Windows的任务管理器、Linux的top或htop命令、macOS的活动监视...

    LF-Spy(Java服务器探针)

    <br>LF-Spy能够自动测试目标Java服务器的网络连接速度、MAC地址、服务器硬盘剩余空间、服务器运算能力、服务器的内存资源损耗、cpu占用率、硬盘大小、页面执行时间等参数。并提供服务器基本信息,服务器组件支持...

    Java服务器问题排查思路及工具集.zip

    Java服务器问题排查思路及工具集.zip linux工具集 java工具集 cpu占用率高如何解决 内存占用率高如何解决 OOM(out of memory)如何解决

Global site tag (gtag.js) - Google Analytics