ChatGLM-6B服务监控:Supervisor状态检查命令汇总
1. 为什么需要关注ChatGLM-6B的服务状态
当你把ChatGLM-6B部署为一个长期运行的智能对话服务时,它就不再是一个“跑完就关”的脚本,而是一个持续在线的后台程序。就像家里的路由器或空调,你不会每天手动开关,但得知道它是不是在正常工作——有没有断连、有没有卡死、响应是否及时。
很多用户在首次使用镜像后,能顺利打开Gradio界面、完成几轮对话,但过了一段时间再访问,发现页面打不开、提示连接超时,或者对话突然变慢、不回复。这时候问题往往不是模型本身出了错,而是服务进程意外退出了,而你没注意到。
这就是Supervisor存在的意义:它不只是启动服务的工具,更是一个24小时值守的“管家”。它会盯着ChatGLM-6B进程,一旦崩溃就立刻拉起来;它记录每一次启动和异常;它让你用一条命令就能看清整个服务的健康状况。掌握它的状态检查命令,相当于拿到了这台AI服务的“体检报告单”。
本文不讲怎么从零安装、不讲模型原理,只聚焦一件事:当你怀疑服务可能出问题时,该敲哪几条命令,怎么看懂返回结果,以及每种状态背后意味着什么。所有内容基于CSDN镜像实际环境验证,命令可直接复制粘贴使用。
2. Supervisor基础认知:它不是“启动器”,而是“守护者”
Supervisor不是用来替代python app.py的快捷方式,它的核心角色是进程生命周期管理。理解这一点,才能看懂后续所有命令的输出。
在CSDN这个ChatGLM-6B镜像中,Supervisor被配置为系统级服务(通过/etc/supervisor/conf.d/chatglm.conf管理),它所监管的不是一个Python文件,而是一个完整的推理服务单元,包含:
- 模型加载与初始化
- Gradio Web服务器(绑定7860端口)
- 日志自动轮转与归档
- 内存与CPU使用阈值监控(通过配置可扩展)
所以当你执行supervisorctl status时,看到的不是“Python进程是否存在”,而是“整个对话服务能力是否就绪”。
2.1 Supervisor服务本身是否在运行?
这是最底层的前提。如果Supervisor自己挂了,那它监管的所有服务都会失去守护。
# 检查supervisord主进程状态 systemctl is-active supervisor正常返回active;若返回inactive或报错Unit supervisor.service could not be found,说明Supervisor未启用或未安装(但在本镜像中默认已启用)。
小贴士:CSDN镜像中Supervisor随系统自启,无需手动start。但如果你误执行了
systemctl stop supervisor,所有AI服务将失去自动恢复能力,此时需先执行systemctl start supervisor。
2.2 Supervisor的配置是否加载成功?
即使Supervisor进程在跑,也可能因为配置错误导致服务未被识别。
# 重新读取配置并更新 supervisorctl reread supervisorctl updatereread:扫描/etc/supervisor/conf.d/下所有.conf文件,检查语法update:对新增或修改过的配置项,启动对应服务(如果未运行)或重启(如果已在运行)
如果reread后提示No config updates,说明配置无变更;若提示chatglm-service: available,说明配置已被识别,但尚未启动。
3. 核心状态检查命令详解
所有命令均在SSH登录后直接执行,无需切换目录或激活虚拟环境。
3.1 查看服务实时状态:supervisorctl status
这是你每天该看的第一眼。
supervisorctl status chatglm-service典型返回示例及含义:
chatglm-service RUNNING pid 12345, uptime 1 day, 3:24:18RUNNING:服务健康,正在提供对话能力pid 12345:当前进程ID,可用于kill -9强制终止(不推荐,优先用supervisor命令)uptime 1 day, 3:24:18:已连续运行时长,越长通常越稳定
chatglm-service STARTING- 表示服务正在启动中。ChatGLM-6B加载62亿参数+初始化GPU显存需1–3分钟,此状态属正常。若超过5分钟仍卡在此处,需查日志。
chatglm-service FATAL- 启动失败,常见原因:显存不足、权重文件损坏、端口被占用(7860被其他进程占用了)。必须结合日志定位。
chatglm-service STOPPED- 服务已停止,可能是你手动执行了
stop,也可能是上次崩溃后未自动重启(检查Supervisor配置中的autostart和autorestart是否为true)。
关键提醒:
status命令不显示内存/CPU占用,也不反映Gradio界面是否真能响应请求。它只告诉你“进程是否活着”。要确认服务可用性,还需配合端口检测(见3.4节)。
3.2 查看完整服务列表:supervisorctl status
不带参数时,列出所有被监管的服务:
supervisorctl status在CSDN镜像中,你通常只会看到这一行(除非你额外添加了其他服务):
chatglm-service RUNNING pid 12345, uptime 1 day, 3:24:18但这个命令的价值在于:一眼确认没有其他冲突服务在抢资源。例如,如果你同时部署了Stable Diffusion,这里可能会多出sd-webui一行。若发现多个服务都标为RUNNING但ChatGLM响应极慢,大概率是GPU显存被挤占。
3.3 实时追踪服务日志:tail -f /var/log/chatglm-service.log
状态是“活的”,但日志才告诉你它“活得怎么样”。
tail -f /var/log/chatglm-service.log重点关注三类信息:
- 启动阶段:搜索
Loading checkpoint shards、Model loaded in,确认权重加载完成;出现Running on local URL: http://127.0.0.1:7860表示Web服务已就绪。 - 运行阶段:每轮用户提问会记录
User: ...和Bot: ...,这是最直观的“服务确实在工作”的证据。 - 异常阶段:出现
CUDA out of memory(显存溢出)、ConnectionRefusedError(端口拒绝)、OSError: [Errno 24] Too many open files(文件句柄耗尽)等,都是明确的故障信号。
实用技巧:按
Ctrl+C退出实时跟踪后,用以下命令快速查看最近10行错误:grep -i "error\|exception\|fatal\|oom" /var/log/chatglm-service.log | tail -10
3.4 验证端口连通性:ss -tuln | grep :7860
Supervisor说服务在RUNNING,日志说Web已启动,但浏览器打不开?问题很可能出在网络层。
ss -tuln | grep :7860正常返回:
tcp LISTEN 0 128 *:7860 *:* users:(("python",pid=12345,fd=8))LISTEN:表示7860端口正在监听请求*::监听所有IP(包括127.0.0.1和公网IP)users:(...):明确关联到chatglm-service的Python进程
异常情况:
- 无任何输出 → 端口未被监听,服务未真正启动成功(即使Supervisor显示RUNNING,也可能是假状态,需查日志)
- 返回
127.0.0.1:7860而非*:7860→ 仅监听本地回环,外部无法访问(本镜像默认配置为0.0.0.0:7860,若被改过需修正Gradio启动参数)
4. 常见故障场景与一键诊断流程
当服务表现异常时,不要盲目重启。按以下顺序执行4条命令,5分钟内定位90%的问题。
4.1 诊断流程:四步锁定根因
| 步骤 | 命令 | 期望结果 | 异常含义 | 下一步动作 |
|---|---|---|---|---|
| ① 看状态 | supervisorctl status chatglm-service | RUNNING | FATAL/STOPPED/STARTING | 查日志(步骤③) |
| ② 看端口 | ss -tuln | grep :7860 | 显示LISTEN和python进程 | 无输出或监听地址异常 | 检查Gradio配置或重启Supervisor |
| ③ 看日志 | tail -10 /var/log/chatglm-service.log | 最后一行含Running on local URL | 出现Error/OOM/Timeout | 根据错误类型针对性处理(见4.2) |
| ④ 看资源 | nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits | 显存占用 < 总显存的90% | 占用100%或报错 | 清理GPU缓存或重启服务 |
执行建议:将以上4条命令保存为
check-chatglm.sh脚本,一键运行:echo "=== ① Supervisor状态 ==="; supervisorctl status chatglm-service echo -e "\n=== ② 7860端口监听 ==="; ss -tuln | grep :7860 echo -e "\n=== ③ 最近10行日志 ==="; tail -10 /var/log/chatglm-service.log echo -e "\n=== ④ GPU显存占用 ==="; nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits
4.2 典型错误速查表
| 错误现象 | 日志关键词 | 直接原因 | 解决方案 |
|---|---|---|---|
| 服务启动后立即崩溃 | FATAL Exited too quickly | Supervisor判定进程秒退 | 检查/etc/supervisor/conf.d/chatglm.conf中command路径是否正确,directory是否指向/ChatGLM-Service |
| 显存不足(OOM) | CUDA out of memory | 单次推理batch过大或显存被其他进程占用 | 在Gradio界面调低max_length,或执行nvidia-smi --gpu-reset重置GPU |
| 端口被占用 | Address already in use | 7860端口被其他服务(如另一个Gradio实例)占用 | lsof -i :7860查PID,kill -9 <PID>释放,再supervisorctl start chatglm-service |
| 权重文件缺失 | OSError: Unable to load weights | /ChatGLM-Service/model_weights/目录为空或损坏 | 重新下载权重到该目录,确保权限为root:root且可读 |
5. 进阶监控:让服务状态一目了然
对于需要长期稳定运行的生产环境,仅靠手动检查不够。以下是两个轻量级增强方案,无需额外安装软件。
5.1 创建状态快照脚本
将以下内容保存为/usr/local/bin/chatglm-health.sh:
#!/bin/bash echo " ChatGLM-6B 服务健康快照 $(date)" echo "----------------------------------------" echo " Supervisor状态: $(supervisorctl status chatglm-service | awk '{print $2}')" echo " 端口监听: $(ss -tuln | grep :7860 | wc -l) 个进程" echo " 最近日志错误数: $(grep -c -i "error\|exception" /var/log/chatglm-service.log | tail -1)" echo " GPU显存使用: $(nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits | head -1) MB"赋予执行权限并定时运行:
chmod +x /usr/local/bin/chatglm-health.sh # 每5分钟记录一次状态到日志 echo "*/5 * * * * /usr/local/bin/chatglm-health.sh >> /var/log/chatglm-health.log 2>&1" | crontab -5.2 用curl模拟真实访问
Supervisor只管进程,但不管Web是否真能响应。加一条HTTP探测:
# 检查Gradio是否返回首页HTML(非API) if curl -s http://127.0.0.1:7860 | grep -q "Gradio"; then echo "🟢 WebUI 可访问" else echo "🔴 WebUI 不可用,尝试重启服务" supervisorctl restart chatglm-service fi6. 总结:把监控变成日常习惯
监控不是出问题时才做的事,而是让服务保持健康的日常仪式。对ChatGLM-6B这类大模型服务来说,真正的稳定性不在于“一次启动成功”,而在于“每次异常都能被快速发现、准确定位、最小代价恢复”。
回顾本文的核心命令,它们不是孤立的工具,而是一套组合拳:
supervisorctl status是你的“脉搏监测仪”,告诉你心跳是否规律;ss -tuln是“血压计”,确认服务血管是否畅通;tail -f是“听诊器”,捕捉内部细微杂音;nvidia-smi是“血氧仪”,防止GPU过载窒息。
不需要记住所有参数,只需养成习惯:每天早上第一件事,敲一遍supervisorctl status;每次修改配置后,必跟supervisorctl update;遇到问题时,按“状态→端口→日志→资源”四步走。
这样,你管理的就不再是一个随时可能失联的AI模型,而是一个真正可靠、可预期、可掌控的智能对话伙伴。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。