Java线上CPU内存冲高题目排查步骤

开发者 2024-9-20 17:19:43 60 0 来自 中国
1 弁言

作为一名从事Java开发快一年的步调员,在线上经常遇到某个模块的Pod发出CPU与内存告警的题目,而这些题目会导致体系相应痴钝乃至是服务不可用。一样平常环境下可以通过重启大概调高Pod的资源量大概增长Pod数目暂时办理题目,但这是治标不治本的,只有找到题目发生的缘故原由才华从根本上办理题目。那么在该怎样快速定位到导致告警的缘故原由呢?下面将汇总一下大致的处理处罚思绪。
一样平常来说导致Java步调CPU与内存冲高的缘故原由有两种:

  • 代码中某个位置读取数据量较大,导致体系内存耗尽,从而导致Full GC次数过多,体系痴钝。
  • 代码中有比力耗CPU的操纵,导致CPU过高,体系运行痴钝。
  • 代码某个位置有壅闭性的操纵,导致该功能调用团体比力耗时,但出现是比力随机的;
  • 某个线程由于某种缘故原由而进入WAITING状态,此时该功能团体不可用,但是无法复现;
  • 由于锁使用不妥,导致多个线程进入死锁状态,从而导致体系团体比力痴钝。
前两种环境出现的频率较高,大概会导致体系不可用,后三种会导致某个功能运行痴钝,但是不至于导致体系不可用。
对于第一种环境,本人曾经遇到过某个查全量数据的接口在某段时间被频仍调用导致内存耗尽、疯狂GC的环境:记一次GC导致的CPU与内存冲高的题目办理。
下面将总结一些具体的排查步骤。
2 分析工具

2.1 top下令检察CPU占用环境

PID为历程编号,COMMAND为此中实验下令,java即为要找的应用

  • top: 展示全部历程占用环境
  • top -N num: 展示CPU占用最高的num个历程
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 22:29, Processed in 0.179179 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表