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

  • 相关阅读:
    MIPAV
    SPM12manual,统计部分(8-10)笔记
    Django中ORM介绍和字段及字段参数
    Django的路由系统
    django 连接mysql报错
    django启动创建用户失败
    django ORM操作
    Django创建App报错
    Web框架
    Bootstrap框架(组件)
  • 原文地址:https://www.cnblogs.com/jmcui/p/10259359.html
Copyright © 2011-2022 走看看