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