Java面试进阶33: 后台服务出现明显“变慢”,谈谈你的诊断思路?

分析方法:

自上而下。从应用的顶层,逐步深入到具体的不同模块,或者更近一步的技术细节单元,找到可能的问题和解决办法。这是最常见的性能分析思路,也是大多数工程师的选择。

自下而上。从类似 CPU 这种硬件底层,判断类似Cache-Miss之类的问题和调优机会,出发点是指令级别优化。这往往是专业的性能工程师才能掌握的技能,并且需要专业工具配合,大多数是移植到新的平台上,或需要提供极致性能时才会进行。

系统性能分析中,CPU、内存和 IO 是主要关注项。

怎么找到最耗费 CPU 的 Java 线程,简要介绍步骤:

1)top 命令获取相应 pid,“-H”代表 thread 模式,你可以配合 grep 命令更精准定位。

2)然后转换成为 16 进制。printf "%x" your_pid

3)最后利用 jstack 获取的线程栈,对比相应的 ID 即可。利用 vmstat 之类,查看上下文切换的数量vmstat -1 -10

如果每秒上下文切换列(cs,context switch)很高,并且比系统中断列(in,system  interrupt)高很多,就表明很有可能是因为不合理的多线程调度所导致。

找繁忙线程时,top -h , 再jstack, 再换算tid比较累,而且jstack会造成停顿。推荐用vjtools里的vjtop, 不断显示繁忙的javaj线程,不造成停顿。

内存使用情况:利用 free 之类查看内存使用。

磁盘: iostat 等命令有助于判断磁盘的健康状况

JVM 层面的性能分析,我们已经介绍过非常多了:

利用 JMC、JConsole 等工具进行运行时监控。

利用各种工具,在运行时进行堆转储分析,或者获取各种角度的统计数据(如jstat -gcutil 分析 GC、内存分带等)。

GC 日志等手段,诊断 Full GC、Minor GC,或者引用堆积等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值