JVM篇--JVM调优高频面试题

1 说一下 JVM 调优的工具?

JDK 自带了很多监控工具,都位于 JDK 的 bin 目录下,其中最常用的是jconsolejvisualvm 这两款视图监控工具。
jconsole:用于对 JVM 中的内存、线程和类等进行监控;
jvisualvm:JDK 自带的全能分析工具,可以分析:内存快照、线程快照、程序死锁、监控内存的变化、gc 变化等

2 常用的 JVM 调优的参数都有哪些?

-Xms2g:初始化推大小为 2g;
-Xmx2g:堆最大内存为 2g;
-XX:NewRatio=4:设置年轻的和老年代的内存比例为 1:4;
-XX:SurvivorRatio=8:设置新生代 Eden 和 Survivor 比例为 8:2;
–XX:+UseParNewGC:指定使用 ParNew + Serial Old 垃圾回收器组合;
-XX:+UseParallelOldGC:指定使用 ParNew + ParNew Old 垃圾回收器组合;
-XX:+UseConcMarkSweepGC:指定使用 CMS + Serial Old 垃圾回收器组
合;
-XX:+PrintGC:开启打印 gc 信息;
-XX:+PrintGCDetails:打印 gc 详细信息。

3 线上服务 CPU 占用过高怎么排查?

首先 针对cpu占用过高,肯定是某个程序长期占用了cpu资源导致的
所以针对这个问题

  1. 首先可以用top命令找出占用cpu比较高的进程
  2. 再根据进程找出占用比较高的线程 即通过top -Hp 进程id 获取进程下的线程占用资源情况
  3. 找到对应线程后,打印线程的堆栈信息,这里需要注意需要把线程id转换成16进制,然后通过jstack PID 打印线程的堆栈信息
  4. 最后根据线程的堆栈信息定位到具体业务方法进行排查
    需要注意的是看是否有线程长时间的 watting 或 blocked

4 内存飙高问题怎么排查?

首先我们要知道,内存飚高如果是发生在 java 进程上,一般是因为创建了大量对象所导致,而如果持续飚高意味着垃圾回收跟不上对象创建的速度,或者内存泄露导致对象无法回收
针对这种情况
1 先打印gc的情况,即通过jstat -gc PID 1000 查看 GC 次数,时间等信息,看看对象的GC 次数是否频繁,而且每次回收的内存空间是否正常,如果说每次回收的内存都很少,GC非常频繁 那么可能是因为内存泄露导致的

2 导出堆内存文件快照
即可以通过 jmap -dump 导出堆内存信息到文件

3 使用 visualVM 对 dump 文件进行离线分析,找到占用内存高的对象,再找到创建该对象的业务代码位置,从代码和业务场景中定位具体问题

5 有没有遇到过内存泄漏问题?又该如何定位解决?

我们的确遇到过内存泄露,但其实在具体的表现上,可能是先出现以下这几种情况

  1. 应用程序长时间连续运行时性能严重下降
  2. CPU 使用率飙升,甚至到 100%
  3. 频繁 Full GC,各种报警,例如接口超时报警等
  4. 应用程序抛出 OutOfMemoryError 错误
  5. 应用程序偶尔会耗尽连接对象
    也就是说 内存泄露往往会伴随着频繁的fullGC,以及cpu使用率飙升,这种情况 我们就需要通过查看 Full GC 入手
    具体来看就是用上面的 线上服务 CPU 占用过高怎么排查的思路来解决
    包括
    1)使用 jps 查看运行的 Java 进程 ID
    2)使用top -p [pid] 查看进程使用 CPU 和 MEM 的情况
    3)使用 top -Hp [pid] 查看进程下的所有线程占 CPU 和 MEM 的情况
    4)将线程 ID 转换为 16 进制:printf “%x\n” [pid],输出的值就是线程栈信息中的 nid。例如:printf “%x\n” 29471,换行输出 731f。
    5)抓取线程栈:jstack 29452 > 29452.txt,可以多抓几次做个对比。

之后我们还需要通过jstat 命令输出gc的信息,即查看 YGC 和 Full GC 次数。通常会出现 YGC 不增加或增加缓慢,而 Full GC 增加很快。如果发现 Full GC 次数太多,就很大概率存在内存泄漏了,然后可以用 jmap -dump 生成 dump 文件,借助工具分析哪 个对象非常多,基本就能定位到问题在那了

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将AWS iot消息数据发送Kinesis Firehose Stream存向S3

观看此文章之前,请先学习AWS iot的数据收集: 使用Linux SDK客户端向AWS Iot发送数据-CSDN博客 1、工作原理: 1.1 规则 规则可让您的设备与 AWS 服务进行交互。分析规则并根据物品发送的消息执行操作。您可以使用规则来支持任务&#xff0…

C++类和对象(上)

✨Blog:🥰不会敲代码的小张:)🥰 🉑推荐专栏:C语言🤪、Cpp😶‍🌫️、数据结构初阶💀 💽座右铭:“記住,每一天都是一個新的開始&#x1…

字符串的方法有哪些?

JavaScript中字符串作为基本类型,它为我们提供了很多好用的API,本期就来总结一下一些常见的字符串方法吧 字符串的方法按照功能来划分,可分为增删改查四个部分 写在前面:了解一个方法,我们可以通过三个方面&#xff…

(2)Elastix图像配准:参数文件(配准精度的关键)

文章目录 前言一、Elastix简介二、参数文件(类型)三、参数文件(定义):由多个组件组成,每个组件包含多个参数。3.1、组件的相关参数3.2、图解组件3.2.1、图解 - 金字塔(pyramid)3.2.2…

从零开始训练 YOLOv8最新8.1版本教程说明(包含Mac、Windows、Linux端 )同之前的项目版本代码有区别

从零开始训练 YOLOv8 - 最新8.1版本教程说明 本文适用Windows/Linux/Mac:从零开始使用Windows/Linux/Mac训练 YOLOv8 算法项目 《芒果 YOLOv8 目标检测算法 改进》 适用于芒果专栏改进 YOLOv8 算法 文章目录 官方 YOLOv8 算法第一步 配置环境1.1 系列配置1.2 代码执行第二步…

wpf控件Expander集合下的像素滚动

项目场景:Expander集合滚动 如下图,有一个Expander集合,且设置 ScrollViewer.VerticalScrollBarVisibility "Auto" 每个Expaner下包含有若干元素,当打开Expader(即IsExpanded "true")时&#…

网络通讯接口RS232与RS485含义与区别

在现代化数据中心机房中,无论是前期设计、现场调试还是后期维护,通常都要了解通信协议,如机房供电设备、环境设备、空调设备等综合集中监控。通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。协议定义了数据单元使用的格式&#…

Leetcode刷题(二十九)

两数相除(Medium) 给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.…

C#,最小生成树(MST)博鲁夫卡(Boruvka)算法的源代码

Otakar Boruvka 本文给出Boruvka算法的C#实现源代码。 Boruvka算法用于查找边加权图的最小生成树(MST),它早于Prim和Kruskal的算法,但仍然可以被认为是两者的关联。 一、Boruvka算法的历史 1926年,奥塔卡博鲁夫卡&…

redis 分布式锁的原理

Redis 分布式锁是通过利用 Redis 的原子操作和特性来实现的。下面是 Redis 分布式锁的基本原理: 获取锁:当一个进程或线程需要获取锁时,它会通过执行 Redis 命令(例如 SETNX)在 Redis 中尝试设置一个特定的键作为锁。如…

QQ云端机器人登录系统php源码

这款源码主要是针对群机器人爱好者的,这是一个通过对接挂机宝里面机器人框架的一个网页站点,用户通过网页登录 QQ 账号至挂机宝里面框架(可扫码登录、账密登录、跳转 QQ 快捷登录),无需通过机器人即可实现登录&#xf…

《设计模式的艺术》笔记 - 观察者模式

介绍 观察者模式定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。 实现 myclass.h // // Created by yuwp on 2024/1/12. //#ifndef DESIGNPATTERNS_MYCLASS_H #define DESIGNPATTERNS_MYCLA…

Oracle Linux 6.10 安装图解

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任,图解仅供参考,请悉知!本次安装图解是在一个全新的演示环境下进行的,演示环境中没有任何有价值的数据,但这并不代表摆在你面前的环境也是如此。生产环境…

ZK高可用架构涉及常用功能整理

ZK高可用架构涉及常用功能整理 1. zk的高可用系统架构和相关组件1.1 Quorum机制1.2 ZAB协议 2. zk的核心参数2.1 常规配置2.2 特殊优化配置 3. zk常用命令3.1 常用基础命令3.2 常用运维命令 4. 事务性4.1 数据写流程4.2 数据读流程 5. 疑问和思考5.1 zk不擅长处理哪些场景&…

gitlab runner 安装、注册、配置、使用

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

「一本通 3.6 例 1」分离的路径

题目描述 为了从 F F F 个草场中的一个走到另一个,贝茜和她的同伴们不得不路过一些她们讨厌的可怕的树。奶牛们已经厌倦了被迫走某一条路,所以她们想建一些新路,使每一对草场之间都会至少有两条相互分离的路径,这样她们就有多一…

vue常用指令(v-show)

一、v-show 指令 作用: 根据真假值,切换元素的显示状态 二、代码演示 1、v-show 绑定判断条件后&#xff0c;根据布尔值决定是否显示图片 不显示图片 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><…

骨传导是哪个意思?骨传导的应用领域在哪

很多人都问我骨传导是哪个意思&#xff1f;骨传导的应用领域在哪&#xff1f;我们都知道声音能够在固体、液体、空气三种介质中传播。通常情况下&#xff0c;声音进入我们内耳的方式主要有两种&#xff1a;空气传导和骨传导&#xff0c;骨传导也就是通过固体传导。我们比较熟悉…

深度学习——pycharm远程连接

目录 远程环境配置本地环境配置&#xff08;注意看假设&#xff01;&#xff01;!这是很多博客里没写的&#xff09;步骤1步骤2步骤2.1 配置Connection步骤2.2 配置Mappings 步骤3 配置本地项目的远程解释器技巧1 pycharm中远程终端连接技巧2 远程目录技巧3 上传代码文件技巧4 …

2024.1.23力扣每日一题——最长交替子数组

2024.1.23 题目来源我的题解方法一 枚举 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2765 我的题解 方法一 枚举 每次都以两个相邻作为满足要求的循环数据&#xff0c;并且以一个布尔变量控制循环的位置 时间复杂度&#xff1a;O(n) 空间复杂度&#xff1a;O(1) pub…