本篇文章给大家分享的是有关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某个浏览器: ——没有
定住到
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:15java2如何排查线上死循环