
指通过技术手段持续监控大模型运行进程,确保模型服务不意外退出、不被系统杀死、不静默挂起,核心目标是维持模型服务的持续在线状态,是大模型提供稳定推理、训练服务的基础前提。

指大模型服务发生异常时,无需人工干预,系统自动识别故障、定位原因、执行修复策略,让服务恢复正常运行的闭环能力,是无人运维的核心。

大模型运行过程中,申请的显存未被正常释放,随着运行时间增加,显存占用持续升高,最终导致显存耗尽、服务崩溃,是大模型最常见的慢性故障。
OOM,Out Of Memory,内存耗尽是大模型服务的致命故障,预警指在显存或内存占用达到阈值前,提前发出告警,并执行预定义的降载、清理策略,避免故障发生。

按照固定时间周期,对大模型服务的进程状态、硬件资源、接口可用性、显存占用等核心指标进行全面检测,生成巡检报告,提前发现隐性故障。
结合进程保活、故障自愈、OOM预警、定时巡检,构建全自动化运维体系,无需人工登录服务器、无需手动重启、无需排查日志,系统自主完成所有运维操作。

2.1.1 进程状态查看

2.1.2 进程状态理解
2.1.3 进程杀死与重启
2.1.4 systemd服务管理
2.2.1 nvidia-smi 命令


2.2.2 显存占用查看

2.2.3 GPU利用率监控
2.2.4 进程信息查询

2.3.1 subprocess 库
2.3.2 psutil 库
2.3.3 进程创建、监控、终止逻辑
2.4.1 Python 异常捕获
2.4.2 日志记录
2.4.3 服务状态判断逻辑
2.5.1 自定义显存/内存预警阈值
2.5.2 自愈触发条件
2.5.2 重启策略
大模型进程保活与故障自愈采用“监控 - 检测 - 决策 - 执行 - 反馈:闭环架构,5大模块协同工作:
2.1 进程崩溃自动重启原理
2.2 显存泄漏治理原理
2.3 OOM预警原理
2.4 定时巡检原理
2.5 无人运维自愈原理
2.1 大模型进程突然崩溃
2.2 显存泄漏导致占用持续升高
2.3 OOM预警触发
2.4 定时巡检执行
以下是一个大模型服务进程保活与故障自愈监控脚本,定时检测、异常崩溃重启,并将结果记录到图表中,具体说明:
import os
import time
import psutil
import subprocess
import torch
import matplotlib.pyplot as plt
import matplotlib
from datetime import datetime
import sys
# ===================== 中文字体适配(Linux/Windows/macOS) =====================
def _setup_chinese_font():
"""自动选择系统中可用的中文字体"""
import matplotlib.font_manager as fm
# 按优先级尝试的字体列表
font_candidates = [
'WenQuanYi Micro Hei', # Linux 常用
'WenQuanYi Zen Hei',
'Noto Sans CJK SC',
'Noto Sans SC',
'SimHei', # Windows
'Microsoft YaHei',
'PingFang SC', # macOS
'Heiti SC',
'sans-serif'
]
available_fonts = {f.name for f in fm.fontManager.ttflist}
for font in font_candidates:
if font in available_fonts:
plt.rcParams['font.sans-serif'] = [font]
plt.rcParams['axes.unicode_minus'] = False
print(f"[字体] 已加载中文字体:{font}")
return
# 都没找到:用系统默认 + 警告
print("[字体] 未找到中文字体,图表中文可能显示为方块,请安装:apt install fonts-wqy-microhei")
plt.rcParams['font.sans-serif'] = ['sans-serif']
plt.rcParams['axes.unicode_minus'] = False
_setup_chinese_font()
# ==============================================================================
# ===================== 配置项 =====================
MODEL_PROCESS_NAME = "python3.11" # 大模型进程名称
GPU_ID = 0 # 使用的GPU编号
OOM_WARN_THRESHOLD = 85 # OOM预警阈值(%)
MEMORY_LEAK_THRESHOLD = 70 # 显存泄漏预警阈值(%)
CHECK_INTERVAL = 5 # 监控间隔(秒)
RETRY_COUNT = 3 # 重启重试次数
# =================================================
# 存储监控数据,用于生成图表
monitor_data = {
"timestamp": [],
"gpu_memory": [],
"system_memory": []
}
def get_gpu_memory_usage(gpu_id=0):
"""获取GPU显存使用率"""
try:
result = subprocess.check_output(
f"nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits -i {gpu_id}",
shell=True
)
used, total = map(int, result.decode().strip().split(","))
return round((used / total) * 100, 2)
except:
return 0.0
def is_model_running(process_name):
"""检测大模型进程是否存活"""
for proc in psutil.process_iter(['pid', 'name']):
if process_name in proc.info['name']:
return True, proc.info['pid']
return False, None
def clear_gpu_memory():
"""清理GPU显存缓存"""
if torch.cuda.is_available():
torch.cuda.empty_cache()
print(f"[{datetime.now()}] 已执行GPU显存清理")
def restart_model_process():
"""重启大模型进程(替换为你的启动命令)"""
print(f"[{datetime.now()}] 开始重启大模型进程")
# 示例启动命令:根据你的模型实际启动命令修改
startup_cmd = "nohup python your_model_server.py > model.log 2>&1 &"
os.system(startup_cmd)
time.sleep(10) # 等待模型加载
success, pid = is_model_running(MODEL_PROCESS_NAME)
if success:
print(f"[{datetime.now()}] 重启成功,进程PID:{pid}")
return True
else:
print(f"[{datetime.now()}] 重启失败")
return False
def save_monitor_chart():
"""生成监控图表(可视化显存/内存趋势)"""
plt.figure(figsize=(10, 6))
plt.plot(monitor_data["timestamp"], monitor_data["gpu_memory"], label="GPU显存使用率(%)", color="red")
plt.plot(monitor_data["timestamp"], monitor_data["system_memory"], label="系统内存使用率(%)", color="blue")
plt.axhline(y=OOM_WARN_THRESHOLD, color="orange", linestyle="--", label=f"OOM预警阈值({OOM_WARN_THRESHOLD}%)")
plt.xlabel("时间")
plt.ylabel("使用率(%)")
plt.title("大模型资源监控趋势图")
plt.legend()
plt.grid(True)
plt.savefig("model_monitor.png")
plt.close()
print("[{datetime.now()}] 监控图表已保存:model_monitor.png")
def main():
print("===== 大模型进程保活与故障自愈服务启动 =====")
retry = 0
while True:
now = datetime.now().strftime("%H:%M:%S")
# 1. 获取核心指标
gpu_mem = get_gpu_memory_usage(GPU_ID)
sys_mem = psutil.virtual_memory().percent
proc_running, pid = is_model_running(MODEL_PROCESS_NAME)
# 记录监控数据
monitor_data["timestamp"].append(now)
monitor_data["gpu_memory"].append(gpu_mem)
monitor_data["system_memory"].append(sys_mem)
# 每100次采样保存一次图表
if len(monitor_data["timestamp"]) % 10 == 0:
save_monitor_chart()
# 2. 进程崩溃检测
if not proc_running:
print(f"[{now}] 大模型进程已崩溃,尝试重启...")
restart_success = restart_model_process()
if restart_success:
retry = 0
else:
retry += 1
if retry >= RETRY_COUNT:
print(f"[{now}] 重启重试次数耗尽,需人工检查")
retry = 0
time.sleep(CHECK_INTERVAL)
continue
# 3. OOM预警与显存泄漏治理
if gpu_mem >= OOM_WARN_THRESHOLD:
print(f"[{now}] 警告:GPU显存占用{gpu_mem}%,触发OOM预警!")
clear_gpu_memory()
time.sleep(2)
# 清理后仍超标,重启服务
if get_gpu_memory_usage(GPU_ID) >= OOM_WARN_THRESHOLD:
restart_model_process()
# 4. 显存泄漏轻度治理
elif gpu_mem >= MEMORY_LEAK_THRESHOLD and gpu_mem < OOM_WARN_THRESHOLD:
print(f"[{now}] 提示:GPU显存占用{gpu_mem}%,执行轻度清理")
clear_gpu_memory()
# 5. 正常状态输出
else:
print(f"[{now}] 运行正常 | 进程PID:{pid} | GPU显存:{gpu_mem}% | 系统内存:{sys_mem}%")
time.sleep(CHECK_INTERVAL)
if __name__ == "__main__":
main()输出结果:
===== 大模型进程保活与故障自愈服务启动 ===== [19:21:33] 运行正常 | 进程PID:3296490 | GPU显存:8.72% | 系统内存:3.0% [19:21:38] 运行正常 | 进程PID:3296490 | GPU显存:32.54% | 系统内存:4.2% [19:21:43] 运行正常 | 进程PID:3296490 | GPU显存:50.21% | 系统内存:2.6% [19:21:48] 运行正常 | 进程PID:3296490 | GPU显存:50.21% | 系统内存:2.7% [19:21:53] 运行正常 | 进程PID:3296490 | GPU显存:58.92% | 系统内存:3.6% [19:21:58] 提示:GPU显存占用83.6%,执行轻度清理 [2026-04-30 19:21:59.061133] 已执行GPU显存清理 [19:22:04] 警告:GPU显存占用90.39%,触发OOM预警! [2026-04-30 19:22:04.113335] 已执行GPU显存清理 ........
输出结果图示:

大模型资源监控趋势图:

大模型进程保活与故障自愈方案是大模型落地生产环境必不可少的运维核心能力。我们在实际应用中,应该都遇到过大模型部署后进程莫名崩溃、显存悄悄泄漏、突发OOM宕机,都是极其头疼的问题,这些问题如果靠人工盯着排查、手动重启,既费时又容易错过故障处理时机,根本没法支撑长期稳定运行。系统性的进程监控、显存治理、OOM预警、定时巡检、自动自愈是运维环节必不可少、极其重要的部分,从个人感悟来说,大模型不只是把模型跑起来就够了,高可用、无人值守自愈才是工业级部署的关键,很多时候业务故障不是模型本身不行,而是进程和资源没管好。
这里起到一个抛砖引玉的作用,大家上手时建议先吃透进程监控、GPU显存查看这些基础知识点,再动手跑通示例代码,亲自测试崩溃重启、显存预警的效果;后续可以在此基础上扩展告警通知、日志持久化功能,慢慢把这套方案改成适配自己项目的定制化版本,真正做到适合自己的大模型服务免人工值守、全自动稳定运行。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。