衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

new ArrayList不當導致CPU飆升

jf_ro2CN3Fa ? 來源:芋道源碼 ? 2023-08-15 14:56 ? 次閱讀

天線上容器突然cpu飆升,也是第一次排查這種問題所以記錄一下~

前言

首先問題是這樣的,周五正在寫文檔,突然收到了線上報警,發現cpu占用達到了90多,上平臺監控系統查看容器,在jvm監控中發現有一個pod在兩個小時內產生了61次youngGc一次fullGc,這個問題特別嚴重且少見,由于我之前也沒有排查過此類問題,所以也是百度,但整個過程也有一些自己的思考,所以跟大家分享一下~

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

當時場景

我先給大家看一下一副正常的gc曲線監控(為保密性,我自己按照平臺監控畫了出來):

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

正常的jvm監控曲線圖

586b3368-3b2f-11ee-9e74-dac502259ad0.jpg正常的jvm監控曲線圖

產生問題的jvm監控曲線圖

5887183a-3b2f-11ee-9e74-dac502259ad0.jpg產生問題的jvm監控曲線圖

可以看的出來,正常情況下該系統很少gc(具體看業務系統使用情況、jvm內存分配),但是在圖二中出現了大量異常的gc情況甚至觸發了fullGc,所以我當時立馬進行了分析。

具體分析

首先異常gc的情況只出現在一個pod上(系統有多個pod),在監控系統找到對應的pod,進入pod內部查看問題原因,排查問題一定要冷靜

  1. 進入pod之后,輸入top查看各linux進程對系統資源的使用情況(因我這是事后補稿,資源使用不高,大家看步驟即可)
58a4cdf8-3b2f-11ee-9e74-dac502259ad0.jpg
  1. 分析資源使用情況在當時的情況下
58ab49da-3b2f-11ee-9e74-dac502259ad0.jpgtop

當時我的pid為1的進程cpu上到了130(多核)那我認定就是java應用出問題了,control+c退出繼續往下走

  1. 輸入top -H -p pid 通過此命令可以查看實際占用CPU最高的的線程的id,pid為剛才資源使用高的pid號
58b9e2c4-3b2f-11ee-9e74-dac502259ad0.jpgtop -H -p pid
  1. 出現具體線程的資源使用情況,表格里的pid代表線程的id,我們稱他為tid
58ce3a30-3b2f-11ee-9e74-dac502259ad0.jpgtid
  1. 我記得當時的tip為746(上述圖片只是我給大家重復步驟),使用命令printf "%x " 746,將線程tid轉換為16進制
58e9a892-3b2f-11ee-9e74-dac502259ad0.jpgtid轉換為16進制

因為我們線程id號在堆棧里是16進制的所以需要做一個進制轉換

  1. 輸入jstack pid | grep 2ea >gc.stack
jstackpid|grep2ea>gc.stack
59038000-3b2f-11ee-9e74-dac502259ad0.jpgjstack

解釋一下,jstack是jdk給提供的監控調優小工具之一,jstack會生成JVM當前時刻的線程快照,然后我們可以通過它查看某個Java進程內的線程堆棧信息,之后我們把堆棧信息通過管道收集2ea線程的信息,然后將信息生成為gc.stack文件,我隨便起的,隨意

  1. 當時我先cat gc.stack 發現數據有點多在容器里看不方便,于是我下載到本地瀏覽,因為公司對各個機器的訪問做了限制,我只能用跳板機先找到一臺沒用的機器a,把文件下載到a然后我再把a里的文件下載到本地(本地訪問跳板機OK),先輸入python -m SimpleHTTPServer 8080,linux自帶python,這個是開啟一個簡單http服務供外界訪問
590a29e6-3b2f-11ee-9e74-dac502259ad0.jpg開啟http服務

然后登錄跳板機,使用curl下載curl -o http://ip地址/gcInfo.stack

為方便演示,我在圖中把ip換了一個假的

59108016-3b2f-11ee-9e74-dac502259ad0.jpgcurl

之后用同樣的方法從本地下載跳板機就可以了,記得關閉python開啟的建議服務嗷

  1. 把文件下載到了本地,打開查看編輯器搜索2ea,找到nid為2ea的堆棧信息
59223130-3b2f-11ee-9e74-dac502259ad0.jpg找到nid為2ea的堆棧信息

之后找到對應的impl根據行數分析程序

  1. 發現是在文件異步導出excel的時候,導出接口使用了公共列表查詢接口,列表接口查詢數據最多為分頁200一批,而導出數據量每個人的權限幾萬到十幾萬不等
593f284e-3b2f-11ee-9e74-dac502259ad0.jpg導出excel

并且該判斷方法使用了嵌套循環里判斷,且結合業務很容易 get 不到 value,Java 下的new ArrayList 就是返回一個 List 集合(好像不用說這么細 (;一_一 ),在整個方法結束之前,產生的 lists生命周期還在所以發生多次gc觸發重啟之后還影響到了別的pod。然后對代碼進行了fix,緊急上線,問題解決~

結束語

遇到生產問題,大家不要害怕,遇到問題先保證服務是否可用,然后通過有限的信息層層解析,找出最終的問題。如果你會 arthas,排查起來會更輕松!


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10905

    瀏覽量

    213032
  • 編輯器
    +關注

    關注

    1

    文章

    806

    瀏覽量

    31293
  • 進程
    +關注

    關注

    0

    文章

    204

    瀏覽量

    13996

原文標題:new ArrayList 不當導致 CPU 飆升。。

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    OpenHarmony語言基礎類庫【@ohos.util.ArrayList (線性容器ArrayList)】

    ArrayList是一種線性數據結構,底層基于數組實現。ArrayList會根據實際需要動態調整容量,每次擴容增加50%。
    的頭像 發表于 04-25 18:48 ?659次閱讀
    OpenHarmony語言基礎類庫【@ohos.util.<b class='flag-5'>ArrayList</b> (線性容器<b class='flag-5'>ArrayList</b>)】

    用C語言實現ArrayList,動態增加數組及改變數組大小(可以打包存儲,并恢復)

    移植到其他平臺。簡單的增加字符串例子:ArrayList *tmep = NULL;ArrayList *object = new_array_list(NULL,"
    發表于 02-28 12:33

    為什么f_mount后CPU使用率飆升10%?

    江湖救急:我用SD卡來導出運行過程中的一些數據,起了一個dump_output_task來負責dump,初始化時時f_mount了一把SD卡(返回值0),后面不做任何跟SD卡相關的讀寫操作,CPU使用率也直接飆升10%,求助。。。運行環境:UCOS-III
    發表于 10-27 23:34

    ArrayList的get/get如何操作?

    ArrayList的特點是什么ArrayList的get操作ArrayList的add操作
    發表于 11-09 06:43

    如何解決STM32串口溢出錯誤Overrun使用不當導致的串口死機?

    如何解決STM32串口溢出錯誤Overrun使用不當導致的串口死機?
    發表于 12-15 07:29

    FlexSPI復位方式不當導致i.MXRT系列下OTFAD加密啟動失敗怎么解決?

    FlexSPI復位方式不當導致i.MXRT系列下OTFAD加密啟動失敗怎么解決?
    發表于 02-07 08:11

    【學習打卡】OpenHarmony的ArrayList介紹

    在底層的集合允許我們在List 接口的幫助下插入和刪除元素。List 接口是一個有序的對象集合,允許存儲重復值。 ArrayList是OpenHarmony中實現List接口特性的類,具有結構
    發表于 07-27 21:51

    OpenHarmony應用示例:線性容器 ArrayList

    簡介本示例通過線性容器 ArrayList 模擬了添加刪除聯系人的操作,展示了 ArrayList 相關的接口功能。效果圖如下:相關概念線性容器ArrayListArrayList
    發表于 08-15 14:31

    PCB Layout不當引起CPU工作不穩定的解決方法

    在高速數字電路中,CPU的功耗往往隨著主頻的提升而增大,如果PCB Layout不當,則可能會引起CPU工作不穩定,本人就曾經遇到過。Marvell 88F6282 CPU運行在2GH
    發表于 06-01 09:15 ?2325次閱讀

    螺桿支撐座安裝不當導致哪些問題發生?

    螺桿支撐座是精密傳動元件,在機械工業中起著很重要的作用,螺桿支撐座在使用過程中或多或少都會有需要注意的問題,如果這些問題處理不當,往往會導致機械運行中的一系列故障。
    的頭像 發表于 03-04 17:41 ?617次閱讀
    螺桿支撐座安裝<b class='flag-5'>不當</b>會<b class='flag-5'>導致</b>哪些問題發生?

    JDK中java.util.ArrayList 類的介紹

    1、ArrayList 定義 ArrayList 是一個用數組實現的集合,支持隨機訪問,元素有序且可以重復。 public class ArrayList E > extends
    的頭像 發表于 10-10 15:51 ?739次閱讀
    JDK中java.util.<b class='flag-5'>ArrayList</b> 類的介紹

    ArrayList入門實踐

    構造函數 ArrayList 有三個構造函數,默認不帶參數的構造函數就是初始化一個空數組。 //一個空數組 private static final Object
    的頭像 發表于 10-10 16:36 ?401次閱讀
    <b class='flag-5'>ArrayList</b>入門實踐

    cpu溫度太高怎么解決?cpu溫度高的原因?

    如何解決這一問題。 一、CPU溫度過高的原因 1. 散熱系統不當:服務器或臺式機的散熱系統設計可能不夠完善,或者由于久經使用而積灰、質量下降等問題。CPU散熱器可能被堵塞,導致熱量無法
    的頭像 發表于 12-09 16:15 ?4342次閱讀

    鴻蒙語言基礎類庫:ohos.util.ArrayList 線性容器ArrayList

    ArrayList是一種線性數據結構,底層基于數組實現。ArrayList會根據實際需要動態調整容量,每次擴容增加50%。
    的頭像 發表于 07-10 09:37 ?295次閱讀
    鴻蒙語言基礎類庫:ohos.util.<b class='flag-5'>ArrayList</b> 線性容器<b class='flag-5'>ArrayList</b>

    主板cpu故障燈常亮是什么原因

    2.1 硬件問題 CPU安裝不當 :如果CPU沒有正確安裝,或者安裝時損壞了針腳,可能會導致故障燈亮起。 過熱問題 :CPU過熱可能
    的頭像 發表于 09-02 14:43 ?5864次閱讀
    百家乐官网书| 维也纳国际娱乐城| 香港六合彩曾道人| 澄迈县| 百家乐官网最新投注法| 缅甸百家乐官网网上投注| 有关百家乐官网玩家论坛| 百利宫百家乐官网的玩法技巧和规则| 百家乐波音平台路单| 博E百百家乐的玩法技巧和规则| 皇冠现金网哪个最好| 沧州市| 百家乐官网赌局| 百家乐太阳城球讯网| 至尊百家乐20| 皇家娱乐场| 平注打百家乐官网的方法| 伟德百家乐下载| 万达百家乐娱乐城| 新源县| 金矿百家乐官网的玩法技巧和规则 | 大发888易付168 充值| 三亚市| 实战百家乐官网十大取胜原因百分百战胜百家乐官网不买币不吹牛只你能做到按我说的.百家乐官网基本规则 | 锦江国际娱乐| 百家乐官网赌博赌博网站| 百家乐官网15人桌布| 百家乐赢法口诀| 百家乐怎样出千| 大发888娱乐场下载注册| 破解百家乐| 百家乐官网稳赢秘笈| 百家乐网上技巧| 百家乐赌场现金网平台排名| 大发888怎么下载| 百家乐官网的必赢术| 如何打百家乐官网的玩法技巧和规则| 网络百家乐软件真假| 大发888开户注册会员| 百家乐官网高额投注| 百家乐筹码样式|