[转帖]CPU或内存占用过高时,发生了什么

cpu,内存,占用,发生,什么 · 浏览次数 : 0

小编点评

当 JVM 占用的 CPU/内存居高不下时,CPU 在执行以下任务: 1. **分析线程间交互:** 通过 jstack 命令,我们可以查询每个线程的状态,包括线程 ID(tid)、线程名称(tid4)、CPU占用时间(e.g., 6f8a)和内存占用时间(e.g., 18023)。 2. **定位 CPU 占用高线程:** 通过分析 tid、tid4 和 tid4 的值,我们可以确定哪个线程正在占用 CPU 的大部分时间。 3. **追踪代码执行路径:** 通过 jstack 命令,我们可以跟踪每个线程在执行的代码行,从而定位代码执行的具体顺序。 4. **分析内存使用:** 通过 jstack 命令,我们可以查询每个线程的内存占用情况,并分析内存分配的变化。 5. **诊断问题:** 通过分析线程状态、代码执行路径和内存使用,我们可以诊断 JVM 占用的 CPU/内存原因。 6. **优化代码:** 通过分析问题和代码,我们可以优化代码,减少 CPU 占用量。

正文

https://www.cnblogs.com/jmcui/p/10259359.html

 

在开发过程中,有时候我们发现 JVM 占用的CPU/内存居高不下,跟我们的预期不符,这时,CPU 在做什么呢?是什么线程让CPU/内存如此忙碌呢?我们通过如下几步,可以查看 CPU 在执行什么线程。

1、top 命令查看CPU/内存占用过高的进程(P 按CPU占用大小排序,M 按内存占用大小排序),并记录下进程的 pid

2、top -Hp pid 查看进程的线程信息(P 按CPU占用大小排序,M 按内存占用大小排序),并记录下线程的 tid

3、将 tid 转换为16进制的数字:printf "%x\n" tid

4、使用 jstack 命令,查询线程信息,从而定位到具体线程和代码:jstack pid | grep 6f8a -A 30

这样,你就看到为什么 CPU/内存 占用这么高,是什么线程在捣乱了!

5、极端点的做法,把进程全部的线程堆栈导出来,然后再定位 tid 线程在做什么:jstack 18023 > /home/wwwroot/dump18023

6、统计线程分别处于什么状态,grep java.lang.Thread.State dump18023 | awk '{print $2$3$4$5}' | sort | uniq -c

与[转帖]CPU或内存占用过高时,发生了什么相似的内容:

[转帖]CPU或内存占用过高时,发生了什么

https://www.cnblogs.com/jmcui/p/10259359.html 在开发过程中,有时候我们发现 JVM 占用的CPU/内存居高不下,跟我们的预期不符,这时,CPU 在做什么呢?是什么线程让CPU/内存如此忙碌呢?我们通过如下几步,可以查看 CPU 在执行什么线程。 1、to

[转帖]Docker系列--Docker设置系统资源限制及验证

https://www.cnblogs.com/caijunchao/p/13415386.html 1、限制容器的资源 默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的尽可能多的给定资源。Docker提供了控制容器可以使用多少内存或CPU的方法,设置docker run命令的运行时配置

[转帖]虚拟化: 物理CPU与VCPU的关系 || 内存上限说起 VMware内存分配初探

本文章整合了一下(vSphere&FusionSphere)内存的相关知识: 1.虚拟化CPU与VCPU关系 2.虚拟化的内存分配 1、vSphere 物理CPU与VCPU的关系 为方便识别虚拟的资源和物理(或叫真实的)资源,本人文章中以小写字母v前缀标识虚拟资源,小写字母p前缀标识物理资源。例如:

【转帖】Linux性能优化(十四)——CPU Cache

一、CPU Cache 1、CPU Cache简介 CPU Cache是位于CPU与内存之间的临时存储器,容量比内存小但交换速度却比内存要快得多。Cache的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,会使CPU花费很长时间等待数据到来或把数

【转帖】虚拟化与云计算技术硬核内幕

这种将物理硬件分配给多个使用者的技术,叫做“时分复用”。计算机操作系统的任务调度模块,实质上提供的就是将CPU以“时分复用”的方式给不同任务使用的机制。 那么,如果在虚拟化系统中,也利用时分复用机制,将一个物理CPU或HT分配给多个虚拟机使用,就可以让多个虚拟机共用1个物理HT,也就是在虚拟机操作系

【转帖】isolcpus功能与使用

isolcpus功能存在已久,笔者追溯v2.6.11(2005年)那时内核就已经存在了isolcpus功能。根据kernel-parameters.txt 上的解释,”isolcpus功能用于在SMP均衡调度算法中将一个或多个CPU孤立出来。同时可通过亲和性设置将进程置于 “孤立CPU”运行,iso

[转帖]MAXDOP(max degree of parallelism)

https://www.cnblogs.com/jenneyblog/p/MAXDOP.html 概述 当 SQL Server 在具有多个微处理器或 CPU 的计算机上运行时,它将为每个并行计划执行检测最佳并行度(即运行一个语句所使用的处理器数)。您可以使用 max degree of paral

[转帖]max degree of parallelism 选项

https://learn.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms181007(v=sql.105)?redirectedfrom=MSDN 当 SQL Server 在具有多个微处理器或 CPU 的计算机上运行

[转帖]AMD EPYC——CPU命名规则

AMD的三代服务器CPU都属于7000系列大锅,那么您如何知道要购买的产品呢? 只要看一下右边的最后一个数字,数字1代表第一代那不勒斯EPYC,数字2代表罗马型号,数字3代表新米兰产品。 始终从右到左,第二个数字是性能指标。 在这种情况下,它可以是1、4、6或F。这三个数字表示各种性能步骤,其中6表

【转帖】AMD EPYC——CPU命名规则

AMD的三代服务器CPU都属于7000系列大锅,那么您如何知道要购买的产品呢? 只要看一下右边的最后一个数字,数字1代表第一代那不勒斯EPYC,数字2代表罗马型号,数字3代表新米兰产品。 始终从右到左,第二个数字是性能指标。 在这种情况下,它可以是1、4、6或F。这三个数字表示各种性能步骤,其中6表