电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java排查一個線上死循環cpu暴漲的過程分析

瀏覽:4日期:2022-08-26 09:18:33

問題,打一個頁面cpu暴漲,打開一次就漲100%,一會系統就卡的不行了。

排查方法,因為是線上的linux,沒有用jvm監控工具rim鏈接上去。

只好用命令排查:

top cpu排序,一個java進程cpu到500%了,什么鬼.....

查到對應java進程

jps || ps -aux | grep 端口

pid=13455

查看進程中線程使用情況 T排序 查看cpu占用time最高的線程編號

top -Hp 13455

有個線程9877 的時間一直在爆漲

獲取線程十六進制地址9877 (十六進制一定要小寫)

printf '%xn' 9877

執行 jstack 13455|grep -10 2695(線程十六進制號)

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

jstack -l 9839 > jstack.log-9893

'qtp750044075-25' #25 prio=5 os_prio=0 tid=0x00007f83354e5000 nid=0x2695 runnable [0x00007f830e5d8000] java.lang.Thread.State: RUNNABLEat java.text.DateFormatSymbols.<init>(DateFormatSymbols.java:145)at sun.util.locale.provider.DateFormatSymbolsProviderImpl.getInstance(DateFormatSymbolsProviderImpl.java:85)at java.text.DateFormatSymbols.getProviderInstance(DateFormatSymbols.java:364)at java.text.DateFormatSymbols.getInstance(DateFormatSymbols.java:340)at java.util.Calendar.getDisplayName(Calendar.java:2110)at java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1125)at java.text.SimpleDateFormat.format(SimpleDateFormat.java:966)at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936)at java.text.DateFormat.format(DateFormat.java:345)at com.huiwan.gdata.modules.gdata.util.TimeUtil.getDay(TimeUtil.java:383)at com.huiwan.gdata.modules.gdata.publ.retain.service.impl.Retain3ServiceImpl.act(Retain3ServiceImpl.java:119)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) .......略 Locked ownable synchronizers:- None

java排查一個線上死循環cpu暴漲的過程分析

定住到

Retain3ServiceImpl.java:119

這行,馬的,有人寫了個while循環,用字符串時間比較,之前表是date類型,后改為datetime類型,多了00:00:00永遠也沒一樣的時間,一直在那while.....還搞了個json對象默認加0......

改了這里的代碼,就好了,cpu就沒上去了.

補充知識:記一次線上Java程序導致服務器CPU占用率過高的問題排除過程

1、故障現象

客服同事反饋平臺系統運行緩慢,網頁卡頓嚴重,多次重啟系統后問題依然存在,使用top命令查看服務器情況,發現CPU占用率過高。

2、CPU占用過高問題定位

2.1、定位問題進程

使用top命令查看資源占用情況,發現pid為14063的進程占用了大量的CPU資源,CPU占用率高達776.1%,內存占用率也達到了29.8%

[ylp@ylp-web-01 ~]$ toptop - 14:51:10 up 233 days, 11:40, 7 users, load average: 6.85, 5.62, 3.97Tasks: 192 total, 2 running, 190 sleeping, 0 stopped, 0 zombie%Cpu(s): 97.3 us, 0.3 sy, 0.0 ni, 2.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 16268652 total, 5114392 free, 6907028 used, 4247232 buff/cacheKiB Swap: 4063228 total, 3989708 free, 73520 used. 8751512 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND14063 ylp 20 0 9260488 4.627g 11976 S 776.1 29.8 117:41.66 java

2.2、定位問題線程

使用ps -mp pid -o THREAD,tid,time命令查看該進程的線程情況,發現該進程的多個線程占用率很高

[ylp@ylp-web-01 ~]$ ps -mp 14063 -o THREAD,tid,timeUSER %CPU PRI SCNT WCHAN USER SYSTEM TID TIMEylp 361 - - - - - - 02:05:58ylp 0.0 19 - futex_ - - 14063 00:00:00ylp 0.0 19 - poll_s - - 14064 00:00:00ylp 44.5 19 - - - - 14065 00:15:30ylp 44.5 19 - - - - 14066 00:15:30ylp 44.4 19 - - - - 14067 00:15:29ylp 44.5 19 - - - - 14068 00:15:30ylp 44.5 19 - - - - 14069 00:15:30ylp 44.5 19 - - - - 14070 00:15:30ylp 44.5 19 - - - - 14071 00:15:30ylp 44.6 19 - - - - 14072 00:15:32ylp 2.2 19 - futex_ - - 14073 00:00:46ylp 0.0 19 - futex_ - - 14074 00:00:00ylp 0.0 19 - futex_ - - 14075 00:00:00ylp 0.0 19 - futex_ - - 14076 00:00:00ylp 0.7 19 - futex_ - - 14077 00:00:15

從輸出信息可以看出,14065~14072之間的線程CPU占用率都很高

2.3、查看問題線程堆棧

挑選TID為14065的線程,查看該線程的堆棧情況,先將線程id轉為16進制,使用printf '%xn' tid命令進行轉換

[ylp@ylp-web-01 ~]$ printf '%xn' 14065

36f1

再使用jstack命令打印線程堆棧信息,命令格式:jstack pid |grep tid -A 30

[ylp@ylp-web-01 ~]$ jstack 14063 |grep 36f1 -A 30'GC task thread#0 (ParallelGC)' prio=10 tid=0x00007fa35001e800 nid=0x36f1 runnable 'GC task thread#1 (ParallelGC)' prio=10 tid=0x00007fa350020800 nid=0x36f2 runnable 'GC task thread#2 (ParallelGC)' prio=10 tid=0x00007fa350022800 nid=0x36f3 runnable 'GC task thread#3 (ParallelGC)' prio=10 tid=0x00007fa350024000 nid=0x36f4 runnable 'GC task thread#4 (ParallelGC)' prio=10 tid=0x00007fa350026000 nid=0x36f5 runnable 'GC task thread#5 (ParallelGC)' prio=10 tid=0x00007fa350028000 nid=0x36f6 runnable 'GC task thread#6 (ParallelGC)' prio=10 tid=0x00007fa350029800 nid=0x36f7 runnable 'GC task thread#7 (ParallelGC)' prio=10 tid=0x00007fa35002b800 nid=0x36f8 runnable 'VM Periodic Task Thread' prio=10 tid=0x00007fa3500a8800 nid=0x3700 waiting on condition JNI global references: 392

從輸出信息可以看出,此線程是JVM的gc線程。此時可以基本確定是內存不足或內存泄露導致gc線程持續運行,導致CPU占用過高。

所以接下來我們要找的內存方面的問題

3、內存問題定位

3.1、使用jstat -gcutil命令查看進程的內存情況

[ylp@ylp-web-01 ~]$ jstat -gcutil 14063 2000 10 S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 0.00 100.00 99.99 26.31 42 21.917 218 1484.830 1506.747 0.00 0.00 100.00 99.99 26.31 42 21.917 218 1484.830 1506.747 0.00 0.00 100.00 99.99 26.31 42 21.917 219 1496.567 1518.484 0.00 0.00 100.00 99.99 26.31 42 21.917 219 1496.567 1518.484 0.00 0.00 100.00 99.99 26.31 42 21.917 219 1496.567 1518.484 0.00 0.00 100.00 99.99 26.31 42 21.917 219 1496.567 1518.484 0.00 0.00 100.00 99.99 26.31 42 21.917 219 1496.567 1518.484 0.00 0.00 100.00 99.99 26.31 42 21.917 220 1505.439 1527.355 0.00 0.00 100.00 99.99 26.31 42 21.917 220 1505.439 1527.355 0.00 0.00 100.00 99.99 26.31 42 21.917 220 1505.439 1527.355

從輸出信息可以看出,Eden區內存占用100%,Old區內存占用99.99%,Full GC的次數高達220次,并且頻繁Full GC,Full GC的持續時間也特別長,平均每次Full GC耗時6.8秒(1505.439/220)。根據這些信息,基本可以確定是程序代碼上出現了問題,可能存在不合理創建對象的地方

3.2、分析堆棧

使用jstack命令查看進程的堆棧情況

[ylp@ylp-web-01 ~]$ jstack 14063 >>jstack.out

把jstack.out文件從服務器拿到本地后,用編輯器查找帶有項目目錄并且線程狀態是RUNABLE的相關信息,從圖中可以看出ActivityUtil.java類的447行正在使用HashMap.put()方法

java排查一個線上死循環cpu暴漲的過程分析

3.3、代碼定位

打開項目工程,找到ActivityUtil類的477行,代碼如下:

java排查一個線上死循環cpu暴漲的過程分析

找到相關同事了解后,這段代碼會從數據庫中獲取配置,并根據數據庫中remain的值進行循環,在循環中會一直對HashMap進行put操作。

查詢數據庫中的配置,發現remain的數量巨大

java排查一個線上死循環cpu暴漲的過程分析

至此,問題定位完畢。

以上這篇java排查一個線上死循環cpu暴漲的過程分析就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 浙江上沪阀门有限公司| 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 涡街流量计_LUGB智能管道式高温防爆蒸汽温压补偿计量表-江苏凯铭仪表有限公司 | 船用锚链|专业锚链生产厂家|安徽亚太锚链制造有限公司 | 长沙网站建设制作「网站优化推广」-网页设计公司-速马科技官网 | 闪蒸干燥机-喷雾干燥机-带式干燥机-桨叶干燥机-[常州佳一干燥设备] | 密集架-手摇-智能-移动-价格_内蒙古档案密集架生产厂家 | 液压压力机,液压折弯机,液压剪板机,模锻液压机-鲁南新力机床有限公司 | 成都网站建设制作_高端网站设计公司「做网站送优化推广」 | 中医治疗皮肤病_潍坊银康医院「山东」重症皮肤病救治平台 | 济南律师,济南法律咨询,山东法律顾问-山东沃德律师事务所 | 厂房出租_厂房出售_产业园区招商_工业地产&nbsp;-&nbsp;中工招商网 | 集菌仪_智能集菌仪_全封闭集菌仪_无菌检查集菌仪厂家-那艾 | 电脑刺绣_绣花厂家_绣花章仔_织唛厂家-[源欣刺绣]潮牌刺绣打版定制绣花加工厂家 | 深圳市简易检测技术有限公司| 莱州网络公司|莱州网站建设|莱州网站优化|莱州阿里巴巴-莱州唯佳网络科技有限公司 | 流程管理|流程管理软件|企业流程管理|微宏科技-AlphaFlow_流程管理系统软件服务商 | AGV叉车|无人叉车|AGV智能叉车|AGV搬运车-江西丹巴赫机器人股份有限公司 | 驾驶式洗地机/扫地机_全自动洗地机_工业洗地机_荣事达工厂官网 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | 棕刚玉_白刚玉_铝酸钙-锐石新材料| 深圳律师咨询_深圳律师事务所_华荣【免费在线法律咨询】网 | 南京雕塑制作厂家-不锈钢雕塑制作-玻璃钢雕塑制作-先登雕塑厂 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 工业用品一站式采购平台|南创工品汇-官网|广州南创 | 北京银联移动POS机办理_收银POS机_智能pos机_刷卡机_收银系统_个人POS机-谷骐科技【官网】 | 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 | 算命免费_生辰八字_免费在线算命 - 卜算子算命网 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 立式_复合式_壁挂式智能化电伴热洗眼器-上海达傲洗眼器生产厂家 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 二手电脑回收_二手打印机回收_二手复印机回_硒鼓墨盒回收-广州益美二手电脑回收公司 | NM-02立式吸污机_ZHCS-02软轴刷_二合一吸刷软轴刷-厦门地坤科技有限公司 | 地源热泵一体机,地源热泵厂家-淄博汇能环保设备有限公司 | 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | 元拓建材集团官方网站 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 |