zoukankan      html  css  js  c++  java
  • 记一次cpu占用过高问题

    top -s

    ps -ef | grep 17996

    ps -mp pid -o THREAD,tid,time

    将需要的线程ID转换为16进制格式:

    printf “%x ” tid

    打印线程的堆栈信息:

    jstack pid |grep tid -A 30

    jstack 32236 | grep '7dec'

    jstack -l 32236 > jstack_result2.txt

    jstat -gcutil 32236 2000

    发现频繁GC FGC>YGC

    估计是代码层面的问题了,很多数据无法释放,或者一次性把老年代填满了

    打算导出堆栈,耗时较久

    看看内存里有哪些数据对象

    或者导出下内分布

    jmap -histo [pid]  > class.text

    jmap -histo 32236 | more

    jmap -histo 17996 | head -30

    看下来

    这个对象几十万个

    应该是从数据库拿出来数据太多了

    看了代码以后定位到问题

     

    1. 使用top命令,查看cpu占用过高的java PID (如PID=9876)
    2. 使用ps aux|grep PID   (ps aux|grep 9876)查看是那个java程序占用cpu 。
    3. ps -mp PID -o THREAD,tid,time  (ps -mp 9876-o THREAD,tid,time)显示线程列表,找出线程列表中占用cpu过高的tid (如tid=6789)
    4. printf "%x " tid  (printf "%x " 6789)将其tid转化为16进制格式 如68b9
    5. jstack pid |grep tid -A30 >> /tmp/jstack.log  (jstack 9876 |grep 68B9 -A30 )   打印对应的堆栈信息,查看具体原因
  • 相关阅读:
    leetcode-344-反转字符串
    leetcode-136-只出现一次的数字
    leetcode-350- 两个数组的交集 II
    leetcode-36-有效的数独
    leetcode-283-移动零
    leetcode-387-字符串中的第一个唯一字符
    leetcode-242-有效的字母异位词
    HDU 2612
    Codeforces 1090B
    Codeforces 1090D
  • 原文地址:https://www.cnblogs.com/alter888/p/15177258.html
Copyright © 2011-2022 走看看