服务器利用率shell脚本编写


崧峻
原创
发布时间: 2025-06-21 14:23:18 | 阅读数 0收藏数 0评论数 0
封面
一键查看服务器利用率通常是指通过自动化工具快速获取服务器的关键性能指标,如CPU使用率、内存占用、磁盘I/O等。这可以帮助管理员实时监控服务器健康状况并及时发现问题。
1

创建脚本

输入命令

vim serverUtilizationRate.sh

创建一个shell文件

2

cpu使用率

以下是cpu使用率的函数代码


function cpu(){
util=$(vmstat | awk '{if(NR==3)print $13+$14}')
iowait=$(vmstat | awk '{if(NR==3)print $16}')
echo "CPU -使用率:${util}% ,等待磁盘IO相应使用率:${iowait}:${iowait}%"
}


  1. util=$(vmstat | awk '{if(NR==3)print $13+$14}'): 使用awk过滤vmstat命令的输出,当NR(记录行数)等于3时(通常这是进程状态部分),选择第13列和第14列(通常是用户空间和系统空间的CPU使用时间总和),并将它们相加得到总的CPU使用百分比,赋值给变量util
  2. iowait=$(vmstat | awk '{if(NR==3)print $16}'): 同样地,选择第16列(表示I/O等待时间),将其赋值给iowait

最后,函数打印出两个结果:CPU使用率(以百分比形式表示)和I/O等待使用的百分比。echo命令用于输出字符串,其中包含占位符${util}${iowait},它们会根据之前计算的结果动态替换。


3

内存利用率

function memory (){
total=`free -m |awk '{if(NR==2)printf "%.1f",$2/1024}'`
used=`free -m |awk '{if(NR==2) printf "%.1f",($2-$NF)/1024}'`
available=`free -m |awk '{if(NR==2) printf "%.1f",$NF/1024}'`
echo "内存 - 总大小: ${total}G , 使用: ${used}G , 剩余: ${available}G"
}


利用free -m命令获取内存使用报告,并使用awk解析每一行的数据。以下是该函数各部分的作用:

  1. total=: 计算总内存(以GB为单位)。NR==2条件判断确保获取的是第二行(总信息行),然后将第二大字段除以1024(MB转换为GB),保留一位小数后赋值给total
  2. used=: 计算已使用的内存(以GB为单位)。同样从第二行数据出发,减去最后一个字段(即剩余内存),再除以1024,保留一位小数后赋值给used
  3. available=: 获取可用内存(空闲+缓冲区+交换分区)(以GB为单位)。直接取最后一个字段(剩余内存),除以1024后赋值给available
  4. 最后,函数通过echo命令输出三个内存状态:总大小、已使用量和剩余量。


4

硬盘利用率

硬盘利用率代码

disk(){
fs=$(df -h |awk '/^\/dev/{print $1}')
for p in $fs; do
mounted=$(df -h |awk '$1=="'$p'"{print $NF}')
size=$(df -h |awk '$1=="'$p'"{print $2}')
used=$(df -h |awk '$1=="'$p'"{print $3}')
used_percent=$(df -h |awk '$1=="'$p'"{print $5}')
echo "硬盘 - 挂载点: $mounted , 总大小: $size , 使用: $used , 使用率: $used_percent"
done
}


  1. fs=$(df -h |awk '/^\/dev/{print $1}'): 运行df -h命令,筛选出所有设备文件名(通常代表磁盘),并将结果存储在变量fs中。
  2. 遍历每个设备文件名 $fs 中的每一个磁盘:for p in $fs; do ... done
  3. mounted=$(df -h |awk '$1=="'$p'"{print $NF}'): 使用awk过滤出对应磁盘$p的挂载点,将其存储在mounted变量中。
  4. size=$(df -h |awk '$1=="'$p'"{print $2}'): 计算磁盘的总容量,存放在size变量中。
  5. used=$(df -h |awk '$1=="'$p'"{print $3}'): 获取已使用的磁盘空间,存放在used变量中。
  6. used_percent=$(df -h |awk '$1=="'$p'"{print $5}'): 计算并获取磁盘使用率,存储在used_percent变量中。
  7. 最后,函数打印出每个磁盘的详细信息,包括挂载点、总大小、已使用空间及使用百分比。


5

TCP连接状态

function tcp_status() {
summary=$(ss -antp |awk '{status[$1]++}END{for(i in status) printf i":"status[i]" "}')
echo "TCP连接状态 - $summary"
}


  1. summary=$(ss -antp |awk '{status[$1]++}END{...}): ss -antp命令显示所有活动的TCP连接,包括本地地址(源)、远程地址(目的)、状态等信息。awk脚本在此处按连接的本地端口号将数据分组(status[$1]++),其中$1代表第一个字段,通常是端口号。每增加一次,相应端口的状态计数就会递增。
  2. END{for(i in status) printf i":"status[i]" "}: 当awk处理完所有记录后,遍历status数组,对于每个端口号(i)及其对应的连接次数(status[i]),使用printf格式化字符串输出,格式为"端口号:连接数 空格"。
  3. 函数最后输出整体的总结信息,即"TCP连接状态 - $summary",这里$summary包含了所有端口及其连接计数。


6

全部代码

#!/bin/bash
function cpu(){
util=$(vmstat | awk '{if(NR==3)print $13+$14}')
iowait=$(vmstat | awk '{if(NR==3)print $16}')
echo "CPU -使用率:${util}% ,等待磁盘IO相应使用率:${iowait}:${iowait}%"
}
function memory (){
total=`free -m |awk '{if(NR==2)printf "%.1f",$2/1024}'`
used=`free -m |awk '{if(NR==2) printf "%.1f",($2-$NF)/1024}'`
available=`free -m |awk '{if(NR==2) printf "%.1f",$NF/1024}'`
echo "内存 - 总大小: ${total}G , 使用: ${used}G , 剩余: ${available}G"
}
disk(){
fs=$(df -h |awk '/^\/dev/{print $1}')
for p in $fs; do
mounted=$(df -h |awk '$1=="'$p'"{print $NF}')
size=$(df -h |awk '$1=="'$p'"{print $2}')
used=$(df -h |awk '$1=="'$p'"{print $3}')
used_percent=$(df -h |awk '$1=="'$p'"{print $5}')
echo "硬盘 - 挂载点: $mounted , 总大小: $size , 使用: $used , 使用率: $used_percent"
done
}
function tcp_status() {
summary=$(ss -antp |awk '{status[$1]++}END{for(i in status) printf i":"status[i]" "}')
echo "TCP连接状态 - $summary"
}
cpu
memory
disk
tcp_status
7

运行脚本

运行命令

bash serverUtilizationRate.sh
阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载