java应用cpu占用过高故障排除

首先一定要清楚:java应用造成cpu过高的主要原因

1:一般是线程一直处于可运行(Runnable)状态,通常这些线程在执行无阻塞操作、循环、正则或纯粹的计算等任务
2:另一个可能造成CPU高的原因是频繁GC,这个也是我遇到比较多的,有如下情况

2-1:堆内存不足:
如果JVM堆内存设置得太小,应用程序可能需要频繁地创建新对象,导致堆内存很快被填满,从而触发GC。

2-2:对象生命周期短:
创建了很多生命周期很短的对象,这些对象死后很快就会变成垃圾,增加了GC的压力。

2-3:内存泄漏:
代码中存在内存泄漏,即长时间持有不再使用的对象引用,导致这些对象不能被回收,随着时间的推移,内存泄漏会导致堆内存中积累大量垃圾。

2-4:大对象分配:
频繁分配大对象(如大数组或大字符串)可能导致老年代内存很快被填满,触发Full GC。

2-5:不恰当的垃圾收集器选择:
使用了不合适的垃圾收集器,或者垃圾收集器的参数设置不当,可能不适合应用程序的特定需求。

2-6:新生代与老年代比例不当:
新生代(Young Generation)与老年代(Old Generation)的比例设置不当,可能导致新生代频繁GC或者老年

2-7:代频繁Full GC。

2-8:线程数量过多:
创建了大量线程,每个线程都有自己的栈和相关资源,过多的线程可能导致频繁的GC。

2-9:静态
像ArrayList、HashMap这样的静态集合类,如果不断添加元素而不及时清理,会占用越来越多的内存,导致频繁GC。

2-10:缓存策略不当:
缓存数据没有合理设置过期策略或清理机制,导致缓存数据长期占用内存。

2-11:持久代(PermGen)空间不足:
在Java 8之前,持久代(PermGen)用于存储类的元数据,如果加载的类太多,或者有大量字符串常量,可能会导致PermGen空间不足,触发GC。

2-12:JVM参数设置不当:
如-Xmn(设置新生代大小)、-XX:SurvivorRatio(设置Eden区和Survivor区的比例)等参数设置不当,可能导致频繁GC。

要解决频繁GC的问题,可以采取以下措施:
监控和分析GC日志,使用工具如VisualVM、JConsole、MAT等。
优化代码,减少内存泄漏和不必要的对象创建。
调整JVM参数,合理设置堆内存大小和垃圾收集器。
优化数据结构和算法,减少内存消耗。
实施有效的缓存策略和资源管理。

1:使用top命令查看那个进程占用过高

在这里插入图片描述

2:查看进程中线程使用情况,使用命令 top -H -p 查看如下图:

#-H:所有线程占用资源情况。
#-p<进程号>:指定进程;
top -H -p 16387

在这里插入图片描述

3:查看进程中的线程快照,先将现场转成16进制

3-1:查看线程23696,先转16进制

[root@localhost ~]#  printf "%x\n" 23696
5c90

3-2:通过jstack 命令查看线程23696的快照(docker内部如果使用是精简的jdk可能没有jstack这个命令)

[root@localhost ~]# jstack 16387 |grep "5c90" -A 30
"System Clock" #65 daemon prio=5 os_prio=0 tid=0x00007f8668545000 nid=0x5c90 runnable [0x00007f86fc9e4000]java.lang.Thread.State: TIMED_WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x00000006cf3fa670> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)"lettuce-eventExecutorLoop-1-8" #64 daemon prio=5 os_prio=0 tid=0x00007f866808e800 nid=0x5bc5 waiting on condition [0x00007f86fd0e5000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x00000006c9594648> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)at io.netty.util.concurrent.SingleThreadEventExecutor.takeTask(SingleThreadEventExecutor.java:243)at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:64)at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.lang.Thread.run(Thread.java:748)"lettuce-eventExecutorLoop-1-7" #63 daemon prio=5 os_prio=0 tid=0x00007f865c079800 nid=0x5bb2 waiting on condition [0x00007f86fd1e6000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for  <0x00000006c9579898> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
[root@localhost ~]# 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/36101.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

CPU是如何执行任务的?

你清楚下面这几个问题吗&#xff1f; 有了内存&#xff0c;为什么还需要 CPU Cache&#xff1f; CPU 是怎么读写数据的&#xff1f; 如何让 CPU 能读取数据更快一些&#xff1f; CPU 伪共享是如何发生的&#xff1f;又该如何避免&#xff1f; CPU 是如何调度任务的&#x…

最短路径算法(Dijkstra算法 + Bellman-Ford 算法 + Floyd-Warshall算法)

最短路径算法 完整版万字原文见史上最全详解图数据结构 1. Dijkstra算法&#xff08;单源最短路径&#xff09;&#xff08;无负权边图&#xff09; 算法原理 1. Dijkstra 算法通过 贪心策略 计算从一个源顶点到其他所有 顶点的最短路径。2. 时间复杂度为 O(V^2)&#xff08…

pyqt6事件概要

例子&#xff1a; 利用qtdesigner建立闹钟 python代码 # 导入所需要的文件 from PyQt6.QtGui import QIcon, QPixmap from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QListWidgetItem from PyQt6 import uic from PyQt6.QtCore import Qt, QTime imp…

位运算符I^~

&运算&#xff1a;上下相等才是1&#xff0c;有一个不同就是0 |运算&#xff1a;只要有1返回的就是1 ^(亦或)运算&#xff1a;上下不同是1&#xff0c;相同是0 ~运算&#xff1a;非运算&#xff0c;与数据全相反 cpu核心运算原理&#xff0c;四种cpu底层小电路 例&#xf…

【求助】Tinymce组件异常

版本号 { "tinymce/tinymce-vue": "^3.0.1", "tinymce": "^5.10.9", "vue": "^2.6.10", }问题&#xff1a; 就是红框处点击后没有菜单出现&#xff0c;下面是正常的

大模型分布式训练框架——DeepSpeed

本文的主要内容是阐述DeepSpeed训练模块在跟进大模型技术中的作用&#xff0c;重点解析了RLHF在其中的应用。文中深入探讨了模型训练的关键概念&#xff0c;如显存需求、优化器迭代和混合精度训练。针对大规模模型训练&#xff0c;介绍了模型并行和流水线并行等分布式训练方法&…

跟着AI 学 AI, 开发一个ChatBot, 完整图文版__持续更新中

跟着AI 学 AI&#xff0c; 开发一个ChatBot, 完整图文版__持续更新中.记录步骤以便排查错误。 使用Python 加 Visual Studio Code&#xff0c;开发代码。 使用Flask 套件和 ngrok 工具。 Step 1 下载安装Python &#xff0c;下载完后 在CMD 测试 Python --version. 结果出现p…

Pyside6 --Qt Designer--Qt设计师--了解+运行ui_demo_1.py

目录 一、打开Qt设计师1.1 Terminal终端1.2 打开env&#xff0c;GUI虚拟环境下的scripts文件1.3 不常用文件介绍&#xff08;Scripts下面&#xff09; 二、了解Qt设计师的各个控件作用2.1 点击widget看看效果&#xff01;2.2 点击Main Window看看效果 三、编写一个简易的UI代码…

『大模型笔记』OpenAI 十二天活动第1天:o1和o1 pro

『大模型笔记』OpenAI 十二天活动第1天:o1和o1 pro 文章目录 一. 『大模型笔记』OpenAI 十二天活动第1天:o1和o1 proOpenAI的12天活动o1完整版本的发布o1 Pro模式ChatGPT Proo1的性能提升多模态输入与推理o1 Pro模式的应用模型对话与历史问题示范二. 参考文献一. 『大模型笔记…

SpringBoot 运行发生异常:java: 错误: 不支持发行版本 5

一、异常&#xff1a; 二、原因&#xff1a; 本地运行用的是JDK17&#xff0c;报错应该是项目编译配置使用的Java版本不对&#xff0c;需要检查一下项目及环境使用的Java编译版本配置。 三、解决&#xff1a;

2024.12.2——[极客大挑战 2019]Secret File 1

知识点&#xff1a;抓包 代码审计 filter伪协议 一、解题步骤 step 1 查看源代码中的信息 查看源代码发现一个php文件&#xff1a;[./Archive_room.php](http://72df1f22-85bf-47bb-b23a-efcaf88701d4.node5.buuoj.cn:81/Archive_room.php) 点进去后发现没什么用&#xff0c…

MKS EDGE Series RF Generators Power Solution 软件

MKS EDGE Series RF Generators Power Solution 软件

【汇编语言】标志寄存器(一) —— 标志寄存器中的标志位:ZF、PF、SF、CF、OF 一网打尽

前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言可以深入理解计算机底层工作原理&#xff0c;提升代码效率&#xff0c;尤其在嵌入式系统和性能优…

【C++】priority_queue优先队列

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的string类的priority_queue优先队列&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1. 介绍2. 仿函数(A) 介绍(B) 控制比较逻辑 3. priority_queue和…

Python3 operator 模块

Python2.x 版本中&#xff0c;使用 cmp() 函数来比较两个列表、数字或字符串等的大小关系。 Python 3.X 的版本中已经没有 cmp() 函数&#xff0c;如果你需要实现比较功能&#xff0c;需要引入 operator 模块&#xff0c;适合任何对象&#xff0c;包含的方法有&#xff1a; o…

短视频矩阵系统开发|技术源代码部署

短视频矩阵系统通过多账号运营管理、多平台视频智能分发等功能&#xff0c;助力企业实现视频引流、粉丝沉淀和转化。 短视频矩阵系统是一种创新的营销工具&#xff0c;它整合了多账号管理、视频智能分发、数据可视化等多种功能&#xff0c;为企业在短视频领域的发展提供了强大…

YOLOV11 快速使用教程

概述 这里主要记录使用NVIDIA GPU pytorch 检测系列模型的快速使用方式&#xff0c;可以快速解决一些工业应用的问题&#xff0c;比如&#xff1a;无网、数据大需要改路径、需要记录不同实验结果等问题。 安装 参考官网&#xff0c;自己安装好Python > 3.8和pytorch >…

git修改某次commit(白痴版)

第一步 在bash窗口运行 git rebase --interactive commitId^ 比如要改的commitId是 abcedf git rebase --interactive abcedf^键盘 按 i 或者 ins 进入编辑状态 进入insert 编辑状态 在bash窗口手动把对应commit前面的pick改为e或edit 按 esc 进入退出程序 输入 :wq 保存退出…

AI 建站:Durable

网址&#xff1a;https://app.durable.co 步骤 1) 登录 2&#xff09;点击创建新业务 3&#xff09;填写信息后&#xff0c;点击创建 4&#xff09;进入业务 5&#xff09;生成网站 6&#xff09;生成完成后不满意的话可以自己调整 7&#xff09;点击保存 8&#xff09;发布 …

网络原理之 TCP 协议

目录 1. TCP 协议格式 2. TCP 原理 (1) 确认应答 (2) 超时重传 (3) 连接管理 a) 三次握手 b) 四次挥手 (4) 滑动窗口 (5) 流量控制 (6) 拥塞控制 (7) 延时应答 (8) 捎带应答 3. TCP 特性 4. 异常情况的处理 1) 进程崩溃 2) 主机关机 (正常流程) 3) 主机掉电 (…