【bash】统计服务器信息脚本

起因

写一个bash脚本统计服务器的机器名、内网IP、CPU使用率、内存使用率、List{GPU使用率、显存}

脚本

bash 复制代码
#!/bin/bash

# 主机名
hostname=$(hostname)
# 内网ip
ip=$(ip addr | grep 'inet ' | grep -v 127.0.0.1 | awk '{print $2}' | cut -d/ -f1)
ip=$(echo "$ip"|tr '\n' ',')
ip="${ip%,}"
# cpu使用率
cpu_used=$(top -bn1 | grep Cpu | awk '{print $2+$4}')

mem_total=$(free -m | grep -e Mem -e '内存' | awk '{print $2}')
mem_used=$(free -m | grep -e Mem -e '内存' | awk '{print $3}')
mem_rate=$((mem_used*100/mem_total))

gpu_info="[]"
if ! command -v nvidia-smi >/dev/null 2>&1; then
  echo "command nvidia-smi not exist"
else
  gpu_info=""
  echo "command nvidia-smi exist"
  total_devices=$(($(nvidia-smi --query-gpu=name --format=csv,noheader | wc -l)-1))
  for i in `seq 0 $total_devices`; do
    # 获取 GPU 内存使用情况
    MEMORY_INFO=$(nvidia-smi --id="$i" --query-gpu=memory.total,memory.used --format=csv,noheader,nounits)
    # 解析内存信息
    TOTAL_MEMORY=$(echo "$MEMORY_INFO" | cut -d ',' -f 1)
    USED_MEMORY=$(echo "$MEMORY_INFO" | cut -d ',' -f 2)
    # 计算内存使用率
    MEMORY_USAGE_PERCENT=$(echo "scale=5; $USED_MEMORY / $TOTAL_MEMORY * 100" | bc)
    MEMORY_USAGE_PERCENT=$(echo "$MEMORY_USAGE_PERCENT" | sed 's/\(\.[0-9]*[1-9]\)0*$/\1/')
    if [[ ${MEMORY_USAGE_PERCENT:0:1} == "." ]]; then
      MEMORY_USAGE_PERCENT="0$MEMORY_USAGE_PERCENT"
    fi
    # 构造 JSON 对象
    json="{\"gpu_idx\":$i,\"total_memory\":$TOTAL_MEMORY,\"used_memory\":$USED_MEMORY,\"memory_rate\":$MEMORY_USAGE_PERCENT}"
    gpu_info+=",$json"
  done
  # 移除开头的逗号
  gpu_info=$(echo "$gpu_info" | sed 's/^,//')
  # 添加结束的方括号
  gpu_info+="]"
  gpu_info="[$gpu_info"
fi

echo "Hostname: $hostname"
echo "IP: $ip"
echo "CPU Usage: $cpu_used%"
echo "Memory Usage: $mem_used MB / $mem_total MB, $mem_rate%"
echo "GPU Info: $gpu_info"

输出示例

bash 复制代码
command nvidia-smi exist
Hostname: xxx
IP: 192.168.xxx.xxx
CPU Usage: 0.9%
Memory Usage: 16125 MB / 257376 MB, 6%
GPU Info: [{"gpu_idx":0,"total_memory":24564,"used_memory": 16065,"memory_rate":65.4},{"gpu_idx":1,"total_memory":24564,"used_memory": 15900,"memory_rate":64.728},{"gpu_idx":2,"total_memory":24564,"used_memory": 680,"memory_rate":2.768},{"gpu_idx":3,"total_memory":24564,"used_memory": 680,"memory_rate":2.768}]
相关推荐
草莓熊Lotso11 小时前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能
七夜zippoe19 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥19 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
Fcy64820 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满20 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
主机哥哥21 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
珠海西格电力科技1 天前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀1 天前
Linux环境变量
linux·运维·服务器
zzzsde1 天前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
qq_297574671 天前
Linux 服务器 Java 开发环境搭建保姆级教程
java·linux·服务器