• 遇到线上情况如何定位分析(按下列步骤进行排查,保证有效)


    1. 一般是运维团队首先受到报警信息(CPU Memory)

    2. top命令观察到问题:内存不断增长 CPU占用率居高不下

    3. top -Hp 观察进程中的线程,哪个线程CPU和内存占比高

    4. jps定位具体java进程
      jstack 定位线程状况,重点关注:WAITING BLOCKED
      eg.
      waiting on <0x0000000088ca3310> (a java.lang.Object)
      假如有一个进程中100个线程,很多线程都在waiting on ,一定要找到是哪个线程持有这把锁
      怎么找?搜索jstack dump的信息,找 ,看哪个线程持有这把锁

    5. 为什么阿里规范里规定,线程的名称(尤其是线程池)都要写有意义的名称
      怎么样自定义线程池里的线程名称?(自定义ThreadFactory)

    6. jinfo pid

    7. jstat -gc 动态观察gc情况 / 阅读GC日志发现频繁GC / arthas观察 / jconsole/jvisualVM/ Jprofiler(最好用)
      jstat -gc 4655 500 : 每个500个毫秒打印GC的情况
      如果面试官问你是怎么定位OOM问题的?如果你回答用图形界面(错误)
      1:已经上线的系统不用图形界面用什么?(cmdline arthas)
      2:图形界面到底用在什么地方?测试!测试的时候进行监控!(压测观察)

    8. jmap - histo 4655 | head -20,查找有多少对象产生

    9. jmap -dump:format=b,file=xxx pid :

      线上系统,内存特别大,jmap执行期间会对进程产生很大影响,甚至卡顿(电商不适合)
      1:设定了参数HeapDump,OOM的时候会自动产生堆转储文件
      2:很多服务器备份(高可用),停掉这台服务器对其他服务器不影响
      3:在线定位(一般小点儿公司用不到)

    10. java -Xms20M -Xmx20M -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError

    11. 使用MAT / jhat /jvisualvm 进行dump文件分析
      https://www.cnblogs.com/baihuitestsoftware/articles/6406271.html
      jhat -J-mx512M xxx.dump
      http://192.168.17.11:7000
      拉到最后:找到对应链接
      可以使用OQL查找特定问题对象

    12. 找到代码的问题

  • 相关阅读:
    MySQL的常用函数
    getReader() has already been called for this request
    Spring MVC BeanNameViewResolver原理解析
    Java毕业设计 基于springboot vue大学新生报到系统
    【PWN】03.汇编分析
    智能语音外呼系统 OKCC没有电脑的坐席能不能开展工作
    【Git】git commit -m 提交信息约束规范
    DETR 系列 Mask Frozen-DETR: High Quality Instance Segmentation with One GPU 论文阅读笔记
    【BotR】CLR堆栈遍历(Stackwalking in CLR)
    vnc服务
  • 原文地址:https://blog.csdn.net/weixin_47068446/article/details/125439476