候选者:(审视完代码之后,这个过程我们观察JVM是否存在多次GC问题等等)
候选者:5. 最后,网络和操作系统层面排查
候选者:(这个过程查看内存/CPU/网络/硬盘读写指标是否正常等等)
候选者:绝大多数情况下,到第三步就结束了,一般经过「运维团队」给我们设置的JVM和机器上的参数,已经满足绝大多数的需求了。
候选者:之前有过其他团队在「大促」发现接口处理超时的问题,那时候查各种监控怀疑是FULL GC导致的
候选者:第一想法不是说去调节各种JVM参数来进行优化,而是直接加机器
候选者:(用最粗暴的方法,解决问题是最简单的,扩容YYDS)
面试官:确实
候选者:不过,我是学过JVM相关的调优命令和思路的。
候选者:在我的理解下,调优JVM其实就是在「理解」JVM内存结构以及各种垃圾收集器前提下,结合自己的现有的业务来「调整参数」,使自己的应用能够正常稳定运行。
候选者:一般调优JVM我们认为会有几种指标可以参考:『吞吐量』、『停顿时间』和『垃圾回收频率』
候选者:基于这些指标,我们就有可能需要调整:
候选者:1. 内存区域大小以及相关策略(比如整块堆内存占多少、新生代占多少、老年代占多少、Survivor占多少、晋升老年代的条件等等)
候选者:比如(-Xmx:设置堆的最大值、-Xms:设置堆的初始值、-Xmn:表示年轻代的大小、-XX:SurvivorRatio:伊甸区和幸存区的比例等等)
候选者:(按经验来说:IO密集型的可以稍微把「年轻代」空间加大些,因为大多数对象都是在年轻代就会灭亡。内存计算密集型的可以稍微把「老年代」空间加大些,对象存活时间会更长些)
候选者:2. 垃圾回收器(选择合适的垃圾回收器,以及各个垃圾回收器的各种调优参数)
候选者:比如(-XX:+UseG1GC:指定 JVM 使用的垃圾回收器为 G1、-XX:MaxGCPauseMillis:设置目标停顿时间、-XX:InitiatingHeapOccupancyPercent:当整个堆内存使用达到一定比例,全局并发标记阶段 就会被启动等等)
候选者:没错,这些都是因地制宜,具体问题具体分析(前提是得懂JVM的各种基础知识,基础知识都不懂,谈何调优)
候选者:在大多数场景下,JVM 已经能够达到「开箱即用」
面试官:确实
候选者:一般我们是「遇到问题」之后才进行调优的,而遇到问题后需要利用各种的「工具」进行排查
候选者:1. 通过jps命令查看Java进程「基础」信息(进程号、主类)。这个命令很常用的就是用来看当前服务器有多少Java进程在运行,它们的进程号和加载主类是啥
候选者:2. 通过jstat命令查看Java进程「统计类」相关的信息(类加载、编译相关信息统计,各个内存区域GC概况和统计)。这个命令很常用于看GC的情况
候选者:3. 通过jinfo命令来查看和调整Java进程的「运行参数」。
候选者:4. 通过jmap命令来查看Java进程的「内存信息」。这个命令很常用于把JVM内存信息dump到文件,然后再用MAT( Memory Analyzer tool 内存解析工具)把文件进行分析
候选者:5. 通过jstack命令来查看JVM「线程信息」。这个命令用常用语排查死锁相关的问题
候选者:6. 还有近期比较热门的Arthas(阿里开源的诊断工具),涵盖了上面很多命令的功能且自带图形化界面。这也是我这边常用的排查和分析工具
面试官:嗯…好吧。之前聊JVM的时候,你也提到过在「解释」阶段,会有两种方式把字节码信息解释成机器指令码,一个是字节码解释器、一个是即时编译器(JIT)
总结
本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!
MySQL50道高频面试题整理:

看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!
MySQL50道高频面试题整理:
[外链图片转存中…(img-pGSZudPW-1714226464068)]
本文详细讲述了JVM调优过程中的关键步骤,包括观察GC问题、检查系统性能指标、选择合适的垃圾回收器和内存区域配置,以及使用工具如jps、jstat等进行故障排查。作者强调了理解JVM基础知识和具体问题具体分析的重要性。




被折叠的 条评论
为什么被折叠?



