使用Shell脚本统计Linux服务器性能数据

文摘   2024-11-13 09:29   广东  
了解服务器的实时性能数据


在Linux服务器管理中,监控性能数据是确保系统稳定性和高效运行的关键。

本文将介绍如何使用Shell脚本来统计Linux服务器的性能数据,包括CPU使用率、内存使用率、磁盘分区及其I/O、磁盘空间使用率以及每个网口的带宽使用情况。此外,我们还将输出当前系统中CPU和内存使用前五的进程。


性能数据及获取方式介绍

1. CPU使用率

CPU使用率是衡量服务器负载的重要指标。我们可以通过top命令来获取CPU使用率信息。

2. 内存使用率和内存情况

内存使用率和内存情况可以通过free命令来获取,它提供了总内存、已用内存、空闲内存等信息。

3. 磁盘分区及磁盘IO

磁盘分区信息可以通过df命令获取,而磁盘IO可以通过iostat命令来监控。

4. 磁盘空间使用率

磁盘空间使用率同样可以通过df命令来获取,它显示了每个分区的使用百分比。

5. 网口带宽

网口带宽可以通过ifconfigip命令来检查,但更详细的实时流量监控可以通过nethogsntop等工具实现。

6. CPU和内存使用前五的进程

我们可以通过ps命令结合sort来找出CPU和内存使用前五的进程。



代码实现

以下是一个Shell脚本,它包含了上述所有功能,并在每次运行时记录时间点。


#!/bin/bash
# 检查命令是否存在command_exists() { command -v "$@" >/dev/null 2>&1}
# 打印高亮的标题print_title() { echo -e "\033[32m" echo -e "\n==========================================" echo "$1" echo "==========================================" echo -e "\033[0m" # 重置颜色}
# 获取CPU使用率cpu_usage() { print_title "CPU Usage" if command_exists top; then top -bn1 | grep "Cpu(s)" | awk '{print "User: " $2 "%, System: " $4 "%, Idle: " $6 "%, IOWait: " $5 "%"}' else echo "Error: top command not found." exit 1 fi}
# 获取内存使用率和内存情况memory_usage() { print_title "Memory Usage" if command_exists free; then free -m | awk 'NR==2{printf "Total: %sM, Used: %sM (%.2f%%), Free: %sM, Cache: %sM\n", $2, $3, $3*100/$2, $4, $6}' else echo "Error: free command not found." exit 1 fi}
# 获取磁盘分区及磁盘IOdisk_partitions() { print_title "Disk Partitions" if command_exists df; then df -h else echo "Error: df command not found." exit 1 fi}
# 获取磁盘空间使用率disk_io() { print_title "Disk IO" if command_exists iostat; then iostat -x 1 3 else echo "Error: iostat command not found. Please install sysstat package." exit 1 fi}
# 获取网口带宽network_bandwidth() { print_title "Network Bandwidth" if command_exists ifconfig; then ifconfig elif command_exists ip; then ip addr show else echo "Error: No network interface statistics tool found." exit 1 fi}
# 获取CPU和内存使用前五的进程top_processes() { print_title "Top 5 CPU and Memory Processes" if command_exists ps; then ps aux --sort=-%cpu | head -5 ps aux --sort=-%mem | head -5 else echo "Error: ps command not found." exit 1 fi}
# 记录时间点record_time() { echo -e "\033[34mTime of report: $(date '+%Y-%m-%d %H:%M:%S')\033[0m" # 蓝色高亮}
# 主函数,调用所有性能监控函数main() { record_time cpu_usage memory_usage disk_partitions disk_io network_bandwidth top_processes}
# 调用主函数main


Shell能力介绍

  1. 检查命令是否存在:在执行每个监控功能之前,脚本会检查所需的命令是否已安装,确保脚本的鲁棒性。

  2. 打印高亮标题:为了增强可读性,脚本使用彩色输出打印每个功能的标题,使得输出结果更清晰易懂。

  3. CPU使用率:通过调用top命令,脚本能够展示CPU的使用情况,包括用户、系统、空闲和IO等待的百分比。

  4. 内存使用情况:使用free命令获取内存的总量、已用量、空闲量和缓存信息,并以百分比形式展示已用内存的比例。

  5. 磁盘分区信息:通过df命令,脚本显示当前系统的磁盘分区及其使用情况,便于用户了解磁盘空间的分配。

  6. 磁盘IO:利用iostat命令,脚本提供磁盘的输入输出统计信息,帮助用户监测磁盘性能。

  7. 网络带宽:脚本通过ifconfig或ip命令获取网络接口的带宽信息,便于了解网络的使用情况。

  8. CPU和内存使用前五的进程:使用ps命令,脚本能够列出当前系统中占用CPU和内存资源最多的五个进程,帮助用户识别资源占用的“罪魁祸首”。

  9. 记录时间点:脚本在开始时会记录并打印报告生成的时间,方便用户进行时间上的跟踪。


运行脚本:

将上述代码保存为 monitor.sh,然后在Linux终端中运行:

bash monitor.sh


注意事项:

  • 确保你有适当的权限来执行脚本,并且根据需要安装了所有必需的命令行工具。

  • iostat 命令需要 sysstat 包支持,如果系统中没有安装,可以通过包管理器安装。

  • nethogs 和 ntop 提供了更详细的网络流量监控,但它们不是标准工具,可能需要单独安装。

  • 脚本中的 exit 1 确保了如果关键命令不存在,脚本会立即停止执行并报错。


这个脚本提供了一个基本的性能监控框架,可以根据具体需求进行扩展和定制。

小叶来滴茶
杰哥写字的地方:个人工作、生活的总结思考、顿悟的记录。
 最新文章