Java 在 CentOS 上的性能监控实践
一 系统层快速巡检
二 JVM 层诊断工具
三 指标化监控与可视化
四 日志分析与告警
五 一键健康检查脚本示例
#!/usr/bin/env bash set -euo pipefail
APP_NAME=“${1:-myapp.jar}” PID=$(pgrep -f “$APP_NAME” | head -n1)
if [[ -z “$PID” ]]; then echo “[ERROR] $APP_NAME is NOT running.” exit 1 fi
echo “=== $APP_NAME (PID=$PID) Health Check ===” echo “[1/5] CPU/Memory (top):” top -b -n1 -p “$PID” | head -n12
echo -e “\n[2/5] GC Summary (jstat):” jstat -gcutil “$PID” 1 1
echo -e “\n[3/5] Thread Count (jstack):” jstack “$PID” | grep -E ‘java.lang.Thread.State’ | sort | uniq -c
echo -e “\n[4/5] Open Files / Connections:” ls -1 /proc/“$PID”/fd 2>/dev/null | wc -l ss -tnp | grep -E “pid=$PID” | wc -l
echo -e “\n[5/5] Recent Errors in Logs (last 200 lines):” LOG=$(ps -ef | grep “$APP_NAME” | grep -Eo ‘-Dlogging.file=[^ ]+’ | cut -d= -f2 || echo “/var/log/$APP_NAME.log”) [[ -f “$LOG” ]] && tail -n200 “$LOG” | grep -i “ERROR” | tail -n20 || echo “Log file not found: $LOG”。