直接用 idea 的数据库插件展示了一下
因为系统监视器只有在启动之后才会开始显示,想着弄一个能够保存历史资源使用情况的工具。找了一下现有的服务器资源监控,都有一堆的东西要下,而且占用还挺大的,所以考虑自己写一个bash脚本跑后台,主打一个原生命令行就能跑。
sqlite3(如果记录成纯文本,那么不需要下)
moniterOnce.sh
#!/bin/bash # 目录设置为脚本所在目录 cd "$( dirname "${BASH_SOURCE[0]}" )" || exit curDate=$(date +"%Y-%m-%d") time=$(date +"%Y-%m-%d %H:%M") runSql() { tmpFile=$(mktemp .XXXXXXXXXX.sql) echo "$1" > "$tmpFile" echo -e "\n" >> "$tmpFile" sqlite3 "./db.$curDate.sqlite" < "$tmpFile" rm "$tmpFile" } insertData() { sql="insert into moniter (time, type, value) values ('$time', '$1', $2);" runSql "$sql" } runSql " create table if not exists moniter ( time TEXT not null, type text not null, value real not null, constraint moniter_pk unique (time, type) ); " # 使用top命令获取CPU占用信息,并使用grep和awk筛选和解析输出结果 cpu_usage=$(top -bn 1 | grep "Cpu(s)" | awk '{print 100-$8}') insertData cpu "$cpu_usage" # 使用 free 命令获取内存占用情况,并使用 awk 提取第2行的数据 mem_info=$(free | awk 'NR==2{print $3/$2 * 100}') insertData memory "$mem_info" # 使用 free 命令获取内存占用情况,并使用 awk 提取第3行的数据 swap_info=$(free | awk 'NR==3{print $3/$2 * 100}') insertData swap "$swap_info" # 获取磁盘使用率,并提取百分比部分 usage=$(df -h | awk '$NF=="/"{printf "%s\n", $5}' | cut -d'%' -f1) insertData "dist:/" "$usage"
这个脚本即可实现保存当前时刻的资源使用情况到 sqlite 数据库
然后让其可以后台定时运行,我尝试了crontab,但是好像并没有成功运行,所以又自己写了一个循环运行的脚本每分钟跑一次,然后配置为启动后后台运行,输出重定向到一个固定文件
moniter.sh
sleep "${next}s"#!/bin/bash # 目录设置为脚本所在目录 cd "$( dirname "${BASH_SOURCE[0]}" )" || exit if [ -n "$(pgrep -f "moniter.sh")" ]; then exit 0 fi while true do ./moniterOnce.sh next="$((60 - "$(date +%S)"))" sleep "${next}s" done
然后基本达成想法,有其他需要可以直接在moniterOnce.sh改对应的地方
是否在寻找atop
要装 atop 不太行。sqlite3 在大部分发行版上都是自带的。而且脚本能随便改,方便定制
Popular Ranking
Popular Events
结果
直接用 idea 的数据库插件展示了一下
想法
因为系统监视器只有在启动之后才会开始显示,想着弄一个能够保存历史资源使用情况的工具。找了一下现有的服务器资源监控,都有一堆的东西要下,而且占用还挺大的,所以考虑自己写一个bash脚本跑后台,主打一个原生命令行就能跑。
依赖
sqlite3(如果记录成纯文本,那么不需要下)
脚本
moniterOnce.sh
这个脚本即可实现保存当前时刻的资源使用情况到 sqlite 数据库
然后让其可以后台定时运行,我尝试了crontab,但是好像并没有成功运行,所以又自己写了一个循环运行的脚本每分钟跑一次,然后配置为启动后后台运行,输出重定向到一个固定文件
moniter.sh
然后基本达成想法,有其他需要可以直接在moniterOnce.sh改对应的地方