java2如何排查线上死循环

  介绍

本篇文章给大家分享的是有关java2如何排查线上死循环,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

排查方法,因为是线上的linux,没有用jvm监控工具边缘链接上去。

只好用命令排查:

顶部cpu排序,一个java进程cpu到500%了,什么鬼.....

<>强查到对应的java进程

jps | | ps辅助| grep端口

pid=13455

查看进程中线程使用情况T排序查看cpu占用时间最高的线程编号

惠普13455

有个线程9877的时间一直在爆涨

获取线程十六进制地址9877(十六进制一定要小写)

printf“% x \ n"9877年

执行jstack 13455 | grep -10 2695(线程十六进制号)

如果想查看完整信息,可导出文本,查找

jstack - l 9839比;jstack。日志- 9893

“qtp750044075-25"# 25一家=5 os_prio=0 tid=0=0 x2695 runnable x00007f83354e5000国家免疫日[0 x00007f830e5d8000]   java.lang.Thread。状态:可运行   在java.text.DateFormatSymbols灵活;init> (DateFormatSymbols.java: 145)   sun.util.locale.provider.DateFormatSymbolsProviderImpl.getInstance (DateFormatSymbolsProviderImpl.java: 85)   java.text.DateFormatSymbols.getProviderInstance (DateFormatSymbols.java: 364)   java.text.DateFormatSymbols.getInstance (DateFormatSymbols.java: 340)   java.util.Calendar.getDisplayName (Calendar.java: 2110)   java.text.SimpleDateFormat.subFormat (SimpleDateFormat.java: 1125)   java.text.SimpleDateFormat.format (SimpleDateFormat.java: 966)   java.text.SimpleDateFormat.format (SimpleDateFormat.java: 936)   java.text.DateFormat.format (DateFormat.java: 345)   com.huiwan.gdata.modules.gdata.util.TimeUtil.getDay (TimeUtil.java: 383)   com.huiwan.gdata.modules.gdata.publ.retain.service.impl.Retain3ServiceImpl.act (Retain3ServiceImpl.java: 119)   在sun.reflect.NativeMethodAccessorImpl。invoke0(本地方法)   sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java: 62)   sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java: 43)   java.lang.reflect.Method.invoke (Method.java: 498)   org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection (AopUtils.java: 317)   .......略   锁定ownable某个浏览器:   ——没有

 java2如何排查线上死循环

定住到

Retain3ServiceImpl.java: 119

这行,马的,有人写了个而循环,用字符串时间比较,之前表类是日期型,后改为datetime类型,多了就是永远也没一样的时间,一直在那而.....还搞了个json对象默认加0…

改了这里的代码,就好了,cpu就没上去了。

<强>记一次线上Java程序导致服务器cpu占用率过高的问题排除过程

<强> 1,故障现象

客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用高级命令查看服务器情况,发现cpu占用率过高。

<强> 2,cpu占用过高问题定位

2.1,定位问题进程

使用高级命令查看资源占用情况,发现pid为14063的进程占用了大量的cpu资源,cpu占用率高达776.1%,内存占用率也达到29.8%了

 ylp@ylp-web-01 ~ 14063 ps mp - o线程,tid,时间
  用户% CPU PRI SCNT WCHAN用户系统TID时间
  ylp 361 - - - - - - - - - - - 02:05:58
  ylp 19 - futex_ - 14063就是0.0
  ylp 19 - poll_s - 14064就是0.0
  19 - - - - - - - - - 14065 00:15:30 ylp 44.5
  19 - - - - - - - - - 14066 00:15:30 ylp 44.5
  19 - - - - - - - - - 14067 00:15:29 ylp 44.4
  19 - - - - - - - - - 14068 00:15:30 ylp 44.5
  19 - - - - - - - - - 14069 00:15:30 ylp 44.5
  19 - - - - - - - - - 14070 00:15:30 ylp 44.5
  19 - - - - - - - - - 14071 00:15:30 ylp 44.5
  19 - - - - - - - - - 14072 00:15:32 ylp 44.6
  19 - futex_ - 14073 00:00:46 ylp 2.2
  ylp 19 - futex_ - 14074就是0.0
  ylp 19 - futex_ - 14075就是0.0
  ylp 19 - futex_ - 14076就是0.0
  ylp 0.7 19 - futex_ - 14077 00:00:15 

java2如何排查线上死循环