zoukankan      html  css  js  c++  java
  • CPU或内存占用过高时,发生了什么

    在开发过程中,有时候我们发现 JVM 占用的CPU/内存居高不下,跟我们的预期不符,这时,CPU 在做什么呢?是什么线程让CPU/内存如此忙碌呢?我们通过如下几步,可以查看 CPU 在执行什么线程。

    1、top 命令查看CPU/内存占用过高的进程(P 按CPU占用大小排序,M 按内存占用大小排序),并记录下进程的 pid

    2、top -Hp pid 查看进程的线程信息(P 按CPU占用大小排序,M 按内存占用大小排序),并记录下线程的 tid

    3、将 tid 转换为16进制的数字:printf "%x " tid

    4、使用 jstack 命令,查询线程信息,从而定位到具体线程和代码:jstack pid | grep 6f8a -A 30

    这样,你就看到为什么 CPU/内存 占用这么高,是什么线程在捣乱了!

    5、极端点的做法,把进程全部的线程堆栈导出来,然后再定位 tid 线程在做什么:jstack 18023 > /home/wwwroot/dump18023

    6、统计线程分别处于什么状态,grep java.lang.Thread.State dump18023 | awk '{print $2$3$4$5}' | sort | uniq -c

  • 相关阅读:
    redis数据结构-list
    reids数据结构1-string
    jedis工具类
    静态资源放行
    SpringMVC拦截器
    xinetd
    Linux-open函数
    Linux简单的文件读取
    复习ssm02
    springMVC文件上传
  • 原文地址:https://www.cnblogs.com/jmcui/p/10259359.html
Copyright © 2011-2022 走看看