Prometheus + Grafana 监控方案,专为**单台物理机部署多个 Java 游戏进程 + 自建 MySQL**的场景设计。Java 进程通过 jstat/jcmd 无侵入采集 JVM 运行时指标(堆内存、新生代、老年代、GC、线程、类内存),MySQL 通过 pymysql 采集(Buffer Po...
Java 多进程游戏服监控方案是一项面向实际任务的技能,主要用于基于 Prometheus + Grafana,专为 单台物理机多 Java 进程 + 自建 MySQL 场景设计;监控重点围绕 内存使用率 ,适配游戏服大内存、高 GC 压力的特点;
PUSHGATEWAY;Pushgateway 地址,如 http。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
基于 Prometheus + Grafana,专为单台物理机多 Java 进程 + 自建 MySQL场景设计。监控重点围绕内存使用率,适配游戏服大内存、高 GC 压力的特点。
┌─────────────────────────────────────────────────────────┐ │ 单台物理游戏服务器 │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │ │ │ Java进程1 │ │ Java进程2 │ │ Java进程3 │ │ MySQL │ │ │ │ (JVM) │ │ (JVM) │ │ (JVM) │ │ │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └───┬────┘ │ │ │ jstat/jcmd │ jstat/jcmd │ jstat/jcmd │ pymysql │ └─────────────┴──────┬──────┴──────────────┘ │ │ │ game_agent.py │ │ │ push │ Pushgateway ◄── Prometheus ──► Alertmanager │ │ │ │ │ Feishu/Lark Webhook │ │ │ query │ Grafana └─────────────────────────────────────────────────────────┘
所有配置均通过环境变量注入,无硬编码。
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
PUSHGATEWAY |
✅ | — | Pushgateway 地址,如 http://pushgateway:9091 |
PUSH_INTERVAL |
60 |
采集推送间隔(秒) | |
MYSQL_USER |
空 | MySQL 用户名(无 MySQL 时可留空) | |
MYSQL_PASSWORD |
空 | MySQL 密码 | |
MYSQL_HOST |
127.0.0.1 |
MySQL 地址 | |
MYSQL_PORT |
3306 |
MySQL 端口 | |
GAME_ROOT_DIR |
/data/game |
游戏服目录根路径 | |
GAME_PROCESS_NAME |
java |
Java 进程标识(cmdline 匹配关键字) | |
AGENT_LOG_FILE |
/var/log/game_monitor/agent.log |
日志路径 | |
HISTO_INTERVAL |
600 |
类直方图采集间隔(秒,0 表示关闭) |
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
FEISHU_WEBHOOK_URL |
✅ | — | 飞书机器人 Webhook URL |
WEBHOOK_PORT |
5000 |
监听端口 | |
PUSH_INTERVAL |
60 |
与 agent 保持一致(用于格式化) |
# 一键部署(需先设置飞书 Webhook) FEISHU_WEBHOOK_URL="https://open.larksuite.com/..." bash monitor_install.sh
ansible-playbook main.yml -l-e "PUSHGATEWAY=http:// :9091" -e "MYSQL_USER= " -e "MYSQL_PASSWORD= " -e "GAME_ROOT_DIR=/data/game" -e "GAME_PROCESS_NAME=java"
| 文件 | 说明 |
|---|---|
monitor_install.sh |
监控服务器一键部署(Prometheus/Grafana/Alertmanager/Pushgateway) |
game_agent.py |
游戏服务器指标采集脚本(jstat + jcmd,无侵入) |
main.yml |
Ansible Playbook,批量部署 agent |
webhook.py |
告警 Webhook 服务,转发至飞书/ Lark |
rules.yml |
Prometheus 告警规则(JVM + MySQL) |
game_monitor.service |
systemd 服务配置 |
game_monitor |
logrotate 日志轮转配置 |
| 指标 | 说明 | 标签 |
|---|---|---|
heap_used_bytes |
堆内存已使用量 | hostname, game_dir |
heap_committed_bytes |
堆内存提交量 | hostname, game_dir |
young_used_bytes |
新生代(Eden+S0+S1)已使用 | hostname, game_dir |
old_used_bytes |
老年代已使用 | hostname, game_dir |
gc_time_seconds |
本周期 GC 耗时(delta) | hostname, game_dir |
gc_count |
本周期 GC 次数(delta) | hostname, game_dir |
threads_live |
活跃线程数 | hostname, game_dir |
jvm_up |
JVM 上线状态 | hostname, game_dir |
jvm_class_bytes |
Top 50 类内存占用 | hostname, game_dir, class |
jvm_class_instance_count |
Top 50 类实例数量 | hostname, game_dir, class |
| 指标 | 说明 | 标签 |
|---|---|---|
mysql_up |
MySQL 连接状态 | hostname |
mysql_process_resident_memory_bytes |
MySQL 进程 RSS | hostname |
innodb_buffer_pool_bytes_data |
InnoDB Buffer Pool 已使用 | hostname |
innodb_buffer_pool_bytes_total |
InnoDB Buffer Pool 总大小 | hostname |
预置 3 个 Dashboard JSON,开箱即用:references/files/
| 文件 | 面板内容 |
|---|---|
jvm_dashboard.json |
堆内存使用量/率、新生代、老年代、GC 耗时、线程数 |
jvm_class_dashboard.json |
Top10 类内存/实例数排行、选中类趋势、Top20 快照表 |
mysql_dashboard.json |
MySQL 存活、RSS 内存、Buffer Pool 概览及使用率 |
导入方式:Grafana → Dashboards → Import → 上传 JSON → 选择 Prometheus 数据源。
| 告警 | 条件 | 级别 |
|---|---|---|
JVMHeapUsageHigh |
堆内存使用率 > 85%,持续 5 分钟(JVM 预热 1 小时后) | warning |
JVMGcPressureWarning |
GC 时间占采集周期 > 30%,持续 3 分钟 | warning |
JVMGcPressureCritical |
GC 时间占采集周期 > 60%,持续 2 分钟 | critical |
MySQLDown |
MySQL 连接失败,持续 2 分钟 | critical |
MySQLBufferPoolHigh |
InnoDB Buffer Pool > 85%,持续 5 分钟 | warning |
MySQLMemoryHigh |
MySQL RSS > 8GB,持续 5 分钟 | warning |
systemctl status game_monitor tail -f /var/log/game_monitor/agent.log # 检查环境变量 cat /opt/game_monitor/env.conf
curl -s http://:9091/-/healthy curl -s "http:// :9090/api/v1/targets" | jq '.data.activeTargets'
curl -X POST "http://:5000/webhook?level=warning" -H "Content-Type: application/json" -d '{"alerts":[]}' journalctl -u feishu -f
references/deploy.mdreferences/rules.mdreferences/grafana.mdreferences/planning.mdreferences/faq.md相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章