• 面试官问:如何排除GC引起的CPU飙高?我脱口而出5个步骤


    在工作中,当一个系统发生OOM的时候,这种问题可能会让大家很烦恼困惑,因为故障排查起来是一个综合技术的考量。在平时工作中要增加自己的知识广度,多学习,多总结,多思考,多做笔记,这才是真正的王道。

    尤其是在线上环境中,如何分析是哪个线程导致的CPU飙高的问题,通常大致有几个差不多固定的步骤。这个问题也是面试频率非常之高的问题之一,很多人也是靠回答这个问题而加薪。

    常见套路步骤:

    使用top命令使用top -H pid使用prinf %x tid使用jsack pid >pid.log查阅less pid.log

    下面就来说一下这几个步骤。

    top

    我们可以使用top命令来查找对应使用CPU最多的进程,找到后,先记录下对应的pid(后面要用到)。

    再使用Shift+P这两个快捷键可以按CPU的使用率进行排序。

    top-H pid

    再次使用top名,但是这次增加一个参数-H,可以查看上面找出来的pid进程中对应的线程tid,记住这时候的线程tid得记住

    printf

    但是此时的tid是十进制的,我们需要把这个tid转成16进制。然后使用

    printf %x tid

    stack

    使用jstack工具把线程信息输出到对应的日志文件中,后面使用这个日志文件内容进行分析。

    jstack pid >pid.log

    less

    上面已经生成日志文件了,这时候可以使用less命令来查找上面已经转换好的16进制的线程tid。

    less pid.log

    其它

    另外还可以使用

    jstat -gcutil pid 1000 10

    来查看垃圾回收的实时情况。

    关于jstat的使用前参考前面的文章 工具。

  • 相关阅读:
    第四章 数组和方法
    JAVA基础笔记
    ios navigationcontroller add multi navigationItem
    Objective-C Runtime能做什么?
    在Xcode中使用Git进行源码版本控制
    分析iOS Crash文件:符号化iOS Crash文件的3种方法
    Core Animation Layer(22)
    Touch Events and UIResponder(19)
    UIPopoverController and Modal View Controllers(13)
    Subclassing UITableViewCell(15)
  • 原文地址:https://www.cnblogs.com/tianweichang/p/14010258.html
Copyright © 2020-2023  润新知