Linux高負載排查最佳實踐

在Linux系統中,經常會因為負載過高導致各種性能問題。那么如何進行排查,其實是有跡可循,而且模式固定。

本次就來分享一下,CPU占用過高、磁盤IO占用過高的排查方法。

還是那句話,以最佳實踐入手,真傳一句話,假傳萬卷書。這就是工作中學習和讀死書的區別與真相。

CPU占用率過高問題排查方法

  1. 使用mpstat查看cpu使用情況。

# mpstat 是一款 CPU 性能指標實時展示工具# 能展示每個 CPU 核的資源視情況,同時還能將資源使用情況進行匯總展示# 如果CPU0 的 %idle 已經為 0 ,說明此核已經非常繁忙
# 打印所有cpu核的情況(ALL),每隔1s打印一次,共打印5次mpstat -P ALL 1 5

圖片

mpstat命令執行結果

從上面可以看到,服務器有 2 個 CPU(分別為0、1),每個 CPU 核的資源使用情況,也能很清晰的展示。

當服務器有特別多的 CPU 核,有時候看 CPU 匯總信息,發現 CPU 的 idle 很高,但是上面跑的應用程序卻很慢,這個時候就需要看看每個核的資源試用情況了。

重點關注指標:

* %iowait:代表在監控的時間間隔內,等待硬盤 I/O 的時間,如果此值比較高,說明 IO 非常繁忙* %idle:代表在監控的時間間隔內,CPU 閑置時間所占用的時間百分比,此值越大,代表 CPU 越空閑

2. 使用pidstat查看消耗cpu資源的進程。

# 參數-u表明監控cpu使用情況# 參數2表示每隔2s輸出一次,會循環輸出pidstat -u 2
Linux 3.10.0-957.el7.x86_64 (mysql)     12/30/2020      _x86_64_        (1 CPU)
04:57:41 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command04:57:43 PM  2001     10733    0.00   91.44    0.00   91.44     0  mysqld04:57:43 PM  2001     12635    0.00    0.53    0.00    0.53     0  pidstat

從上面的結果可以看到,導致 CPU0 資源被耗盡的元兇是 mysqld 進程,占用91.44%,需要定位具體線程。

pidstat 是一個非常強大的性能指標監控工具,建議掌握,此工具可以用來監控全部或指定進程的 CPU、mem、線程,IO 的資源的使用情況。

# 參數-d表示監控進程對磁盤的使用情況pidstat -d 2
Linux 3.10.0-957.el7.x86_64 (mysql) 12/30/2020 _x86_64_ (1 CPU)
03:57:47 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command03:57:49 PM 2001 10733 139.13 0.00 0.00 mysqld
03:57:49 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command03:57:51 PM 2001 10733 34034.78 0.00 0.00 mysqld

可以查看指定進程的線程 CPU 資源使用情況。

# 參數 -t,可以獲取指定進程的線程的 CPU 使用情況pidstat -t 2 -p 10733

3. 使用 pidstat 查看消耗 CPU 資源的線程

pidstat -t 2 -p 10733
Linux 3.10.0-957.el7.x86_64 (mysql)     12/30/2020      _x86_64_        (1 CPU)
05:00:53 PM   UID      TGID       TID    %usr %system  %guest    %CPU   CPU  Command05:00:55 PM  2001     10733         -    0.00   91.30    0.00   91.30     0  mysqld05:00:55 PM  2001         -     10733    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10734    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10735    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10736    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10737    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10738    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10739    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10740    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10741    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10742    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10743    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10744    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10745    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10747    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10748    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10749    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10750    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10751    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10752    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10753    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10754    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10755    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10756    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10757    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10758    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10762    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10763    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10764    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10766    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10796    0.00    0.00    0.00    0.00     0  |__mysqld05:00:55 PM  2001         -     10850   15.22   75.54    0.00   90.76     0  |__mysqld

可以很清楚看到是 10850 線程消耗了 CPU 資源,剩下的就根據操作系統的里線程 ID,去 MySQL 數據庫里排查,此線程正在執行的操作。

4. MySQL中查詢線程對應的具體SQL

-- 在 MySQL 5.7 版本,官方增加了一個視圖,專門記錄操作系統線程和數據庫進程之間關聯視圖。-- 前面定位的最消耗 IO 和 CPU 的線程 ID 為 10850:select PROCESSLIST_ID,THREAD_OS_ID,PROCESSLIST_USER,PROCESSLIST_HOST,PROCESSLIST_DB,PROCESSLIST_COMMAND,PROCESSLIST_INFO from performance_schema.threads where THREAD_OS_ID=10850;

磁盤IO占用率過高排查方法

  1. 使用 iostat 查看磁盤 IO 的讀寫情況。

#?每隔1s輸出一次iostat?-mxt?1# 每隔1s輸出一次,共輸出2次iostat -mxt 1 2

圖片

iostat命令輸出

如果看到 %util 比較高,說明磁盤設備繁忙,需要定位到底是那個操作系統進程導致的大量讀操作。

iostat 是一款用于監控系統設備的 IO 負載情況的工具,在運維工作中會被高頻使用的工具之一。

# 常用參數介紹* -m:輸出結果以兆為單位顯示* -t:輸出結果中顯示時間戳* -x:顯示和 IO 相關的擴展數據,包括每個設備的讀寫、合并讀、合并寫、讀寫等待情況# 輸出指標介紹* rrqm/s:每秒合并讀的條目* wrqm/s:每秒合并寫的條目* r/s:每秒 read I/O 設備次數* w/s:每秒 write I/O 設備次數* rMB/s: 每秒讀取 M 字節數* wMB/s:每秒寫 M 字節數* avgrq-sz:每次設備 I/O 操作平均數據大小* avgqu-sz:I/O 隊列平均長度* await:每次設備 I/O 操作的平均等待時間,單位毫秒* r_await:每次讀 I/O 操作的平均等待時間,單位毫秒* w_await:每次寫 I/O 操作的平均等待時間,單位毫秒* svctm:每次設備 I/O 操作的平均服務時間,單位毫秒* %util:每秒中有百分之多少的時間用于 I/O 操作,此值越高,代表著磁盤越繁忙

2. 使用 iotop 定位最消耗 IO 資源的元兇

iotop -p 10733

圖片

可以看到10850 線程大量讀操作,導致 IO 資源被消耗殆盡。

iotop 是一款用于監視磁盤設備 I/O 使用狀況的工具,可監測到具體的線程使用的磁盤 IO 的信息,功能也是非常強大,可惜需要 root 權限,普通用戶沒有執行權限,所以一般會用 pidstat 工具來替代。

參數介紹:
-P:只顯示進程 IO 讀寫情況 -p:監控指定進程的 IO 讀寫情況 -u:指定用戶進程的 IO 讀寫情況
1. 查看指定用戶的的進程iotop -u mysql -P
2. 查看指定用戶的進程和線程 IO 讀寫情況iotop -u mysql
3. 查看指定進程的線程 IO 讀寫情況iotop -p 10733

3. 根據線程定位具體SQL。

select PROCESSLIST_ID,THREAD_OS_ID,PROCESSLIST_USER,PROCESSLIST_HOST,PROCESSLIST_DB,PROCESSLIST_COMMAND,PROCESSLIST_INFO from performance_schema.threads where THREAD_OS_ID=10850;

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

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

相關文章

1 開源鴻蒙OpenHarmony niobe407 STM32F407IGT6芯片輕型系統全量源碼4.1版本下載流程

開源鴻蒙OpenHarmony niobe407 STM32F407IGT6芯片輕型系統全量源碼4.1版本下載流程 作者將狼才鯨日期2024-02-27 一、前景提要 如果通過DevEco Marketplace網站獲取下載源碼的話,不全,有些板子下不到;OpenHarmony開發板列表,官方…

數據庫-第二/三章 關系數據庫和標準語言SQL【期末復習|考研復習】

前言 總結整理不易,希望大家點贊收藏。 給大家整理了一下計數據庫系統概論中的重點概念,以供大家期末復習和考研復習的時候使用。 參考資料是王珊老師和薩師煊老師的數據庫系統概論(第五版)。 文章目錄 前言第二、三章 關系數據庫和標準語言SQL2.1 關系2…

JVM原理-基礎篇

Java虛擬機(JVM, Java Virtual Machine)是運行Java應用程序的核心組件,它是一個抽象化的計算機系統模型,為Java字節碼提供運行環境。JVM的主要功能包括:類加載機制、內存管理、垃圾回收、指令解釋與執行、異常處理與安…

React react.fragment和<>的使用及區別

React一個常用的模式是組件返回多個元素。Fragment可以為你的子元素分組而不需要在DOM上為它們添加額外的節點。 Fragment 使用 render() {return (<React.Fragment> <ChildA /> <ChildB /> <ChildC /> </React.Fragment> );}短語法使用 這里…

虛擬機內存不夠用了?全流程操作Look一下?

虛擬機信息&#xff1a;操作系統&#xff1a;CentOS Linux 7 (Core)&#xff0c;用的是VMware Workstation 16 Pro 版本16.2.3 build-19376536&#xff1b;我的主機 Windows 10 Education, 64-bit (Build 22000.1817) 10.0.22000 前言&#xff1a;虛擬機用久了就會出現內存不足…

代碼隨想錄算法訓練營Day37|738.單調遞增的數字、968.監控二叉樹

738.單調遞增的數字 題目鏈接&#xff1a;738.單調遞增的數字 文檔鏈接&#xff1a;738.單調遞增的數字 視頻鏈接&#xff1a;貪心算法&#xff0c;思路不難想&#xff0c;但代碼不好寫&#xff01;LeetCode:738.單調自增的數字 C實現 class Solution { public:int monotoneIn…

Rocky Linux 安裝部署 Zabbix 6.4

一、Zabbix的簡介 Zabbix是一種開源的企業級監控解決方案&#xff0c;用于實時監測服務器、網絡設備和應用程序的性能和可用性。它提供了強大的數據收集、處理和可視化功能&#xff0c;同時支持事件觸發、報警通知和自動化任務等功能。Zabbix易于安裝和配置&#xff0c;支持跨平…

6、Redis-KV設計、全局命令和安全性

目錄 一、value設計 二、Key設計 三、全局命令——針對所有key 四、安全性 一、value設計 ①是否需要排序&#xff1f;需要&#xff1a;Zset ②需要緩存的數據是單個值還是多個值&#xff1f; 單個值&#xff1a;簡單值---String&#xff1b;對象值---Hash多個值&#x…

【前端素材】推薦優質后臺管理系統網頁Hyper平臺模板(附源碼)

一、需求分析 1、系統定義 后臺管理系統是一種用于管理和控制網站、應用程序或系統的管理界面。它通常被設計用來讓網站或應用程序的管理員或運營人員管理內容、用戶、數據以及其他相關功能。后臺管理系統是一種用于管理網站、應用程序或系統的工具&#xff0c;通常由管理員使…

【AIGC】OpenAI推出王炸級模型sora,顛覆AI視頻行業(2024)

對于OpenAI推出的Sora模型&#xff0c;我們可以進一步探討其可能的技術細節、潛在應用以及對AI視頻行業的影響。 點擊以下任一云產品鏈接&#xff0c;跳轉后登錄&#xff0c;自動享有所有云產品優惠權益&#xff1a; 經過筆者親測&#xff0c;強烈推薦騰訊云輕量應用服務器作…

【分類討論】【割點】1568. 使陸地分離的最少天數

作者推薦 動態規劃的時間復雜度優化 本文涉及知識點 分類討論 割點 LeetCode1568. 使陸地分離的最少天數 給你一個大小為 m x n &#xff0c;由若干 0 和 1 組成的二維網格 grid &#xff0c;其中 1 表示陸地&#xff0c; 0 表示水。島嶼 由水平方向或豎直方向上相鄰的 1 …

接口詳細說明

接口概述 接口也是一種規范 接口的定義與特點 接口的格式如下&#xff1a; //接口用關鍵字interface來定義 public interface 接口名 {// 常量// 抽象方法 } JDK8之前接口中只能是抽象方法和常量&#xff0c;沒有其他成分了。 接口不能實例化。 接口中的成員都是public修…

webpack打包一個文件,做了哪些事情

用webpack打包一個文件&#xff0c;在webpack內部做了哪些事情&#xff0c;用代碼詳細介紹一下 當你使用 Webpack 打包一個文件時&#xff0c;Webpack 內部會進行一系列操作來實現模塊加載、代碼轉換、依賴分析、模塊打包等功能。以下是使用 Webpack 打包一個簡單 JavaScript …

svn介紹 4.0

一、svn介紹&#xff08;版本控制工具&#xff09; 1、svn的定義&#xff1a; svn是一個開放源代碼的版本控制系統&#xff0c;通過采用分支管理系統的高效管理&#xff0c;簡而言之就是用于多個人共同開發同一個項目&#xff0c;實現共享資源&#xff0c;實現最終集中式個管…

電腦數據丟失是什么原因 易我數據恢復軟件下載 easyrecovery數據恢復軟件下載 電腦數據刪除了怎么恢復 電腦數據庫損壞了怎么找回

目錄 一、電腦數據丟失是什么原因 二、電腦數據丟失如何恢復 三、EasyRecovery恢復電腦數據的方法介紹 電腦是我們大家熟悉并且常用的數據存儲設備&#xff0c;也是綜合性非常強的數據處理設備。對于電腦設備來講&#xff0c;最主要的數據存儲介質是硬盤&#xff0c;電腦硬…

CMU15445實驗總結(Spring 2023)

CMU15445實驗總結(Spring 2023) 背景 菜鳥博主是2024屆畢業生&#xff0c;學歷背景太差&#xff0c;導致23年秋招無果&#xff0c;準備奮戰春招。此前有讀過LevelDB源碼的經歷&#xff0c;對數據庫的了解也僅限于LevelDB。奔著”有對比才能學的深“的理念&#xff0c;以及緩解…

linux系統Jenkins工具配置webhook自動部署

Jenkins工具webhook自動部署 webhook自動部署webhook的意義操作流程jenkins頁面操作gitlab頁面操作 webhook自動部署 webhook的意義 自動化部署&#xff1a;Webhook 可以在代碼提交、合并請求或其他特定事件發生時自動觸發 Jenkins 構建和部署任務&#xff0c;從而實現自動化…

C#,K中心問題(K-centers Problem)的算法與源代碼

1 K中心問題&#xff08;K-centers Problem&#xff09; k-centers problem: 尋找k個半徑越小越好的center以覆蓋所有的點。 比如&#xff1a;給定n個城市和每對城市之間的距離&#xff0c;選擇k個城市放置倉庫&#xff08;或ATM或云服務器&#xff09;&#xff0c;以使城市…

【JavaEE進階】 Spring AOP源碼簡單剖析

文章目錄 &#x1f343;前言&#x1f340;Spring AOP源碼剖析?總結 &#x1f343;前言 前面的博客中&#xff0c;博主對代理模式進行了一個簡單的講解&#xff0c;接下來博主將對Spring AOP源碼進行簡單剖析&#xff0c;使我們對Spring AOP了解的更加深刻。 &#x1f340;Sp…

leetcode 簡單

1. 兩數之和 兩數之和 方法1&#xff1a;暴力枚舉 兩次for 循環&#xff0c;記錄索引和值&#xff0c;找到合適的值然后返回 方法2&#xff1a;使用哈希表 第一次for循環的時候&#xff0c;就可以使用哈希表記錄key的value&#xff0c;可以實現時間復雜度是1&#xff0c;要分…