shell腳本實現(xiàn)一鍵獲取linux內(nèi)存/cpu/磁盤IO信息
前言
在日常的 Linux 系統(tǒng)維護(hù)工作中,快速獲取系統(tǒng)的狀態(tài)信息是非常重要的。特別是在服務(wù)器出現(xiàn)問題時,能夠一鍵獲取 CPU 使用率、內(nèi)存使用情況、磁盤 I/O 讀寫等關(guān)鍵指標(biāo),對于診斷問題非常有幫助。今天,我們就來編寫一個簡單卻功能強(qiáng)大的 Shell 腳本來獲取linux系統(tǒng)CPU、內(nèi)存、磁盤IO等信息。
了解所需工具
在 Linux 系統(tǒng)中,有許多工具可以幫助我們獲取系統(tǒng)的運(yùn)行狀態(tài),比如 top
、free
、iostat
、df
、ps
等。這些工具都能提供豐富的信息,但是我們需要從中提取對我們有用的部分。
完整代碼
#!/bin/bash # 獲取要監(jiān)控的本地服務(wù)器IP地址 IP=`ifconfig | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2}'` echo "IP地址:"$IP # 獲取cpu總核數(shù) cpu_num=`grep -c "model name" /proc/cpuinfo` echo "cpu總核數(shù):"$cpu_num # 1、獲取CPU利用率 ################################################ #us 用戶空間占用CPU百分比 #sy 內(nèi)核空間占用CPU百分比 #ni 用戶進(jìn)程空間內(nèi)改變過優(yōu)先級的進(jìn)程占用CPU百分比 #id 空閑CPU百分比 #wa 等待輸入輸出的CPU時間百分比 #hi 硬件中斷 #si 軟件中斷 ################################################# # 獲取用戶空間占用CPU百分比 cpu_user=`top -b -n 1 | grep Cpu | awk '{print $2}' | cut -f 1 -d "%"` echo "用戶空間占用CPU百分比:"$cpu_user # 獲取內(nèi)核空間占用CPU百分比 cpu_system=`top -b -n 1 | grep Cpu | awk '{print $4}' | cut -f 1 -d "%"` echo "內(nèi)核空間占用CPU百分比:"$cpu_system # 獲取空閑CPU百分比 cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}' | cut -f 1 -d "%"` echo "空閑CPU百分比:"$cpu_idle # 獲取等待輸入輸出占CPU百分比 cpu_iowait=`top -b -n 1 | grep Cpu | awk '{print $10}' | cut -f 1 -d "%"` echo "等待輸入輸出占CPU百分比:"$cpu_iowait #2、獲取CPU上下文切換和中斷次數(shù) # 獲取CPU中斷次數(shù) cpu_interrupt=`vmstat -n 1 1 | sed -n 3p | awk '{print $11}'` echo "CPU中斷次數(shù):"$cpu_interrupt # 獲取CPU上下文切換次數(shù) cpu_context_switch=`vmstat -n 1 1 | sed -n 3p | awk '{print $12}'` echo "CPU上下文切換次數(shù):"$cpu_context_switch #3、獲取CPU負(fù)載信息 # 獲取CPU15分鐘前到現(xiàn)在的負(fù)載平均值 cpu_load_15min=`uptime | awk '{print $11}' | cut -f 1 -d ','` echo "CPU 15分鐘前到現(xiàn)在的負(fù)載平均值:"$cpu_load_15min # 獲取CPU5分鐘前到現(xiàn)在的負(fù)載平均值 cpu_load_5min=`uptime | awk '{print $10}' | cut -f 1 -d ','` echo "CPU 5分鐘前到現(xiàn)在的負(fù)載平均值:"$cpu_load_5min # 獲取CPU1分鐘前到現(xiàn)在的負(fù)載平均值 cpu_load_1min=`uptime | awk '{print $9}' | cut -f 1 -d ','` echo "CPU 1分鐘前到現(xiàn)在的負(fù)載平均值:"$cpu_load_1min # 獲取任務(wù)隊列(就緒狀態(tài)等待的進(jìn)程數(shù)) cpu_task_length=`vmstat -n 1 1 | sed -n 3p | awk '{print $1}'` echo "CPU任務(wù)隊列長度:"$cpu_task_length #4、獲取內(nèi)存信息 # 獲取物理內(nèi)存總量 mem_total=`free | grep Mem | awk '{print $2}'` echo "物理內(nèi)存總量:"$mem_total # 獲取操作系統(tǒng)已使用內(nèi)存總量 mem_sys_used=`free | grep Mem | awk '{print $3}'` echo "已使用內(nèi)存總量(操作系統(tǒng)):"$mem_sys_used # 獲取操作系統(tǒng)未使用內(nèi)存總量 mem_sys_free=`free | grep Mem | awk '{print $4}'` echo "剩余內(nèi)存總量(操作系統(tǒng)):"$mem_sys_free # 獲取應(yīng)用程序已使用的內(nèi)存總量 mem_user_used=`free | sed -n 3p | awk '{print $3}'` echo "已使用內(nèi)存總量(應(yīng)用程序):"$mem_user_used # 獲取應(yīng)用程序未使用內(nèi)存總量 mem_user_free=`free | sed -n 3p | awk '{print $4}'` echo "剩余內(nèi)存總量(應(yīng)用程序):"$mem_user_free # 獲取交換分區(qū)總大小 mem_swap_total=`free | grep Swap | awk '{print $2}'` echo "交換分區(qū)總大?。?$mem_swap_total # 獲取已使用交換分區(qū)大小 mem_swap_used=`free | grep Swap | awk '{print $3}'` echo "已使用交換分區(qū)大小:"$mem_swap_used # 獲取剩余交換分區(qū)大小 mem_swap_free=`free | grep Swap | awk '{print $4}'` echo "剩余交換分區(qū)大?。?$mem_swap_free #5、獲取磁盤I/O統(tǒng)計信息 echo "指定設(shè)備(/dev/sda)的統(tǒng)計信息" # 每秒向設(shè)備發(fā)起的讀請求次數(shù) disk_sda_rs=`iostat -kx | grep sda| awk '{print $4}'` echo "每秒向設(shè)備發(fā)起的讀請求次數(shù):"$disk_sda_rs # 每秒向設(shè)備發(fā)起的寫請求次數(shù) disk_sda_ws=`iostat -kx | grep sda| awk '{print $5}'` echo "每秒向設(shè)備發(fā)起的寫請求次數(shù):"$disk_sda_ws # 向設(shè)備發(fā)起的I/O請求隊列長度平均值 disk_sda_avgqu_sz=`iostat -kx | grep sda| awk '{print $9}'` echo "向設(shè)備發(fā)起的I/O請求隊列長度平均值"$disk_sda_avgqu_sz # 每次向設(shè)備發(fā)起的I/O請求平均時間 disk_sda_await=`iostat -kx | grep sda| awk '{print $10}'` echo "每次向設(shè)備發(fā)起的I/O請求平均時間:"$disk_sda_await # 向設(shè)備發(fā)起的I/O服務(wù)時間均值 disk_sda_svctm=`iostat -kx | grep sda| awk '{print $11}'` echo "向設(shè)備發(fā)起的I/O服務(wù)時間均值:"$disk_sda_svctm # 向設(shè)備發(fā)起I/O請求的CPU時間百分占比 disk_sda_util=`iostat -kx | grep sda| awk '{print $12}'` echo "向設(shè)備發(fā)起I/O請求的CPU時間百分占比:"$disk_sda_util
深度解析:腳本背后的原理
1. 獲取 IP 地址
ifconfig 命令用于顯示所有網(wǎng)絡(luò)接口的配置信息。通過 grep 和 awk 等工具,我們可以從中提取出 IP 地址信息。
2. 獲取 CPU 總核數(shù)
/proc/cpuinfo 文件包含了關(guān)于 CPU 的詳細(xì)信息,其中 model name 字段的數(shù)量即為 CPU 總核數(shù)。
3. 獲取 CPU 使用率
top 命令是一個動態(tài)顯示系統(tǒng)進(jìn)程狀態(tài)的工具,我們可以利用它來獲取 CPU 的使用率。通過管道命令 grep、sed 和 awk,我們可以精確地提取出 CPU 使用率的數(shù)據(jù)。
4. 獲取內(nèi)存使用情況
free 命令用于顯示系統(tǒng)自由內(nèi)存的狀態(tài),通過 -m 參數(shù)可以獲取以 MB 為單位的內(nèi)存信息。
5. 獲取磁盤 I/O 信息
iostat 命令用于報告 CPU 使用情況和磁盤 I/O 統(tǒng)計信息。通過 -d 參數(shù)可以獲取磁盤設(shè)備的詳細(xì)信息,-x 參數(shù)則提供了額外的 I/O 統(tǒng)計信息。
執(zhí)行結(jié)果:
到此這篇關(guān)于shell腳本實現(xiàn)一鍵獲取linux內(nèi)存/cpu/磁盤IO信息的文章就介紹到這了,更多相關(guān)shell獲取linux信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Shell腳本對文件中的行、單詞、字符進(jìn)行迭代輸出示例
這篇文章主要介紹了Shell腳本對文件中的行、單詞、字符進(jìn)行迭代輸出示例,本文講解了迭代文件中的每一行、迭代一行中的每一個單詞、迭代一個單詞中的每一個字符等內(nèi)容,需要的朋友可以參考下2014-11-11shell腳本配合zabbix實現(xiàn)tomcat的故障自愈功能
這篇文章主要介紹了shell腳本配合zabbix實現(xiàn)tomcat的故障自愈,服務(wù)實現(xiàn)自愈的方式有通過shell腳本+定時任務(wù)的方式,藍(lán)鯨Pass故障自愈平臺,shell腳本+zabbix觸發(fā)器動作,本文給大家詳細(xì)介紹,需要的朋友可以參考下2022-03-03centos 設(shè)置定時任務(wù)執(zhí)行指定腳本的方法
下面小編就為大家?guī)硪黄猚entos 設(shè)置定時任務(wù)執(zhí)行指定腳本的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02Linux tar 命令出現(xiàn) Cowardly refusing to create an empty archive
這篇文章主要介紹了Linux tar 命令出現(xiàn) Cowardly refusing to create an empty archive 錯誤解決辦法的相關(guān)資料,需要的朋友可以參考下2017-04-04