搜尋
首頁系統教程Linux我去,Linux 系統 CPU 100% 打滿了!

我去,Linux 系統 CPU 100% 打滿了!

Feb 13, 2024 pm 11:27 PM
linuxlinux教程linux系統linux指令shell腳本嵌入式linuxlinux入門linux學習

昨天下午,我突然收到了維運部門的郵件警報,顯示資料平台伺服器的CPU利用率高達98.94%。最近一段時間,這個利用率持續在70%以上。乍一看,似乎是硬體資源到達了瓶頸,需要擴容。但仔細思考後,我發現我們的業務系統並不是一個高並發或CPU密集的應用。這個利用率實在太誇張了,硬體瓶頸不可能這麼快就到達。肯定是某處的業務代碼邏輯出現了問題。

2、檢查思路

##2.1 定位高負載程序 pid

先登入伺服器使用top指令確認伺服器的具體情況,根據具體情況再進行分析判斷。

我去,Linux 系统 CPU 100% 打满了!

透過觀察load average,以及負載評判標準(8核心),可以確認伺服器存在負載較高的情況;

我去,Linux 系统 CPU 100% 打满了!

觀察各個進程資源使用情況,可以看出進程id為682的進程,有著較高的CPU佔比

2.2 定位具體的例外業務

這裡咱們可以使用 pwdx 指令根據 pid 找到業務進程路徑,進而定位到負責人和專案:

我去,Linux 系统 CPU 100% 打满了!

可下結論:此進程對應的就是資料平台的web服務。

2.3 定位例外執行緒及具體程式碼行

傳統的方案一般是4步驟:

1、top oder by with P:1040 // 先依行程負載排序找到 maxLoad(pid)

2、top -Hp 進程PID:1073 // 找到相關負載 執行緒PID

3、printf “0x%x ”線程PID: 0x431 // 將線程PID轉換為 16進制,為後面查找 jstack 日誌做準備

4、jstack 程序PID | vim /十六進位執行緒PID – // 例如:jstack 1040|vim /0x431 –

但對於線上問題定位來說,分秒必爭,上面的4 步還是太繁瑣耗時了,之前介紹過淘寶的oldratlee 同學就將上面的流程封裝為了一個工具:show-busy-java-threads. sh,可以很方便的定位線上的這類問題:

我去,Linux 系统 CPU 100% 打满了!

可下結論:是系統中一個時間工具類別方法的執行cpu佔比較高,定位到具體方法後,查看程式碼邏輯是否有效能問題。

※ 如果線上問題比較緊急,可以省略 2.1、2.2 直接執行 2.3,這裡從多角度剖析只是為了給大家呈現一個完整的分析思路。

3、根因分析

#經過前面的分析與排查,最後定位到一個時間工具類別的問題,造成了伺服器負載以及cpu使用率的過高。

  • 異常方法邏輯:是把時間戳轉成對應的具體的日期時間格式;
  • 上層呼叫:計算當天凌晨至目前時間所有秒數,轉換成對應的格式放入到set中傳回結果;
  • 邏輯層:對應的是資料平台即時報表的查詢邏輯,即時報表會按照固定的時間間隔來,並且在一次查詢中有多次(n次)方法呼叫。

那麼可以得到結論,如果現在時間是當天上午10點,一次查詢的計算次數就是106060n次=36,000n次計算,而且隨著時間成長,越接近午夜單次查詢次數會線性增加。由於即時查詢、即時警報等模組大量的查詢請求都需要多次呼叫該方法,導致了大量CPU資源的佔用與浪費。

4、解決方案

定位到問題之後,首先考慮是要減少計算次數,優化異常方法。排查後發現,在邏輯層使用時,並沒有使用此方法傳回的set集合中的內容,而是簡單的用set的size數值。確認邏輯後,透過新方法簡化計算(當前秒數-當天凌晨的秒數),取代呼叫的方法,解決計算過多的問題。上線後觀察伺服器負載和cpu使用率,對比異常時間段下降了30倍,恢復至正常狀態,至此問題得已解決。

![昨天下午,我突然收到了維運部門的郵件警報,顯示數據平台伺服器的CPU利用率高達98.94%。最近一段時間,這個利用率持續在70%以上。乍一看,似乎是硬體資源到達了瓶頸,需要擴容。但仔細思考後,我發現我們的業務系統並不是一個高並發或CPU密集的應用。這個利用率實在太誇張了,硬體瓶頸不可能這麼快就到達。肯定是某處的業務代碼邏輯出現了問題。

2、檢查思路

##2.1 定位高負載程序 pid

先登入伺服器使用top指令確認伺服器的具體情況,根據具體情況再進行分析判斷。

我去,Linux 系统 CPU 100% 打满了!

透過觀察load average,以及負載評判標準(8核心),可以確認伺服器存在負載較高的情況;

我去,Linux 系统 CPU 100% 打满了!

觀察各個進程資源使用情況,可以看出進程id為682的進程,有著較高的CPU佔比

2.2 定位具體的例外業務

這裡咱們可以使用 pwdx 指令根據 pid 找到業務進程路徑,進而定位到負責人和專案:

我去,Linux 系统 CPU 100% 打满了!

可下結論:此進程對應的就是資料平台的web服務。

2.3 定位例外執行緒及具體程式碼行

傳統的方案一般是4步驟:

1、top oder by with P:1040 // 先依行程負載排序找到 maxLoad(pid)

2、top -Hp 進程PID:1073 // 找到相關負載 執行緒PID

3、printf “0x%x ”線程PID: 0x431 // 將線程PID轉換為 16進制,為後面查找 jstack 日誌做準備

4、jstack 程序PID | vim /十六進位執行緒PID – // 例如:jstack 1040|vim /0x431 –

但對於線上問題定位來說,分秒必爭,上面的4 步還是太繁瑣耗時了,之前介紹過淘寶的oldratlee 同學就將上面的流程封裝為了一個工具:show-busy-java-threads. sh,可以很方便的定位線上的這類問題:

我去,Linux 系统 CPU 100% 打满了!

可下結論:是系統中一個時間工具類別方法的執行cpu佔比較高,定位到具體方法後,查看程式碼邏輯是否有效能問題。

※ 如果線上問題比較緊急,可以省略 2.1、2.2 直接執行 2.3,這裡從多角度剖析只是為了給大家呈現一個完整的分析思路。

3、根因分析

#經過前面的分析與排查,最後定位到一個時間工具類別的問題,造成了伺服器負載以及cpu使用率的過高。

  • 異常方法邏輯:是把時間戳轉成對應的具體的日期時間格式;
  • 上層呼叫:計算當天凌晨至目前時間所有秒數,轉換成對應的格式放入到set中傳回結果;
  • 邏輯層:對應的是資料平台即時報表的查詢邏輯,即時報表會按照固定的時間間隔來,並且在一次查詢中有多次(n次)方法呼叫。

那麼可以得到結論,如果現在時間是當天上午10點,一次查詢的計算次數就是106060n次=36,000n次計算,而且隨著時間成長,越接近午夜單次查詢次數會線性增加。由於即時查詢、即時警報等模組大量的查詢請求都需要多次呼叫該方法,導致了大量CPU資源的佔用與浪費。

4、解決方案

定位到問題之後,首先考慮是要減少計算次數,優化異常方法。排查後發現,在邏輯層使用時,並沒有使用此方法傳回的set集合中的內容,而是簡單的用set的size數值。確認邏輯後,透過新方法簡化計算(當前秒數-當天凌晨的秒數),取代呼叫的方法,解決計算過多的問題。上線後觀察伺服器負載和cpu使用率,對比異常時間段下降了30倍,恢復至正常狀態,至此問題得已解決。

我去,Linux 系统 CPU 100% 打满了!

5、總結

  • # 在編碼的過程中,除了實現業務的邏輯,也要注重程式碼效能的最佳化。一個業務需求,能實現,和能實現的更有效率、更優雅其實是兩種截然不同的工程師能力和境界的體現,而後者也是工程師的核心競爭力。
  • 在程式碼寫完成之後,多做 review,多思考是不是可以用更好的方式來實現。
  • 線上問題不放過任何一個小細節!細節是魔鬼,技術的同學需要有刨根問題的求知慾和追求卓越的精神,只有這樣,才能不斷的成長和提升。

以上是我去,Linux 系統 CPU 100% 打滿了!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:良许Linux教程网。如有侵權,請聯絡admin@php.cn刪除
Linux軟件的未來:Flatpak和Snap會替換本機桌面應用程序嗎?Linux軟件的未來:Flatpak和Snap會替換本機桌面應用程序嗎?Apr 25, 2025 am 09:10 AM

多年來,Linux軟件分佈依賴於DEB和RPM等本地格式,並深深地根深蒂固。 但是,Flatpak和Snap已經出現,有望成為應用程序包裝的通用方法。 本文考試

Linux和Windows處理設備驅動程序的區別有什麼區別?Linux和Windows處理設備驅動程序的區別有什麼區別?Apr 25, 2025 am 12:13 AM

Linux和Windows在處理設備驅動程序上的差異主要體現在驅動管理的靈活性和開發環境上。 1.Linux採用模塊化設計,驅動可以動態加載和卸載,開發者需深入理解內核機制。 2.Windows依賴微軟生態,驅動需通過WDK開發並簽名認證,開發相對複雜但保證了系統的穩定性和安全性。

比較和對比Linux和Windows的安全模型。比較和對比Linux和Windows的安全模型。Apr 24, 2025 am 12:03 AM

Linux和Windows的安全模型各有優勢。 Linux提供靈活性和可定制性,通過用戶權限、文件系統權限和SELinux/AppArmor實現安全。 Windows則注重用戶友好性,依賴WindowsDefender、UAC、防火牆和BitLocker保障安全。

Linux和Windows之間的硬件兼容性有何不同?Linux和Windows之間的硬件兼容性有何不同?Apr 23, 2025 am 12:15 AM

Linux和Windows在硬件兼容性上不同:Windows有廣泛的驅動程序支持,Linux依賴社區和廠商。解決Linux兼容性問題可通過手動編譯驅動,如克隆RTL8188EU驅動倉庫、編譯和安裝;Windows用戶需管理驅動程序以優化性能。

Linux和Windows之間虛擬化支持有哪些差異?Linux和Windows之間虛擬化支持有哪些差異?Apr 22, 2025 pm 06:09 PM

Linux和Windows在虛擬化支持上的主要區別在於:1)Linux提供KVM和Xen,性能和靈活性突出,適合高定制環境;2)Windows通過Hyper-V支持虛擬化,界面友好,與Microsoft生態系統緊密集成,適合依賴Microsoft軟件的企業。

Linux系統管理員的主要任務是什麼?Linux系統管理員的主要任務是什麼?Apr 19, 2025 am 12:23 AM

Linux系統管理員的主要任務包括系統監控與性能調優、用戶管理、軟件包管理、安全管理與備份、故障排查與解決、性能優化與最佳實踐。 1.使用top、htop等工具監控系統性能,並進行調優。 2.通過useradd等命令管理用戶賬戶和權限。 3.利用apt、yum管理軟件包,確保系統更新和安全。 4.配置防火牆、監控日誌、進行數據備份以確保系統安全。 5.通過日誌分析和工具使用進行故障排查和解決。 6.優化內核參數和應用配置,遵循最佳實踐提升系統性能和穩定性。

很難學習Linux嗎?很難學習Linux嗎?Apr 18, 2025 am 12:23 AM

學習Linux並不難。 1.Linux是一個開源操作系統,基於Unix,廣泛應用於服務器、嵌入式系統和個人電腦。 2.理解文件系統和權限管理是關鍵,文件系統是層次化的,權限包括讀、寫和執行。 3.包管理系統如apt和dnf使得軟件管理方便。 4.進程管理通過ps和top命令實現。 5.從基本命令如mkdir、cd、touch和nano開始學習,再嘗試高級用法如shell腳本和文本處理。 6.常見錯誤如權限問題可以通過sudo和chmod解決。 7.性能優化建議包括使用htop監控資源、清理不必要文件和使用sy

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。