内存泄露和CPU持续升高问题排查与解决

摘要:
1、 内存泄漏的原因1。对象未回收2。IO流未正常关闭,导致持续资源占用2。CPU继续上升1。存在一个无休止的循环,这导致程序无法退出并继续占用CPU 2。存在并发性,大量线程正在抢占CPU资源3。响应速度慢1。jvm经常执行fullgc,导致服务终端2。线程阻塞,导致大量请求阻塞4常见的故障排除命令jstat-gcutilpid10001000(检查垃圾收集,用进程id替换pid,每秒执行一次,循环1000次)

一、内存泄露的原因

1.对象没有被回收

2.IO流没有正常关闭,导致持续占用资源

二、CPU持续升高

1.存在死循环,导致程序无法退出,持续占用cpu

2.存在并发,大量线程在抢占cpu资源

三、响应速度慢

1.jvm频繁进行fullgc,导致服务终端

2.线程阻塞,导致大量请求阻塞

四、常用的排查命令

jstat -gcutil pid 1000 1000 (查看垃圾回收情况,pid替换成进程id,一秒执行一次,循环一千次)

 内存泄露和CPU持续升高问题排查与解决第1张

jstack pid(查看线程的堆栈信息)

 内存泄露和CPU持续升高问题排查与解决第2张

jmap -histo:live pid| head -n 200(查看对象在内存中的占用情况)

 内存泄露和CPU持续升高问题排查与解决第3张

————————————————
版权声明:本文为CSDN博主「明月清风_Dustin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_30525851/article/details/93878190

免责声明:文章转载自《内存泄露和CPU持续升高问题排查与解决》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇phpredis中incr以及decr等自增命令出现的问题egret 发布ios记录下篇

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

相关文章

额!Java中用户线程和守护线程区别这么大?

在 Java 语言中线程分为两类:用户线程和守护线程,而二者之间的区别却鲜有人知,所以本文磊哥带你来看二者之间的区别,以及守护线程需要注意的一些事项。 1.默认用户线程 Java 语言中无论是线程还是线程池,默认都是用户线程,因此用户线程也被成为普通线程。 以线程为例,想要查看线程是否为守护线程只需通过调用 isDaemon() 方法查询即可,如果查询的值...

Java多线程-线程的调度(休眠)

Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定时间后,线程会苏醒,进入准备状态等待执行。...

Delphi消息同步(同步到界面:VCL线程的同步方法 Synchronize(用消息来同步))

先说一下RTL和VCL RTL(Run-Time library),运行时库,包括System、SysUtils、Math三个单元,提供的函数与语言、编译器、操作系统及进程有关 RTL提供类之间继承于 TObject 和 RTL内部的类 VCL(Visual Component Library),可视化组件库,包括Graphics、classes、Cont...

JVM线程状态Running、Sleeping、Wait、Park、Monitor

1,使用JVisualVM时,打开Threads监控,我们可以发现Java的线程状态有以下几种: 2,JVM线程状态: NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED BLOCKED是等待获得对象锁 WAITING是调用了wait, sleep, park wait, 进入TIMED_...

《深入理解Java内存模型》读书总结

概要 文章是《深入理解Java内容模型》读书笔记,该书总共包括了3部分的知识。 第1部分,基本概念 包括“并发、同步、主内存、本地内存、重排序、内存屏障、happens before规则、as-if-serial规则、数据依赖性、顺序一致性模型、JMM的含义和意义”。 第2部分,同步机制 该部分中就介绍了“同...

Thread.setDaemon设置说明

转载地址:http://blog.csdn.net/m13666368773/article/details/7245570 Thread.setDaemon的用法,经过学习以后了解: 1. setDaemon需要在start方法调用之前使用 2. 线程划分为用户线程和后台(daemon)进程,setDaemon将线程设置为后台进程 3....