JVM面试题(7-12)

  1. 什么是stop the  world?哪些时候触发?

a)简称stw,是指在垃圾回收的过程中,需要冻结所有的用户线程运行,直到垃圾回收线程结束
b)串行回收器SerialGC时会触发 ; ParallelGC时会触发 ; cms的初始标记阶段和重新标记阶段会触发;G1的Remark和Evacuation阶段会触发

  1. 如何进行JVM调优?列举两个场景

- 分析GC日志及dump文件,判断是否需要优化,确定瓶颈问题点;
- 确定JVM调优量化目标;
- 确定JVM调优参数(根据历史JVM参数来调整);
- 依次调优内存、延迟、吞吐量等指标;
- 对比观察调优前后的差异;
- 不断的分析和调整,直到找到合适的JVM参数配置;
- 找到最合适的参数,将这些参数应用到所有服务器,并进行后续跟踪。 

 jvm调优场景一、cpu占用过高cpu占用率长期过高,这种情况下可能是你的程序有那种循环次数超级多的代码,甚至是出现死循环了。排查步骤如下:1.用top命令查看cpu占用情况,这样就可以定位出cpu过高的进程。2.用top -Hp命令查看线程的情况,可以看到是线程id为7287这个线程一直在占用cpu3.把线程号转换为16进制printf "%x" 72874.用jstack工具查看线程栈情况jstack 7268 | grep 1c77 -A 105.根据jstack返回结果找到死循环代码位置

  • 死锁可以使用jstack工具来查看
  1. jps查看java进程[root@localhost ~]# jps -l
    8737 sun.tools.jps.Jps
    8682 jvm-0.0.1-SNAPSHOT.jar
  2. jstack查看死锁问题由于web应用往往会有很多工作线程,特别是在高并发的情况下线程数更多,于是这个命令的输出内容会十分多。jstack最大的好处就是会把产生死锁的信息(包含是什么线程产生的)输出到最后,所以我们只需要看最后的内容就行了
  1. 如何查看JVM进程有哪些?

Jps -q查看进程pid

  1. 如何查看线程信息?

使用linux有很多方式查看到线程信息,最常用的方法是使用ps指令,我们通常可以使用 ps -T -p <pid> 指令查看到目标进程的所有线程,我们也可以通过 ps H-eo pid,tid指令查看到当前系统中所有的进程的线程情况,使用 top-H指令我们可以实时查看到计算机中各个线程的情况。需要注意的是针对Java虚拟机进程中的线程,Java提供一个专门的工具来查看线程的详细信息:jstack 进程id,我们使用jstack可以查看到某一个java线程下的所有线程的详细信息,我们在找程序中的错误或者尝试调优的时候通常会将上面的线程展示方法和stack线程详情展示方法结合起来使用,进而定位到一个线程并观察到它的详细信息。

  1. 如何查看栈内存信息,堆内存信息?

jstat -gc 进程号,jmap -heap 进程id

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值