美文网首页
生产问题相关面试题

生产问题相关面试题

作者: mundane | 来源:发表于2022-03-08 21:28 被阅读0次

    假如生产环境出现cpu占用过高,请谈谈你的分析思路和定位

    1. 先用top命令找出cpu占比最高的

    top
    

    2. ps -ef或者jps进一步定位,得知是怎样一个后台程序

    a. ps -ef命令

    ps -ef|grep 3928|grep -v grep
    

    b. jps命令

    jps -l    #显示所有的java程序的进程和信息
    

    3. 定位到具体线程
    ps -mp 进程 -o thread,tid,time
    参数解释:
    -m 显示所有的线程
    -p pid进程使用cpu的时间
    -o 该参数是用户自定义格式

    ps -mp 3928 -o thread,tid,time
    

    4. 将需要的线程id转换成16进制格式(英文小写格式)
    printf "%x\n" 有问题的线程id

    printf "%x\n" 3929
    

    5. jstack 进程id | grep tid(16进制线程id小写英文) -A60
    -A60的意思是显示前60行
    该命令会打印出线程栈的日志,根据日志就能定位到具体的代码行数和问题

    jstack 3928 | grep 13ee -A60
    

    相关阅读:

    jmap和jstack使用

    对于jdk自带的jvm监控和性能分析工具用过哪些?一般你是怎么用的?

    阿里巴巴java开发手册中使用线程池不当导致内存溢出的情况

    【强制】 线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这
    样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
    说明: Executors 返回的线程池对象的弊端如下:
    1) FixedThreadPool 和 SingleThreadPool:
    允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致 OOM。
    2) CachedThreadPool:
    允许的创建线程数量为 Integer.MAX_VALUE, 可能会创建大量的线程,从而导致 OOM。

    相关文章

      网友评论

          本文标题:生产问题相关面试题

          本文链接:https://www.haomeiwen.com/subject/tntzrrtx.html