【Java面试】二十二、JVM篇(下):JVM参数调优与排查

文章目录

  • 1、JVM的参数在哪里设置
  • 2、常见的JVM调优参数有哪些
  • 3、常见的JVM调优工具有哪些
  • 4、Java内存泄漏的排查思路
  • 5、CPU飙高的排查思路

1、JVM的参数在哪里设置

  • war包部署,在tomcat中设置,修改TOMCAT_HOME/bin/catalina.sh 文件

在这里插入图片描述

  • jar包启动,直接java -jar 后面加

在这里插入图片描述

  • 镜像 + 容器启动,Dockerfile里加,和java -jar本质一样,虚拟机或实体机换更轻量的容器罢了

在这里插入图片描述

2、常见的JVM调优参数有哪些

  • 设置堆空间大小
  • 虚拟机栈的设置
  • 年轻代中 Eden 区和两个 Survivor 区的大小比例
  • 年轻代晋升老年代阈值
  • 设置垃圾回收器的种类

【调优参数】

进行JVM调优,避免频繁Full GC,以及选择适合业务场景的垃圾回收器等。比如设置堆空间大小,use、total、max三个值,让total = max,避免频繁向JVM申请内存。再比如栈大小的设置,一般256KB,用于存放每个线程的栈帧,这个值太大,则从栈可用空间层面限制了最大线程数量,比如设置了512KB,在总内存不变的情况下,线程数量上限就减半。再比如对象晋升老年代的阈值,默认15,一般不去改。至于垃圾回收器的选择,则可以先定一个可选组合,再Jmeter按业务测试几个场景,比如:

  • 高并发
  • 大对象产生

观察接口响应时间,响应峰值的出现,即FULL GC对接口响应时间的影响,由此选出适合自己业务场景的组合等等。

3、常见的JVM调优工具有哪些

有JDK自带的命令工具和一些可视化工具,还有一些网站,比如分析GC报告的GcEasy

命令工具有:

  • jps:进程状态信息
    在这里插入图片描述

  • jstack:查看java进程内线程的堆栈信息,死锁时可以用,jstack 你的PID
    在这里插入图片描述

  • jmap:显示堆信息,生成堆转储快照
    在这里插入图片描述
    在这里插入图片描述

  • jhat:堆转储快照分析工具

  • jstat:JVM统计监测工具
    在这里插入图片描述

可视化工具有:

  • jconsole:用于对Jvm的内存,线程,类 的监控,JDK带的

在这里插入图片描述

  • VisualVM:能够监控线程,内存情况(有IDEA插件配置,和IDEA一起使用),也可以线程信息转储
  • MAT:堆内存分析,检测内存泄漏问题

4、Java内存泄漏的排查思路

内存泄漏,即一些对象没有被回收,累积导致OOM,表现为运行一段时间后服务宕机,但生产环境不能等服务挂了再修,可选择监控+告警邮件,比如普罗米修斯,让内存占用到一定阈值后,触发告警,此时可选择VisualVM分析

【内存泄漏分析工具】

  • 通过jmap或设置jvm参数获取堆内存快照dump文件

  • 再打开VisualVM去分析离线dump文件(开发环境也可以直接选择进程实时查看)
    在这里插入图片描述

  • 从堆内存图中就可以看到是不是内存泄漏了,正常的堆内存图为锯齿状,有泄漏的则是占用在节节升高
    在这里插入图片描述

  • 通过查看堆信息的情况,可以大概定位内存溢出是哪行代码出了问题,找到对应的代码,通过阅读上下文的情况,进行修复即可

  • 最后,分析内存泄漏也可以使用MAT,还是一样先导出堆内存快照

5、CPU飙高的排查思路

  • 使用top指令查看哪个进程占用CPU最高
  • top -p 进程ID继续看这个进程下的所有线程
  • 找出进程下占用高的线程
  • 做线程信息转储
jstack 进程ID > /root/thread.tdump
  • 在转储文件中找到nio等于上面CPU占用高的线程,定位问题代码
//转储文件中nio是十六进制,这里把CPU占用高的线程转一下
printf '%x\n' 线程ID
  • 分析

在这里插入图片描述
【排查示例】

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

模型算法—线性回归

线性回归是统计学中最常见的一种回归分析方法,用于建立自变量(解释变量)和因变量(响应变量)之间的线性关系。线性回归模型可以用来预测一个或多个自变量对应的因变量的值。 线性回归的基本形式如下: &…

指标管理与精益生产:制造业的双翼齐飞

在竞争激烈的制造业环境中,企业要想保持持续的竞争优势,不仅需要拥有高效的生产流程,更需要有科学的管理方法。指标管理系统和精益生产正是这其中的两大关键要素。本文将探讨制造业缺乏指标管理系统的弊端,以及指标管理和精益生产…

美业人专用宝藏系统、Java收银系统源码分享-美业SAAS系统的应用价值分析

美业SAAS系统(Software as a Service)在美容、美发、美甲等行业中具有重要的应用价值。这种系统为美业提供了一种数字化解决方案,帮助企业更高效地管理业务和客户关系。 以下是博弈美业SAAS系统的应用价值分析: 1.经营管理&#…

文件加密软件排行榜|常用三款文件加密软件推荐

Top 1: 安秉网盾文件加密软件 加密模式多样:采用多种加密模式,对企业重要的文档、图纸进行全方位360度保护。可根据企业不同工作场景设置不同的加密模式。 全透明加密:通过全透明加密模式,对企业重要的图纸文件类型进行全盘透明…

Python 基础:文件

目录 一、从文件中读取数据1.1 读取整个文件1.2 逐行读取 二、写入文件2.1 写入空文件2.2 写入多行2.3 附加到文件 遇到看不明白的地方,欢迎在评论中留言呐,一起讨论,一起进步! 本文参考:《Python编程:从入…

从穷举法到插板法:Python解决求和为12的正整数组合20240619

从穷举法到插板法:Python解决求和为12的正整数数学问题 在这篇博客中,我们将使用Python来解决一个有趣的小学数学问题:求出所有正整数组合,使得这些数的和为12。我们将演示如何找到这些组合,并计算每个组合的排列数&a…

【UIDynamic-动力学-UICollisionBehavior-碰撞行为-4个代理方法 Objective-C语言】

一、接下来,我们来说这个碰撞的代理方法, 1.我们把之前的代码再来复制一份儿,改个名字:07-碰撞行为-代理, 首先,在这个Collision里边,它有一个代理,我们找到这个行为,UICollisionBehavior,点进来看一下, 点进来, 在最下边,有一个delegate, 这个delegate,叫做UIC…

数据结构之探索“队列”的奥秘

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 目录 队列有关概念 队列的使用 队列模拟实现 循环队列的模拟实现 622. 设计循环队列 双端队…

仓库管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,公告管理,物资管理,基础数据管理,用户管理 用户账户功能包括:系统首页,个人中心,公告管理,物…

【python】PyCharm如何设置字体大小和背景

目录 效果展示 字体大小 背景设置 效果展示 字体大小 再左上角找到四条杠的图标 找到File 一般字体大小为22最合适,行间距为默认 背景设置 还是再字体设置的页面搜索 background 小编的其他文章详见,欢迎来支持 东洛的克莱斯韦克-CSDN博客 【机器…

failed to create network xxxx: Error response from daemon

问题描述: 启动项目时,docker内部网络冲突。 解决方案: 1.删除所有docker容器(强制删除一个或多个容器,即使它们正在运行) docker rm -f $(docker ps -aq) 2.验证docker容器是否删除成功 docker ps --…

“论数据访问层设计技术及其应用”写作框架,系统架构设计师

论文真题 在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清晰,便于提高复用能力和产品维护能力。一种常见的层次划分模…

Google Adsense----Wordpress插入谷歌广告

1.搭建个人博客,绑定谷歌search consol,注册adsense 详细可以参考这个视频b站视频 2.将个人博客网站关联到Adsense 在adsense里新加网站,输入你的博客网址,双击网站 将这段代码复制到header.php的里面 在wordpress仪表盘的外观-主题文件编辑器,找到header.php将代码复制,…

C++跨平台socket编程

C跨平台socket编程 一、概述1.1 TCP协议1.1 TCP 的主要特性1.2 TCP报文格式 UDP报文格式IP协议使用windows编辑工具直接编辑Linux上代码 二、系统socket库1.windows上加载socket库2.创建socket2.1 windows下2.2 linux下 3.网络字节序4.bind端口5.listen监听并设置最大连接数6.a…

【Python机器学习实战】 | Lasso回归和弹性网回归详细分析研究

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

【windows|004】BIOS 介绍及不同品牌电脑和服务器进入BIOS设置的方法

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 ​ 🏅阿里云ACE认证高级工程师 ​ 🏅阿里云开发者社区专家博主 💊交流社…

【BEV】BEVFormer总结

本文分享BEV感知方案中,具有代表性的方法:BEVFormer。 它基于Deformable Attention,实现了一种融合多视角相机空间特征和时序特征的端到端框架,适用于多种自动驾驶感知任务。 主要由3个关键模块组成: BEV Queries Q&am…

【qt5生成软件-can卡-上位机-无法加载ControlCAN.dll错误代码(0xc0150002)等相关问题-WIN11系统-尝试解决】

【qt5生成软件-无法加载ControlCAN.dll&错误代码0xc0150002:-等相关问题-WIN11系统-尝试解决-总结整理】 1.前言2.环境说明3.问题说明4.尝试方法总结(1)更新支持包c库(2)更新USB相关驱动(3)…

安装pytorch环境

安装:Anaconda3 通过命令行查显卡nvidia-smi 打开Anacanda prompt 新建 conda create -n pytorch python3.6 在Previous PyTorch Versions | PyTorch选择1.70,安装成功,但torch.cuda.is_available 返回false conda install pytorch1.7.0…