線上環境CPU使用率飆升,如何排查

線上環境CPU使用率飆升,如何排查

1.CPU飆升的常見原因

1. 代碼層面問題

  • 死循環:錯誤的循環條件導致無限循環
  • 遞歸過深:沒有正確的終止條件
  • 算法效率低:O(n2)或更高時間復雜度的算法處理大數據集
  • 頻繁GC:內存泄漏導致頻繁垃圾回收

2. 并發問題

  • 線程阻塞:過多的線程等待資源(鎖、數據庫連接等)
  • 線程爆炸:創建過多線程,上下文切換開銷大
  • 鎖競爭:激烈的鎖競爭導致線程頻繁掛起和喚醒

3. 外部依賴問題

  • 數據庫:慢查詢、全表掃描、缺少索引
  • 外部API:響應變慢或阻塞
  • 網絡IO:網絡延遲或帶寬瓶頸

4. 資源問題

  • 內存不足:頻繁的GC操作消耗CPU
  • 磁盤IO:大量的磁盤讀寫操作

5. 配置問題

  • JVM參數:不合理的堆大小、GC參數等
  • 線程池配置:不合理的線程池大小

2.模擬線上環境cpu飆升

條件準備

主要是用于演示,當線上環境出現cpu飆升時,怎么去排查問題,因此此處就使用死循環去構造該場景

在這里插入圖片描述
在這里插入圖片描述

如上所示,項目結構也是及其的簡單,定義一個接口,用于訪問,觸發死循環的執行,用于構造cpu飆升的場景

代碼打包部署

將項目打包為jar包,在虛擬機上部署運行

# 參考命令 
java -jar high-cpu-1.0-SNAPSHOT.jar
# 后臺運行
nohup java -jar high-cpu-1.0-SNAPSHOT.jar &

運行之后檢查下是否成功

在這里插入圖片描述

然后對接口發起請求http://ip:10003/high/cpu,執行while循環

3 排查步驟

獲取所有進程執行信息

首先使用top命令,查看線程的占用情況

[root@mycentos local]# top

在這里插入圖片描述

可以確認PID為93992的進程,占用cpu最高

查看指定進程的各線程的執行信息

使用命令,查看當前進程中的線程的信息

ps H -eo pid,tid,%cpu | grep 93992

在這里插入圖片描述

由上圖可知線程id為94012的線程的占用率最高

將線程號轉為16進制,并記住該16進制

printf "%x\n" 94012

在這里插入圖片描述

最終定位

[root@mycentos local]# jstack 93992

執行jstack 93992 可以根據線程 id 找到有問題的線程,進一步定位到問題代碼的源碼行號

在這里插入圖片描述

由此可以定位到紅框中可能出現錯誤的代碼信息,進而進一步解決問題

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98477.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98477.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98477.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《sklearn機器學習——特征提取》

在 sklearn.feature_extraction 模塊中,DictVectorizer 是從字典(dict)中加載和提取特征的核心工具。它主要用于將包含特征名稱和值的 Python 字典列表轉換為機器學習算法所需的數值型數組或稀疏矩陣。 這種方法在處理結構化數據(…

IEEE出版,限時早鳥優惠!|2025年智能制造、機器人與自動化國際學術會議 (IMRA 2025)

2025年智能制造、機器人與自動化國際學術會議 (IMRA2025)2025 International Conference on Intelligent Manufacturing, Robotics, and Automation中國?湛江2025年11月14日-2025年11月16日IMRA2025權威出版大咖云集穩定檢索智能制造、人工智能、機器人、物聯網(Io…

C# 基于halcon的視覺工作流-章30-圓圓距離測量

C# 基于halcon的視覺工作流-章30-圓圓距離測量 本章目標: 一、利用圓卡尺找兩圓心; 二、distance_pp算子計算兩圓點距離; 三、匹配批量計算;本章是在章23-圓查找的基礎上進行測量使用,圓查找知識請閱讀章23&#xff0c…

java設計模式二、工廠

概述 工廠方法模式是一種常用的創建型設計模式,它通過將對象的創建過程封裝在工廠類中,實現了創建與使用的分離。這種模式不僅提高了代碼的復用性,還增強了系統的靈活性和可擴展性。本文將詳細介紹工廠方法模式的三種形式:簡單工廠…

Ubuntu 24.04 中 nvm 安裝 Node 權限問題解決

個人博客地址:Ubuntu 24.04 中 nvm 安裝 Node 權限問題解決 | 一張假鈔的真實世界 參考nvm的一個issue:https://github.com/nvm-sh/nvm/issues/3363 異常信息如下: $ nvm install 22 Downloading and installing node v22.19.0... Download…

Java面試-線程安全篇

一、synchronized關鍵字: 基本使用與作用:通過搶票代碼示例,展示了synchronized作為對象鎖,可避免多線程超賣或搶到同一張票問題,保證代碼原子性,同一時刻只有一個線程獲得鎖,其他線程阻塞。底層…

R 語言科研繪圖 --- 其他繪圖-匯總2

在發表科研論文的過程中,科研繪圖是必不可少的,一張好看的圖形會是文章很大的加分項。 為了便于使用,本系列文章介紹的所有繪圖都已收錄到了 sciRplot 項目中,獲取方式: R 語言科研繪圖模板 --- sciRplothttps://mp.…

【數學建模學習筆記】啟發式算法:粒子群算法

零基礎小白看懂粒子群優化算法(PSO)一、什么是粒子群優化算法?簡單說,粒子群優化算法(PSO)是一種模擬鳥群 / 魚群覓食的智能算法。想象一群鳥在找食物:每只鳥(叫 “粒子”&#xff0…

【Gitlab】Ubuntu 20.04服務器部署Gitlab

寫一個 適用于 Ubuntu 20.04/22.04 的 GitLab 一鍵部署腳本,包括:安裝依賴安裝 GitLab CE配置公網 IP 或域名自動開啟 HTTPS(Let’s Encrypt)配置防火墻下面是完整腳本:#!/bin/bash# # GitLab 一鍵安裝腳本 # # 1. 檢…

Android 15重磅升級:16KB內存頁機制詳解與適配指南

一、背景隨著Android硬件架構的持續演進,新一代設備開始采用16KB內存頁(Page Size)機制,逐步替代傳統的4KB內存頁設計。此項底層變更對應用兼容性產生直接影響,特別是對依賴Native層庫、JNI接口或自定義內存管理模塊的…

Mybatis-8 動態SQL

動態SQL-官方文檔 文檔地址 動態 SQL_MyBatis中文網 為什么需要動態SQL 1、動態SQL是MyBatis的強大特性之一 2、使用JDBC或其它類似的框架,根據不同條件拼接SQL語句非常麻煩,例如拼接時要確保不能忘記添加必要的空格,還要注意去掉列表最后一…

PySpark數據輸入

PySpark數據輸入 1.理解RDD對象 2.掌握PySpark數據輸入的2種方法 RDD對象 PySpark支持多種數據的輸入,在輸入完成后,都會得到一個:RDD類的對象 RDD全稱為:彈性分布式數據集(Resilient Distributed Datasets&#xff09…

【系統架構設計(16)】軟件架構設計二:軟件架構風格:構建系統的設計模式與選擇指南

文章目錄一、核心思想二、數據流風格:以數據流動為核心的處理模式三、調用返回風格:基于程序調用的層次化組織四、獨立構件風格:基于事件驅動的松耦合架構五、虛擬機風格:提供抽象執行環境的架構模式六、倉庫風格:以數…

MySQL速記小冊(1)

1【Q】:Mysql中的數據排序是怎么實現的?【A】:排序過程中如果字段有索引,則利用索引排序。反之使用文件排序。在文件排序中,如果數據量少則在內存中排序,使用單路排序或雙路排序。如果數據量大則利于磁盤文…

20250904 10:45_排查10.1.3.35新QMS系統RMAN備份失敗問題(優化腳本里的環境配置,增加了check_oracle_env 函數)

一、RMAN備份失敗日志如下 [2025-09-04 04:00:01] 備份腳本啟動 [2025-09-04 04:00:01] 開始 RMAN 備份 CDB: ORCLCDB Message file RMAN<lang>.msb not found Verify that ORACLE_HOME is set properly [2025-09-04 04:00:01] RMAN 備份失敗! 二、原備份腳本存檔…

Vue3源碼reactivity響應式篇之EffectScope

概述 EffectScope是Vue3中一個響應式系統的輔助類&#xff0c;用于管理副作用&#xff08;effect&#xff09;的作用域。它可以幫助我們更好地組織和管理多個effect&#xff0c;便于一起停止或暫停以及恢復&#xff0c;避免了全局狀態的污染和管理的復雜性。 每一個vue組件的實…

MySQL 日志全解析:Binlog/Redo/Undo 等 5 類關鍵日志的配置、作用與最佳實踐

1 二進制日志&#xff08;Binlog&#xff09;&#xff1a;配置與核心作用 Binlog 是 MySQL 中跨存儲引擎的核心日志&#xff0c;記錄所有數據修改操作&#xff0c;主要用于主從復制、數據備份恢復與跨庫遷移。 1.1 Binlog 核心操作 開啟 Binlog 若需開啟 Binlog&#xff0c;需在…

springboot 之 HTML與圖片生成 (2)

前言 之前寫了一篇html轉圖片的 文章&#xff0c;使用中文時會出現亂碼情況&#xff0c;后來又從網上找了下信息&#xff0c;這篇主要介紹下另一個轉換庫。 依賴 <!-- 用于將html轉圖片--><dependency><groupId>gui.ava</groupId><artifactId>…

計算機組成原理:計算機的分類

&#x1f4cc;目錄&#x1f5a5;? 計算機組成原理&#xff1a;計算機的分類——從架構到應用的全景梳理一、按處理數據類型分類&#xff1a;從“數字”到“混合”的演進&#xff08;一&#xff09;數字計算機&#xff1a;離散數據的“精準管家”1. 核心原理2. 關鍵優勢3. 典型…

數據結構——單向循環鏈表代碼(補充)

在此前的文章中&#xff08;鏈接如下&#xff09;&#xff0c;只有單向鏈表的代碼&#xff0c;接下來我們來寫單向循環鏈表&#xff0c;并用其實現一個簡單的學生信息鏈表https://blog.csdn.net/2301_80406299/article/details/151157051?spm1011.2415.3001.10575&sharefr…