zoukankan      html  css  js  c++  java
  • [JVM]线上CPU负载持续飙高的问题解决

    1. 周二新需求提测之后,运行到晚上,收到告警短信,生产环境CPU负载过高,先解决问题再排查,运维扩容,有问题机器下线重启上线,CPU使用率正常,服务正常响应。

    2. 开始排查问题,把预留的一台有问题的机器用于排查问题,

    第一步,top 命令查看cpu资源使用情况,jps -lm找到对应java进程号9021之后,top -H -p9021 看到线程占用情况,cpu利用率93%

    记录使用率高的具体的线程id: 9023,9024,9027,9029 在linux中,线程就是轻量级进程

    第二步,通过jstack 查看线程堆栈信息,jstack 9021 > jstack_9021.txt , 然后把十进制的9023,9024,9027,9029转成十六进制(0x233f,0x2340, 0x2343, 0x2345)

    最后,通过 cat jstack_9021.txt | grep -C 20 0x233f 命令找到了具体的线程信息, 发现把cpu打满的是GC 线程,然后jmap 先总体看内存使用状况,Xmx配置挺高,不存在内存不够,

    第三步,通过 jstat -gcutil 9021 3000 20 查看GC回收情况,每间隔3000ms打印一次,打印20次,发现Eden区和Old区都耗尽了,FullGc非常慢,耗时很长,基本可以确定发生了内存泄漏。

    jmap -histo 9021 打印内存占用情况,发现主要是新引入第三方RSA包里SignContent对象很大,因为这个对象包含了图片的Base64 decode字节和PDF文件的Base64编码字节。放在集合里,请求结束没有释放导致的。

  • 相关阅读:
    Rust Book 学习记录(Nightly)
    测试
    Web前端研发工程师编程能力飞升之路
    Nginx 部署 Django
    数组组合排列及排序
    nodeJS(windows)新手攻略
    虎说:简约不简单-瀑布流布局
    虎说:bootstrap源码解读(重置模块)
    捉Bug:易车注册页布局小臭虫 附demo
    虎扯:小众玩物 webkit家的滚动条
  • 原文地址:https://www.cnblogs.com/zeenzhou/p/13862945.html
Copyright © 2011-2022 走看看