AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


Ollama之服务监测程序

发布日期:2025-03-11 05:08:06 浏览次数: 1521 来源:摄星科技
推荐语

高效监控本地DeepSeek-R1服务,确保业务系统稳定运行。

核心内容:
1. 客户私有化部署DeepSeek-R1的需求背景
2. Ollama服务监控程序的设计原理与实现
3. Python代码实现细节及日志配置

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

 

Ollama之服务监测程序

背景描述

最近deepseek-r1大火,有个业务系统,需要在本地接入deepseek-r1,这位客户私有化部署的需求,同时闲置了一张3090卡。给他用Ollma拉取deepseek-r1:32b的模型。一开始都很顺利,谁知道,服务运行一段时间,就莫名奇妙卡死了,试了很多种方法,仍然没找到原因,所以就写了如下的监测程序监控服务,原理很简单,就是定时调用Ollama服务api,如果请求超时,则重启Ollama服务。

代码实现

这边使用Python实现的,创建一个ollama_monitor.py文件。

import requests
import time
import subprocess
import psutil
import logging
import os
from datetime import datetime

OLLAMA_HOST = os.environ.get("OLLAMA_HOST""localhost:11434")
try:
    port = OLLAMA_HOST.split(":")[1]  # 提取端口号
    OLLAMA_API_URL = f"http://localhost:{port}/api/tags"
except IndexError:
    logging.error("OLLAMA_HOST 环境变量格式错误,应为 '主机:端口'")
    port = "11434"#默认端口
    OLLAMA_API_URL = f"http://localhost:{port}/api/tags"

TIMEOUT_SECONDS = 10
RESTART_COMMAND = "ollama ps"

defsetup_logging():
    """配置日志记录器,同时输出到文件和控制台。"""
    log_dir = "logs"
    ifnot os.path.exists(log_dir):
        os.makedirs(log_dir)

    current_time = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
    log_file_path = os.path.join(log_dir, f"ollama_monitor_{current_time}.log")

    # 创建文件处理器
    file_handler = logging.FileHandler(log_file_path)
    file_handler.setLevel(logging.INFO)
    file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    file_handler.setFormatter(file_formatter)

    # 创建控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)
    console_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    console_handler.setFormatter(console_formatter)

    # 获取根日志记录器并添加处理器
    logging.basicConfig(level=logging.INFO, handlers=[file_handler, console_handler])

defcheck_ollama_status():
    """检查 Ollama 状态,如果卡住则返回 True,否则返回 False。"""
    try:
        response = requests.get(OLLAMA_API_URL, timeout=TIMEOUT_SECONDS)
        response.raise_for_status()
        returnFalse
    except requests.exceptions.RequestException as e:
        logging.error(f"Ollama 可能卡住:{e}")
        returnTrue

defrestart_ollama():
    """重启 Ollama 服务。"""
    logging.info("重启 Ollama 服务...")
    try:
        for proc in psutil.process_iter(['pid''name']):
            if proc.info['name'] == 'ollama.exe':
                p = psutil.Process(proc.info['pid'])
                p.terminate()

        subprocess.Popen(RESTART_COMMAND, shell=True)
        logging.info("Ollama 服务已重启。")
    except Exception as e:
        logging.error(f"重启 Ollama 服务失败:{e}")

if __name__ == "__main__":
    setup_logging()
    whileTrue:
        if check_ollama_status():
            restart_ollama()
        sleep_time = int(os.environ.get("OLLAMA_MONITOR_INTERVAL"60))
        time.sleep(sleep_time)

这边检测的是http://localhost:{port}/api/tags 获取模型列表接口,用使用ps接口,没效果。 这边读取了环境变量 OLLAMA_MONITOR_INTERVAL 监控间隔,默认为60秒

安装依赖包

requirements.txt

requests
psutil
pyinstaller

运行 pip install -r requirements.txt

打包程序

在程序目录下执行:pyinstaller --onefile ollama_monitor.py 之后在根目录的dist/ollama_monitor.exe文件。 将该文件拷贝到目标机器上运行即可。

运行

image.png

源码位置: https://github.com/Kimizhao/ollama-monitor.git

 


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询