JVM调优实战

2023-10-29

1、当项目运行一段时间以后,产生了OOM的问题,我们该如何排查问题呢?

用top命令,看看是哪个进程CPU占用率高,获取它的进程ID,再根据具体的进程id,执行 top -HP 进程id号  命令,看看哪个线程的CPU占用率高,如果是业务线程出现问题,则根据线程ID去检查业务代码;如果是GC线程占用率高,去看看日志再确定具体问题(有可能发生内存泄漏)。

1、执行jps,

列出系统中所有在运行的java进程,由此可以获取指定进程的进程id号

2、执行jinfo 进程id号 ,

可以获取进程的详细信息,可以看到堆内存设置的大小等

 3、 jstat -gc 进程id号,

可以看到内存中各个区域的内存使用情况

 4、top

可以查看所有的进程,可以看到各个进程占用cpu的情况,并动态进行刷新;可以根据CPU占用率找出发生问题的进程。

 5、知道哪个进程有问题,则执行 top -HP 进程id号  命令

,可以看到指定进程内,线程占用CPU的情况,以及线程的名称和线程的种类(业务线程和系统线程)

或者是使用命令:jstack  进程ID | more

可以看到进程中各线程的详细信息,如线程状态,线程调用了哪些方法;

 

 可以用这个命令来判断线程是否陷入死锁,如果多个线程都在等待同一个对象,那么可能陷入死锁。

 线程名称如下,符合开发规范需要给每个线程赋予名字,以方便知道是哪一个线程出现问题

6、执行jmap  -histo 进程id,

可以查看Java堆转储快照的信息,可以知道有哪些类,这些类产生多少对象,占用了多少内存。

 可以将整个堆存储以文件的形式导出:

 7 可以使用jvisualVM工具,

将堆生成的文件进行分析 

为什么在实际项目中,最大堆和最小堆的数值大多设置成一样?

如果大小设置成不一样,那么堆内存大小会根据实际需要进行动态的扩张或者是缩小,而这一个过程是耗费一定资源的,影响了程序的执行效率。如果说一台机子就一个程序在跑,那就没必要将最大堆和最小堆大小设置成不一样的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JVM调优实战 的相关文章

  • 具有默认值的 Java JAX-RS 自定义参数

    假设我有这个 这只是一个示例 GET Path value address Produces application json public Response getAddress QueryParam user User user 用户是
  • Java - 如何将特殊字符放入字符串中

    Java 似乎有很好的字符串处理能力 尽管如此 我还是遇到了最简单的问题 我需要动态字符串 它们在运行时更改 因此字符串类型不是一个好的选择 因为它们是不可变的 所以我使用字符数组 设置起来有点痛苦 但至少它们是可以修改的 我想创建一个字符
  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • 在Java中使用命令行编译多个包

    您好 我一直在使用 IDE 但现在我需要从命令行运行和编译 问题是我有多个软件包 我试图找到答案 但没有任何效果 所以我有 src Support java files Me java files Wrapers java files 你知
  • 将 Hibernate 对象序列化为 JSON 时抛出异常

    好吧 我正在使用 Hibernate 将一个小型数据库加载到一些表示表的类并与数据库交互 一切都很好 我真的可以看到所有结果 而且我没有任何空字段 所有这些都已被使用 这里我展示了 主 类 表 import javax persistenc
  • 使用 Java 在 WebDriver 中按 Ctrl+F5 刷新浏览器

    我已经使用 java 刷新了 WebDriver 中的浏览器 代码如下 driver navigate refresh 如何使用 Java 在 WebDriver 中按 Ctrl F5 来做到这一点 我认为您可以使用 WebDriver 和
  • URL.setURLStreamHandlerFactory

    我正在使用带有嵌入式 Jetty 的可执行 jar 开发一个 Web 应用程序 我的jar包含一个依赖jar jar in jar 我参考了JarRsrcLoader and RsrcURLStreamHandlerFactory由 Ecl
  • 使用 ChannelExec 的命令未执行 - Jsch

    我正在使用 Jsch 在服务器中创建一个文件并执行一些命令 对于文件创建 它工作正常 但是对于命令执行 则不然 它保持状态 1 仍在处理它 并永远保持该状态 这种情况发生在 shell 执行或我尝试成为 root 时 请按照以下方法操作 p
  • RMI 中的引用传递问题? [复制]

    这个问题在这里已经有答案了 有人可以告诉我我错在哪里 为什么这个 RMI 聊天应用程序不起作用 目标是通过远程对象或序列化对象实现客户端 服务器和逻辑之间的解耦 import javax swing import java awt even
  • 如何拦截 REST 端点以接收所有标头?

    我当前的代码是 Path login RequestScoped public class LoginResource GET SecurityChecked public Response getUser HeaderParam AUTH
  • Java Microsoft Excel API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java-如何将黑白图像加载到二进制中?

    我在 FSE 模式下使用 Java 和 swing 我想将完全黑白图像加载为二进制格式 最好是二维数组 并将其用于基于掩码的每像素碰撞检测 我什至不知道从哪里开始 过去一个小时我一直在研究 但没有找到任何相关的东西 只需将其读入Buffer
  • 如何将 Observable>> 转换为 Observable>

    我陷入了如何将以下可观察类型转换 转换为我的目标类型的困境 我有以下类型的可观察值 Observable
  • 创建正则表达式匹配数组

    在Java中 我试图将所有正则表达式匹配返回到一个数组 但似乎您只能检查模式是否匹配某些内容 布尔值 如何使用正则表达式匹配来形成与给定字符串中的正则表达式匹配的所有字符串的数组 4城堡的回答 https stackoverflow com
  • 使用 secp256r1 曲线和 SHA256 算法生成 ECDSA 签名 - BouncyCastle

    我正在尝试使用带有 secp256r1 曲线 P256 的 ECDSA 和用于消息哈希的 SHA256 算法生成签名 我也在使用 Bouncy Castle 库 下面的代码 public class MyTest param args pu
  • Java中的回调接口是什么?

    SetObserver 接口的代码片段取自有效的Java 避免过度同步第67条 public interface SetObserver
  • 使用 JAD 反编译 java - 限制

    我正在尝试使用 Java 中的 JAD 反编译几个 jar 文件 我也尝试过 JD GUI 但运气更差 但出现了很多错误 一种类型 易于修复 似乎是内部类 但我也发现了这段代码 static int SWITCH TABLE atp com
  • 为什么这个私人浮动字段变为零?

    我有一些奇怪的行为 我很难向自己解释 称为 textureScale 的浮点字段变为零 如果某些代码正在更改该值 则可以解释这一点 然而 我希望能够通过将其设置为 私有最终浮点 来导致构建失败 或者至少是运行时异常 那么无论更改该值都将失败
  • 对于当前月份和日期但年份不同的日期,经过的月份计算未给出正确的结果

    我正在尝试计算自特定日期以来经过的月份 该函数工作正常 尽管如果我将今天的日期与过去的不同年份放在一起 它会给我一个月的差异 不到一个月 假设对于所有日期 该函数都运行良好 除了 如果今天是 2014 03 06 YYYY MM DD 并且
  • Java:使用 Graph API 在线更新 Sharepoint 上的 docx 文件

    我在使用 Java 在线更新 Sharepoint 上的 docx 文件时遇到问题 首先 我检查了构建 PUT 请求的 URL 此处 并使用此请求 PUT drives drive id items item id content 我首先使

随机推荐

  • HTML第一次作业

    什么是web前端 web前端就是由多种技术制作的 用来给用户展示的网页 也叫网站的前台部分 包括的技术有html css javascript jQueery bt等 什么是HTML hyper text maekuo language 骨
  • DVWA靶场存储型XSS漏洞实验

    文章目录 文章目录 前言 一 XSS基础 1 什么是XSS 2 XSS漏洞原理 3 XSS漏洞成因 4 XSS漏洞危害 5 存储型XSS漏洞原理 6 存储型XSS与反射型XSS的区别 二 DVWA靶场实战 1 存储型XSS漏洞利用 LOW
  • 求逆矩阵的常用三种方法

    1 待定系数法 矩阵A 1 2 1 3 假设所求的逆矩阵为 a b c d 则 这里写图片描述 从而可以得出方程组 a 2c 1 b 2d 0 a 3c 0 b 3d 1 解得 a 3 b 2 c 1 d 1 2 伴随矩阵求逆矩阵 伴随矩阵
  • node之Buffer(缓冲区)

    Node js Buffer 缓冲区 JavaScript 语言自身只有字符串数据类型 没有二进制数据类型 但在处理像TCP流或文件流时 必须使用到二进制数据 因此在 Node js中 定义了一个 Buffer 类 该类用来创建一个专门存放
  • 矢量绘图UI设计Sketch

    Sketch是一款Mac操作系统上常用的矢量图形编辑软件 旨在帮助用户设计和创建高质量的UI和UX界面 软件安装 Sketch 中文 以下是Sketch软件的一些主要特点 矢量工具和对象 Sketch提供了多种画线 填充 阴影 文本和形状等
  • UE4 部分命令知识点梳理

    UE4 部分命令知识点梳理 1 r SSGI Enable 0 1 屏幕空间 全局光照关闭 开启 2 DFO 距离场AO 指数指的是AO强度 遮挡最大距离 指的是距离场AO影响的最大距离 3 r forcelod 1 0 1 等 设置场景模
  • CSS中clear:both的作用

    clear both意思就是清除浮动 例如我们设置了三个div如下
  • es6中let var const 的特点及区别

    首先 var是定义一个变量常用的方法 与其相似的还有let和const 以下介绍他们三个的特点及不同 一 var var的用法很多 没有什么局限 可以对变量进行声明 例如 注意 var let const 是js的关键词 需要写在scrip
  • CSDN笔记

    拉普拉斯变换的收敛域 ROC 与逆变换 ILT 1 是否可积即是否收敛 如果可收敛 面积 拉氏值即为收敛域 1 收敛的条件 e jwt 积分为振荡函数 2 常系数线性微分方程对应线性时不变系统 其分析步骤有三 3 拉氏逆变换 ILT 的方法
  • Linux僵尸进程怎么处理,Linux 僵尸进程如何处理

    Linux 允许进程查询内核以获得其父进程的 PID 或者其任何子进程的执行状态 例如 进程可以创建一个子进程来执行特定的任务 然后调用诸如 wait 这样的一些库函数检查子进程是否终止 如果子进程已经终止 那么 它的终止代号将告诉父进程这
  • js求时间差

    js求时间差 var date1 new Date 开始时间 alert aa var date2 new Date 结束时间 var date3 date2 getTime date1 getTime 时间差的毫秒数 计算出相差天数 va
  • 基于SpringBoot的购票系统的设计与实现

    博主介绍 在职Java研发工程师 专注于程序设计 源码分享 技术交流 专注于Java技术领域和毕业设计 温馨提示 文末有 CSDN 平台官方提供的老师 Wechat QQ 名片 项目名称 基于SpringBoot的购票系统的设计与实现 演示
  • 十五分钟带你学会 Electron

    文章目录 什么是 Electron 为什么要选择 Electron 安装 Electron 桌面CSDN实战 Electron 基础配置 Electron 进程 主进程 渲染进程 主进程与渲染进程的区别 主进程与渲染进程的通信 Electr
  • 孔乙己:new的五种写法

    孔乙己 new的五种写法 这个是目标类 INT 拥有一个字面常量构造函数 和一个平凡析构函数 可以从int构造 也可以隐式转换为int 也可以和int比较大小 class INT private int value public const
  • 【CNC——第6篇】PMAC上位机编程基础篇(上位机和下位机如何通信)

    拓展链接 PAMC官网 DELTA TAU 官网手册 手册大全 PMAC官网 PCOMM32PRO用户手册 PMAC 的内部变量 内部变量分为四种 I 变量为电机等常用基本控制变量 P 变量为全局用户常量 Q 变量为坐标系变量 M 变量为地
  • 华为OD机试 C++ 打卡统计

    题目 任务 你的工作是帮我们找出打卡次数最多的前五名员工 有些小细节需要注意 如果两位员工打卡次数一样多 那么先打卡的员工排名更靠前 如果他们开始打卡的时间也一样 那就按照员工id的大小排序 id小的员工排在前面 输入 第一行是员工的数量N
  • osgFBO(十)多pass-3,pass3,shader将背景从绿色变为蓝色

    pass3和pass2类似 只是再熟悉下 这个Pass设定为最后一步 可以不再输出纹理 即 1 pass3摄像机输入tex2 osg ref ptr
  • matplotlib之饼状图

    import matplotlib pyplot as plt labels A B C D fracs 35 20 45 10 plt pie x fracs labels labels plt show 圆形饼图 import matp
  • 数据结构顺序表与链表(查找,插入,删除)

    目录 顺序表 链表 顺序表 顺序表是在计算机内存中以数组的形式保存的线性表 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素 使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中 即通过数据元素物理存储的相
  • JVM调优实战

    1 当项目运行一段时间以后 产生了OOM的问题 我们该如何排查问题呢 用top命令 看看是哪个进程CPU占用率高 获取它的进程ID 再根据具体的进程id 执行 top HP 进程id号 命令 看看哪个线程的CPU占用率高 如果是业务线程出现