#!/bin/bash
# 定義日志文件路徑
log_file="/path/to/memory_monitor.log"
# 獲取當(dāng)前時(shí)間
current_time=$(date +'%Y-%m-%d %H:%M:%S')
# 將當(dāng)前時(shí)間寫入日志文件
echo "[$current_time] Memory Monitoring Report" >> "$log_file"
echo "+------+------------------------------------------+-----------------+-----------------+" >> "$log_file"
echo "| PID | JAR名稱 | 內(nèi)存使用(MB) | Xmx參數(shù)(MB) |" >> "$log_file"
echo "+------+------------------------------------------+-----------------+-----------------+" >> "$log_file"
# 獲取所有Java進(jìn)程的PID
java_pids=$(ps aux | grep java | grep -v grep | awk '{print $2}')
# 遍歷每個(gè)進(jìn)程霎槐,獲取其Jar包名稱、內(nèi)存使用情況和Xmx參數(shù)
for pid in $java_pids; do
# 獲取進(jìn)程的命令行,包含Jar包路徑
cmdline=$(cat /proc/$pid/cmdline 2>/dev/null | tr '\0' ' ')
# 從命令行中提取Jar包名稱
jar_name=$(echo "$cmdline" | grep -oP '[^ ]*\.jar' | awk -F '/' '{print $NF}')
# 如果沒有找到Jar包名稱依溯,則跳過
if [ -z "$jar_name" ]; then
continue
fi
# 獲取進(jìn)程使用的內(nèi)存大忻泵ァ(單位:KB)岗钩,并轉(zhuǎn)換為MB
mem_usage=$(pmap -x $pid 2>/dev/null | tail -n 1 | awk '{print $4/1024}')
# 獲取進(jìn)程的-Xmx參數(shù)
xmx_param=$(echo "$cmdline" | grep -oP '(\-Xmx[0-9]+[mMgGkK])' | awk '{print substr($1, 5)}')
# 如果沒有找到-Xmx參數(shù)福侈,則默認(rèn)為空
if [ -z "$xmx_param" ]; then
xmx_param="N/A"
fi
# 輸出PID螟左、Jar包名稱购对、內(nèi)存使用情況和Xmx參數(shù)(右對(duì)齊)背捌,并寫入日志文件
printf "| %-5s | %-40s | %-15.2f | %-15s |\n" "$pid" "$jar_name" "$mem_usage" "$xmx_param" >> "$log_file"
done
# 輸出表格底部和結(jié)束,并寫入日志文件
echo "+------+------------------------------------------+-----------------+-----------------+" >> "$log_file"
echo "" >> "$log_file"
# 打印日志文件路徑
echo "Memory monitoring report has been appended to: $log_file"
再通過crontab設(shè)置定時(shí)任務(wù)定時(shí)執(zhí)行該腳本
root@localhost:~# cat memory_monitor.log
[2024-08-06 14:42:22] Memory Monitoring Report
+------+------------------------------------------+-----------------+-----------------+
| PID | JAR名稱 | 內(nèi)存使用(MB) | Xmx參數(shù)(MB) |
+------+------------------------------------------+-----------------+-----------------+
| 36151 | testa-0.0.1-SNAPSHOT.jar | 457.35 | 600m |
| 36153 | testtesDsta-0.0.1-SNAPSHOT.jar | 497.46 | 700m |
| 36155 | helloaa-0.0.1-SNAPSHOT.jar | 328.83 | 300m |
+------+------------------------------------------+-----------------+-----------------+