鄙人上班正在摸鱼中,突然后收到领导电话服务 报 503 好吧吓死了赶紧百度

http 503 :因暂时超载或临时维护,您的 Web 服务器目前无法处理 HTTP 请求。 其含义是, 这是一个暂时情况,会有一些延误, 过 后将会得到缓解。 有些服务器在这种情况下也许干脆拒绝套接字(socket) 连接,在这种情况下,可能会由于套接字建立超时而产生不同的错误信息。

说白了 服务压力或者别的原因 忙不过来了

我自己组装了一笔报文 用curl 脚本发送 发现 十多秒都没返回

开始下面排查 以下所有截图都不是 demo 而是真实样例

指令TOP

top: 提供实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序

load average:系统负载,即任务队列的平均长度。 三个数值分别为  1分钟、5分钟、15分钟前到现在的平均值。

Cpu(s):显示CPU信息

75.9%us

用户空间占用CPU百分比

0.4%sy

内核和中断占用CPU百分比

0.0%ni

用户进程空间内改变过优先级的进程占用CPU百分比

23.7%id

空闲CPU百分比

0.0%wa

等待输入输出的CPU时间百分比

0.0%hi

硬中断(Hardware IRQ)占用CPU的百分比

0.0%si

软中断(Software Interrupts)占用CPU的百分比

查看进程里的线程情况

从此处可以看出 tid(线程)287001 - 287005很耗cpu

将线程id转换为16进制得到

执行命令jstack 28699 | grep tid

由这几行结果可知,消耗CPU的是ParallelGC线程

也可以执行命令输出到文件jstack 28699 >>28699.txt

结尾显示的nid 其实就是对应的 转换后的16进制

通过以上信息,我推送 最大问题就是 GC 太频繁了,三分猜 七分推理 执行如下命令

jstat -gcutil28699 1000 1000

监视内容基本与 -gc相同,但是输出主要关注的是已使用空间占用总空间的百分比

我的老天 吓死宝宝了,这是什么鬼!!疯狂GC 而且看出来 回收永无止境啊

full GC 发生了 4707997 次 ,此处我参数 jstat 参数写的100毫秒太快了 应该1000合适,但是即使这样我们发现 三百毫秒执行一次full GC,而且O(老年代) 没有明显变化。这肯定不正常

FGCT : fullGC 耗时 单位秒      YGCT:YGC 耗时

粗略计算下 1325643 / 60/60 = 368 小时 再 /24 = 15 天

划重点上线不到一个月

揪出真凶

到这里基本可以确认是有对象没有释放导致即使发生FullGC也回收不了引起的,准备dump进行分析看看Old区都是些什么妖魔鬼怪,执行命令jmap -dump:format=b,file=27641.bin 27641

生成28699.bin文件,我们借助 mat(分析) 以及jdk自带的 VisualVM

点击 文件 -->装入

全是字符对象

一个字符串对象占用 160多兆 而且输出的字符都是重复的

大胆推测 是不是死循环 或者是字符串拼接重复了 生成新对象,又或者字符串对象被 GCroot 不回收(假如 内存满分100 你自己占用了 95 别人来5分就得回收所以频繁)

我们断定是有某处代码 字符串导致的 但是我没发现这个工具怎么找到引用他的地方

再来借助 mat分析工具

这么多大对象

上图看到提示

保留总大小为162565616(13.25%)字节的局部变量。内存累积在“char[]”的一个实例中,该实例由“”加载。

发现了 用 VM 和 mat 都怀疑这个 char,点击 See stacktrace.

找到了自己的代码

for 循环 定义的 index = 0 结果你  i ++  加到后年马月 循环也结束不了啊。 好想锤死写代码那人

而且这个字符串 取的 accountDetailList 和 上面VM 工具找到的字符串 就是同一段报文

OK,知道问题的根因,想解决问题就比较简单了: 将 i ++ 改成 index++

我们就先不讨论 string 拼接字符串 用 “” + “” 还是用  StringBuilder了

可能会有人疑惑,死循环不会造成OOM 异常吗?

Java6和6之前,常量池是存放在方法区(永久代)中的。

Java7,将常量池是存放到了堆中。

Java8之后,取消了整个永久代区域,取而代之的是元空间。运行时常量池和静态常量池存放在元空间中,而字符串常量池依然存放在堆中。

虽然短短一篇笔记 但是我折腾了2天才找到,也是第一次接触排查这种事故

来源:oschina

链接:https://my.oschina.net/u/4349795/blog/4497650

java程序cpu突然飚高_fullGC 频繁导致CPU飙高相关推荐

  1. httpclient默认配置导致rt飙高

    功能上线后,运行平稳过一段时间(也许新功能上线后,进行了灰度,访问量不大)也就没引起注意.事故发生后,也立即做了补救措施,但部分现场也没有及时保留,从告警日志中发现,rt飙高的接口都指向了同一个接口. ...

  2. java程序cpu突然飚高_Java 定位导致CPU飙升的代码过程

    线上的一个日志实时输出的程序曾经出过这样一个问题,刚开始上线java程序占用的CPU的资源很少,但是到了整点的时候,CPU直线飙高,直接到达100%根本没有要下降的趋势,唯一的方法只能杀掉它了,后面在 ...

  3. cpu爆了怎么排查和处理_CPU飙高,系统性能问题如何排查?

    简介:压测时或多或少都收到过CPU或者Load高的告警,如果是单机偶发性的,经常会认为是"宿主机抢占导致的",那事实是否真是如此呢?是什么引起了这些指标的飙高?网络.磁盘还是高并发 ...

  4. cpu满了卡住 linux_Linux进程多导致CPU卡死的问题

    转载请注明出处: http://www.javashuo.com/article/p-oepqcugy-dq.html 一.邮箱收到一堆监控,报警内空大致如下,很明显是CPU不够用了,IO也有点问题: ...

  5. 看BAT技术面试官如何挑选Java程序员

    又到一年一度的跳槽求职高峰季,很多人问我,你们公司还需要人么,你们用的技术栈是哪些,有哪些是你们比较关注技术重点? 没错,作为负责技术面试的我,面对数十甚至上百封简历,肯定要做一轮筛选.究竟哪些技术点 ...

  6. 台式计算机cpu扣不下去,如果台式机的CPU太高怎么办_计算机的基本知识_IT /计算机_信息...

    如果台式计算机的cpu太高怎么办?有些网民不知道台式机cpu太高怎么办,所以让我告诉您台式机cpu的问题. 希望能对您有所帮助!如何处理台式计算机的高CPU分析和解决方案: 计算机cpu温度的正常范围 ...

  7. java程序员内功_Java程序员如何成为内功深厚的架构师

    一听到架构师,首先便想到的是在一间宽敞的房间中间坐着一位衣着得体的中年男人,望着落地窗外的风景凝思,万千思绪在脑海里翻腾,颇有运筹帷幄千里外的气势.程序员究竟是做架构师还是项目经理,最近看到微软潘正磊 ...

  8. java安装 2203_win7系统无法安装java程序提示“内部错误2203”的解决方法

    win7系统无法安装java程序提示"内部错误2203"的问题发生概率较高.怎样来处理win7系统无法安装java程序提示"内部错误2203"的问题,知道的人估 ...

  9. 年薪120W的架构师简历你见过吗?java程序员该如何达到?

    首先,给大家抛出一个问题: 第一个问题是,"大多数Java开发人员都在哪里,我们中有多少人?"我们回答了这个问题,把我们能得到的最准确的信息结合起来,然后推断出我们认为是一个受过良 ...

  10. 大数据时代,为什么很多JAVA程序员会转型做JAVA大数据

    分享之前推荐一个大数据交流学习群:722680258零基础进阶高级,需要学习大数据欢迎加入 JAVA的精密,强大,拥有其它语言不可替代的性能和可维护性,早已经是成为最受欢迎的编程语言之一,很多人想进入 ...

最新文章

  1. Scrapy框架--使用cookie
  2. POJ 2190 模拟
  3. 皮一皮:落伍了落伍了
  4. git revert 的问题
  5. python如何卸载模块cmd_使用cmd python模块时,如何使程序正常崩溃?
  6. 三星Galaxy S21系列将搭载One UI3.1系统:首发声音解锁
  7. cisco 密码重置
  8. turbo c语言教程,C语言入门教程之 Turbo C程序的基本组成
  9. jmeter中build和jmeter-results-detail-report_30.xsl以及jmeter.results.shanhe.me.xsl
  10. el-table合并单元格的方式
  11. 实战:RBAC(基于角色的权限控制)-2021.11.28
  12. 缺失值填充的几种方法
  13. Svelte入门——Web Components实现跨框架组件复用(二)
  14. 开机时小键盘灯不亮的解决方案
  15. vmware ThinApp 4.01 and Workstation 6.5.1 sn
  16. 屏蔽常见垃圾蜘蛛和扫描工具的两种办法
  17. Windows系统的基础上装Ubuntu双系统系统分区问题
  18. 智能制造系统架构和标准体系结构
  19. get_article_info
  20. 【修改蓝牙设备名称】一步简单操作

热门文章

  1. AtCoder Beginner Contest 275 A-D题解
  2. 程序员是如何买房的?
  3. Repository模式--采用EF Fluent API使用EntityTypeConfiguration分文件配置Model映射关系
  4. ORA-01438: value larger than specified precision allowed for this column
  5. animation动画--跳动
  6. git项目提交报rejected问题解决
  7. vue 图片剪裁插件
  8. Win10电脑资源管理器怎么打开?五种打开方式详解
  9. TypeScript学习日记
  10. Found existing installation:xxxx