1. 实时刷新
bash
#!/bin/bash
# realtime_monitor.sh - Linux 服务器实时监控脚本
# 清屏函数
clear_screen() {
clear
}
# 显示头部信息
show_header() {
echo "========================================"
echo " Linux 服务器实时监控 (按 q 退出) "
echo "========================================"
echo "更新时间: $(date)"
echo
}
# 显示系统基本信息
show_system_info() {
echo "1. 系统基本信息"
echo "----------------"
echo "主机名: $(hostname)"
echo "运行时间: $(uptime | awk -F',' '{print $1}' | awk -F'up' '{print $2}')"
echo "负载平均值: $(uptime | awk -F'load average:' '{print $2}')"
echo
}
# 显示CPU和内存使用情况
show_cpu_memory() {
echo "2. CPU 和内存使用情况"
echo "----------------------"
# 获取CPU使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
echo "CPU 使用率: ${cpu_usage}%"
# 显示内存信息
free -h | grep -E 'Mem|Swap'
echo
}
# 显示磁盘使用情况
show_disk_usage() {
echo "3. 磁盘使用情况"
echo "----------------"
df -h | grep -E '^Filesystem|/' | head -5
echo
}
# 显示网络接口状态
show_network_status() {
echo "4. 网络接口状态"
echo "----------------"
ip -br addr show | grep UP | head -3
echo
}
# 显示最占用资源的进程
show_top_processes() {
echo "5. 最占用资源的进程 (Top 5)"
echo "----------------------------"
ps aux --sort=-%cpu | head -6 | awk '{printf "%-8s %-8s %-5s %-5s %s\n", $1, $2, $3, $4, $11}' | head -1
ps aux --sort=-%cpu | head -6 | tail -5 | awk '{printf "%-8s %-8s %-5s %-5s %s\n", $1, $2, $3"%", $4"%", $11}'
echo
}
# 主监控循环
main_monitor() {
while true; do
clear_screen
show_header
show_system_info
show_cpu_memory
show_disk_usage
show_network_status
show_top_processes
echo "========================================"
echo "按 'q' 退出, 其他键刷新"
echo "========================================"
# 非阻塞读取用户输入
read -n1 -t 3 key
if [[ $key == "q" ]] || [[ $key == "Q" ]]; then
echo
echo "退出实时监控..."
break
fi
done
}
# 检查是否支持所需命令
check_commands() {
local commands=("top" "free" "df" "ip" "ps")
for cmd in "${commands[@]}"; do
if ! command -v "$cmd" &> /dev/null; then
echo "错误: 找不到命令 '$cmd'"
exit 1
fi
done
}
# 初始化检查
check_commands
# 启动主监控
main_monitor
效果:
bash
========================================
Linux 服务器实时监控 (按 q 退出)
========================================
更新时间: Fri Nov 21 05:59:04 AM EET 2025
1. 系统基本信息
----------------
主机名:
运行时间: 26 days
负载平均值: 0.22, 0.41, 0.33
2. CPU 和内存使用情况
----------------------
CPU 使用率: 3.1%
Mem: 30Gi 25Gi 276Mi 42Mi 5.1Gi 5.0Gi
Swap: 0B 0B 0B
3. 磁盘使用情况
----------------
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 6.1G 43M 6.1G 1% /run
/dev/nvme0n1p2 100G 38G 63G 38% /
4. 网络接口状态
----------------
eth0 UP 192.168.1.114/24 fe80::ee:1bff:feb4:7b03/64
5. 最占用资源的进程 (Top 5)
----------------------------
USER PID %CPU %MEM COMMAND
op 1927653 10.7% 20.7% /project/server/jdk/bin/java
op 88868 6.4% 4.6% /project/server/jdk/bin/java
op 2717493 2.2% 6.6% /project/server/jdk/bin/java
op 2702376 1.6% 7.9% /project/server/jdk/bin/java
op 2702463 1.4% 15.5% /project/server/jdk/bin/java
========================================
按 'q' 退出, 其他键刷新
========================================
2. 一次执行
bash
#!/bin/bash
# server_monitor.sh - Linux 服务器配置和负载监控脚本
echo "========================================"
echo " Linux 服务器配置和负载监控报告 "
echo "========================================"
echo
# 系统基本信息
echo "1. 系统基本信息"
echo "----------------"
echo "主机名: $(hostname)"
echo "系统时间: $(date)"
echo "运行时间: $(uptime | awk -F',' '{print $1}' | awk -F'up' '{print $2}')"
echo "系统版本: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)"
echo
# CPU 信息
echo "2. CPU 信息"
echo "------------"
lscpu | grep -E "Architecture|Model name|CPU\(s\)|Thread\(s\) per core|Core\(s\) per socket"
echo
# 内存信息
echo "3. 内存信息"
echo "------------"
free -h
echo
# 磁盘使用情况
echo "4. 磁盘使用情况"
echo "----------------"
df -h
echo
# 网络接口信息
echo "5. 网络接口信息"
echo "----------------"
ip -br addr show | grep UP
echo
# 当前系统负载
echo "6. 当前系统负载"
echo "----------------"
uptime
echo
# 最占用资源的进程 (Top 5)
echo "7. 最占用 CPU 的进程 Top 5"
echo "----------------------------"
ps aux --sort=-%cpu | head -6
echo
echo "8. 最占用内存的进程 Top 5"
echo "--------------------------"
ps aux --sort=-%mem | head -6
echo
# 网络连接状态
echo "9. 网络连接状态"
echo "----------------"
echo "TCP 连接数: $(ss -t | wc -l)"
echo "活跃连接数: $(ss -t state established | wc -l)"
echo
# 最后显示实时监控提示
echo "========================================"
echo "如需实时监控,可使用以下命令:"
echo "- top 或 htop (CPU/内存实时监控)"
echo "- iotop (磁盘I/O实时监控)"
echo "- nethogs (网络流量实时监控)"
echo "========================================"
bash
========================================
Linux 服务器配置和负载监控报告
========================================
1. 系统基本信息
----------------
主机名:
系统时间: Fri Nov 21 12:19:55 PM EET 2025
运行时间: 27 days
系统版本: CentOS Stream 9
2. CPU 信息
------------
Architecture: x86_64
CPU(s): 4
On-line CPU(s) list: 0-3
Model name: AMD EPYC 7R13 Processor
Thread(s) per core: 2
Core(s) per socket: 2
NUMA node0 CPU(s): 0-3
3. 内存信息
------------
total used free shared buff/cache available
Mem: 30Gi 22Gi 1.8Gi 42Mi 6.4Gi 7.8Gi
Swap: 0B 0B 0B
4. 磁盘使用情况
----------------
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 6.1G 43M 6.1G 1% /run
/dev/nvme0n1p2 100G 40G 61G 40% /
tmpfs 3.1G 0 3.1G 0% /run/user/1100
tmpfs 3.1G 0 3.1G 0% /run/user/1101
5. 网络接口信息
----------------
eth0 UP 192.168.1.114/24 fe80::ee:1bff:feb4:7b03/64
6. 当前系统负载
----------------
12:19:55 up 27 days, 1:37, 3 users, load average: 0.21, 0.91, 2.52
7. 最占用 CPU 的进程 Top 5
----------------------------
8. 最占用内存的进程 Top 5
--------------------------
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
op 2717493 2.4 7.5 5670256 2413548 ? Sl Nov20 37:55
op 3141909 41.9 7.2 5269516 2324868 ? Sl 11:57 9:34 /project/server/jdk/bin/java 8.0.0.jar
op 3141703 36.4 7.2 5395032 2296836 ? Sl 11:57 8:18 /project/server/jdk/bin/java 8.0.0.jar
op 3141952 42.6 7.1 5214716 2266128 ? Sl 11:57 9:43 /project/server/jdk/bin/java 8.0.0.jar
9. 网络连接状态
----------------
TCP 连接数: 335
活跃连接数: 318
========================================
如需实时监控,可使用以下命令:
- top 或 htop (CPU/内存实时监控)
- iotop (磁盘I/O实时监控)
- nethogs (网络流量实时监控)
========================================