news 2026/4/20 16:47:04

Ostrakon-VL-8B系统资源监控与C盘清理自动化脚本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ostrakon-VL-8B系统资源监控与C盘清理自动化脚本

Ostrakon-VL-8B系统资源监控与C盘清理自动化脚本

1. 引言

如果你在Windows服务器上跑过Ostrakon-VL-8B这类大模型,肯定遇到过这样的头疼事:模型跑得好好的,突然就报错了,一看日志,要么是C盘空间不足,要么是显存爆了。特别是C盘,日志文件、临时数据、缓存文件不知不觉就占满了,手动清理又麻烦又容易误删重要文件。

更让人心烦的是,这些问题往往在你最忙的时候出现——可能是深夜处理批量任务,也可能是线上服务高峰期。这时候手忙脚乱地去清理磁盘、重启服务,不仅影响工作进度,还可能造成数据丢失。

今天我就分享一套自己用了很久的自动化监控脚本。它能帮你实时盯着服务器的GPU显存、磁盘空间(特别是C盘),还有服务运行状态。一旦C盘空间低于你设定的安全线,脚本就会自动触发清理任务——不是乱删,而是智能地归档旧日志、清理临时文件,确保你的Ostrakon-VL-8B服务能长期稳定运行。

这套脚本最大的好处就是省心。你只需要一次性设置好,它就会在后台默默工作,发现问题自动处理,让你能更专注于模型本身的应用和优化。

2. 脚本环境准备与快速部署

2.1 系统要求与工具准备

这套脚本主要针对Windows服务器环境,特别是那些跑AI模型服务的机器。在开始之前,你需要确认几个基础条件:

  • 操作系统:Windows Server 2016及以上版本,或者Windows 10/11的专业版/企业版。家庭版可能缺少一些管理工具。
  • Python环境:需要Python 3.7或更高版本。脚本用到了几个标准库,一般Python安装都自带。
  • 权限要求:运行脚本的账户需要有管理员权限,这样才能获取系统资源信息和执行清理操作。
  • 基础工具:系统自带的PowerShell(5.1或更高版本)就能用,不需要额外安装。

如果你不确定自己的环境,可以打开PowerShell,分别运行下面两个命令检查:

# 检查Python版本 python --version # 检查PowerShell版本 $PSVersionTable.PSVersion

看到版本号输出就说明环境没问题。

2.2 脚本文件结构与部署

整套脚本包含三个核心文件,分工明确:

  1. monitor_resources.py- 资源监控主脚本
  2. cleanup_c_drive.py- C盘清理专用脚本
  3. run_monitor.bat- 一键启动的批处理文件

我建议你在服务器上创建一个专门目录来存放这些脚本,比如C:\AI_Service_Monitor。这样管理起来方便,也不会和别的文件混在一起。

首先创建这个目录:

# 在PowerShell中创建目录 New-Item -ItemType Directory -Path "C:\AI_Service_Monitor" -Force

然后你可以直接复制我下面提供的脚本代码,在对应的目录里创建这三个文件。或者如果你习惯用git,也可以把脚本仓库克隆到本地。

3. 资源监控脚本详解

3.1 监控脚本核心功能

monitor_resources.py是这个自动化系统的"眼睛",它负责持续检查服务器的各项关键指标。主要监控三个方面:

  • GPU显存使用情况:Ostrakon-VL-8B运行时很吃显存,显存不足会导致模型加载失败或推理中断。
  • 磁盘空间(重点C盘):日志文件、临时数据、模型缓存都会写在C盘,空间不足是服务中断最常见的原因。
  • 模型服务进程状态:检查Ostrakon-VL-8B的服务是否在正常运行,有没有意外崩溃。

脚本会定期(默认每5分钟)检查一次,把结果记录到日志文件,同时如果发现异常(比如C盘空间低于阈值),就会自动调用清理脚本。

3.2 监控脚本完整代码与解析

下面是完整的监控脚本代码,我加了详细注释,方便你理解每一部分的作用:

#!/usr/bin/env python3 """ Ostrakon-VL-8B 系统资源监控脚本 监控GPU显存、磁盘空间、服务状态,自动触发清理任务 """ import psutil import subprocess import json import time import logging import os from datetime import datetime import sys # 配置日志系统 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('C:\\AI_Service_Monitor\\monitor.log'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) class SystemMonitor: def __init__(self): # 监控配置 self.check_interval = 300 # 检查间隔,单位秒(5分钟) self.c_drive_threshold = 10 # C盘空间告警阈值,单位GB self.gpu_memory_threshold = 90 # GPU显存使用率告警阈值,单位% # 服务进程名称(根据你的实际服务名称修改) self.service_process_names = ['python', 'ostrakon', 'vl_service'] # 清理脚本路径 self.cleanup_script = 'C:\\AI_Service_Monitor\\cleanup_c_drive.py' def get_disk_usage(self): """获取所有磁盘分区的使用情况""" disk_info = {} for partition in psutil.disk_partitions(): try: usage = psutil.disk_usage(partition.mountpoint) disk_info[partition.mountpoint] = { 'total_gb': round(usage.total / (1024**3), 2), 'used_gb': round(usage.used / (1024**3), 2), 'free_gb': round(usage.free / (1024**3), 2), 'percent': usage.percent } except Exception as e: logger.warning(f"无法获取分区 {partition.mountpoint} 信息: {e}") return disk_info def get_gpu_memory(self): """获取GPU显存使用情况(需要NVIDIA GPU)""" try: # 使用nvidia-smi命令获取GPU信息 result = subprocess.run( ['nvidia-smi', '--query-gpu=memory.total,memory.used', '--format=csv,noheader,nounits'], capture_output=True, text=True, encoding='utf-8' ) if result.returncode == 0: gpu_info = [] for line in result.stdout.strip().split('\n'): if line: total, used = map(int, line.split(',')) percent = (used / total) * 100 if total > 0 else 0 gpu_info.append({ 'total_mb': total, 'used_mb': used, 'usage_percent': round(percent, 1) }) return gpu_info else: logger.warning("nvidia-smi命令执行失败,可能未安装或GPU不可用") return None except FileNotFoundError: logger.warning("未找到nvidia-smi命令,跳过GPU监控") return None except Exception as e: logger.error(f"获取GPU信息时出错: {e}") return None def check_service_status(self): """检查Ostrakon-VL-8B相关服务是否在运行""" running_services = [] for proc in psutil.process_iter(['pid', 'name', 'cmdline']): try: process_info = proc.info cmdline = ' '.join(process_info['cmdline']) if process_info['cmdline'] else '' # 检查进程名或命令行是否包含服务关键词 for service_name in self.service_process_names: if (service_name.lower() in process_info['name'].lower() or service_name.lower() in cmdline.lower()): running_services.append({ 'pid': process_info['pid'], 'name': process_info['name'], 'cmdline': cmdline[:100] # 只取前100字符 }) break except (psutil.NoSuchProcess, psutil.AccessDenied): continue return running_services def check_c_drive_space(self, disk_info): """检查C盘空间是否低于阈值""" c_drive = disk_info.get('C:\\') if not c_drive: logger.error("未找到C盘信息") return False, None free_gb = c_drive['free_gb'] if free_gb < self.c_drive_threshold: logger.warning(f"C盘空间不足!剩余 {free_gb}GB,低于阈值 {self.c_drive_threshold}GB") return True, free_gb else: logger.info(f"C盘空间正常,剩余 {free_gb}GB") return False, free_gb def trigger_cleanup(self): """触发C盘清理脚本""" if os.path.exists(self.cleanup_script): try: logger.info("C盘空间不足,触发自动清理...") result = subprocess.run( ['python', self.cleanup_script], capture_output=True, text=True, encoding='utf-8' ) if result.returncode == 0: logger.info(f"清理脚本执行成功: {result.stdout}") else: logger.error(f"清理脚本执行失败: {result.stderr}") return result.returncode == 0 except Exception as e: logger.error(f"执行清理脚本时出错: {e}") return False else: logger.error(f"清理脚本不存在: {self.cleanup_script}") return False def run_monitoring_cycle(self): """执行一次完整的监控检查""" logger.info("=" * 50) logger.info(f"开始监控检查 - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") # 1. 检查磁盘空间 disk_info = self.get_disk_usage() logger.info("磁盘使用情况:") for drive, info in disk_info.items(): logger.info(f" {drive}: 总共{info['total_gb']}GB, 已用{info['used_gb']}GB, " f"剩余{info['free_gb']}GB ({info['percent']}%)") # 2. 检查C盘空间,触发清理 c_drive_warning, free_space = self.check_c_drive_space(disk_info) if c_drive_warning: self.trigger_cleanup() # 3. 检查GPU显存 gpu_info = self.get_gpu_memory() if gpu_info: logger.info("GPU显存使用情况:") for i, gpu in enumerate(gpu_info): status = "⚠️ 警告" if gpu['usage_percent'] > self.gpu_memory_threshold else "正常" logger.info(f" GPU{i}: 总共{gpu['total_mb']}MB, " f"已用{gpu['used_mb']}MB ({gpu['usage_percent']}%) - {status}") # 4. 检查服务状态 services = self.check_service_status() if services: logger.info(f"发现 {len(services)} 个相关服务在运行:") for service in services: logger.info(f" PID {service['pid']}: {service['name']}") else: logger.warning("未发现Ostrakon-VL-8B相关服务在运行!") logger.info(f"监控检查完成,{self.check_interval}秒后再次检查") logger.info("=" * 50) def run_continuously(self): """持续运行监控""" logger.info("启动Ostrakon-VL-8B系统资源监控") logger.info(f"检查间隔: {self.check_interval}秒") logger.info(f"C盘告警阈值: {self.c_drive_threshold}GB") logger.info(f"GPU显存告警阈值: {self.gpu_memory_threshold}%") try: while True: self.run_monitoring_cycle() time.sleep(self.check_interval) except KeyboardInterrupt: logger.info("监控被用户中断") except Exception as e: logger.error(f"监控运行出错: {e}") sys.exit(1) if __name__ == "__main__": monitor = SystemMonitor() monitor.run_continuously()

这个脚本的设计有几个关键点值得注意:

  1. 模块化设计:每个功能都有独立的方法,方便你后续修改或扩展。
  2. 容错处理:比如获取GPU信息时,如果机器没有NVIDIA显卡或者没装驱动,脚本会给出警告而不是直接崩溃。
  3. 详细日志:所有操作和状态都会记录到日志文件,方便事后排查问题。
  4. 可配置参数:检查间隔、告警阈值都可以在代码开头轻松修改。

3.3 一键启动批处理文件

为了让监控脚本能在后台持续运行,我准备了一个简单的批处理文件:

@echo off REM Ostrakon-VL-8B 监控脚本启动器 REM 作者:AI服务监控工具 REM 日期:2024年 echo 正在启动Ostrakon-VL-8B系统资源监控... echo 监控日志将保存到 C:\AI_Service_Monitor\monitor.log REM 切换到脚本目录 cd /d "C:\AI_Service_Monitor" REM 检查Python是否可用 python --version >nul 2>&1 if errorlevel 1 ( echo 错误:未找到Python,请先安装Python 3.7或更高版本 pause exit /b 1 ) REM 检查监控脚本是否存在 if not exist "monitor_resources.py" ( echo 错误:未找到监控脚本 monitor_resources.py pause exit /b 1 ) echo 启动监控脚本(按Ctrl+C停止)... echo. REM 运行监控脚本 python monitor_resources.py REM 脚本结束后暂停,方便查看错误信息 echo. echo 监控脚本已停止 pause

这个批处理文件做了几件事:检查Python环境、检查脚本文件、然后启动监控。你只需要双击run_monitor.bat,监控就开始了。

4. C盘智能清理脚本详解

4.1 清理策略与安全考虑

C盘清理是个需要小心操作的事情,不能随便删文件。我的清理脚本遵循几个原则:

  • 安全第一:只清理明确可以清理的文件类型,比如日志、临时文件、缓存。
  • 归档优先:重要的日志文件先压缩归档,再删除原文件,保留历史记录。
  • 保留近期文件:最近的文件不删,避免影响正在运行的服务。
  • 可配置:清理哪些目录、保留多少天的文件,都可以灵活配置。

脚本主要清理以下几类文件:

  1. 应用日志文件:Ostrakon-VL-8B运行产生的日志,保留最近7天,旧的归档后删除。
  2. 系统临时文件:Windows临时目录,清理超过30天的文件。
  3. 用户临时文件:当前用户的Temp目录。
  4. 软件缓存:常见AI工具和浏览器的缓存文件。

4.2 清理脚本完整代码与解析

下面是清理脚本的完整代码,同样加了详细注释:

#!/usr/bin/env python3 """ C盘智能清理脚本 安全清理日志、临时文件、缓存,自动归档重要日志 """ import os import shutil import zipfile import time from datetime import datetime, timedelta import logging import json # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('C:\\AI_Service_Monitor\\cleanup.log'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) class CDriveCleaner: def __init__(self): # 清理配置 self.keep_days = 7 # 保留最近多少天的日志文件 self.archive_days = 30 # 归档多少天前的日志 self.max_temp_age_days = 30 # 临时文件最大保留天数 # 要清理的目录和文件模式 self.cleanup_targets = [ { 'path': 'C:\\AI_Service_Logs', 'patterns': ['*.log', '*.txt'], 'action': 'archive_then_delete', # 先归档再删除 'description': 'AI服务日志目录' }, { 'path': os.environ.get('TEMP', 'C:\\Windows\\Temp'), 'patterns': ['*'], 'action': 'delete_old', 'description': '系统临时目录', 'exclude_dirs': ['正在使用'] # 排除可能正在使用的目录 }, { 'path': os.path.join(os.environ.get('USERPROFILE', ''), 'AppData', 'Local', 'Temp'), 'patterns': ['*'], 'action': 'delete_old', 'description': '用户临时目录' }, { 'path': 'C:\\Users\\Public\\Documents\\AI_Cache', 'patterns': ['*.cache', '*.tmp'], 'action': 'delete_all', 'description': 'AI模型缓存' } ] # 归档目录 self.archive_base = 'C:\\AI_Service_Archives' # 统计信息 self.stats = { 'total_freed': 0, # 总共释放空间(字节) 'files_deleted': 0, 'files_archived': 0, 'errors': 0 } def get_file_age_days(self, filepath): """获取文件最后修改时间(天数)""" try: mtime = os.path.getmtime(filepath) file_time = datetime.fromtimestamp(mtime) now = datetime.now() age = (now - file_time).days return age except Exception as e: logger.warning(f"无法获取文件年龄 {filepath}: {e}") return 0 def safe_delete_file(self, filepath, reason=""): """安全删除文件,记录统计""" try: if os.path.isfile(filepath): file_size = os.path.getsize(filepath) os.remove(filepath) self.stats['total_freed'] += file_size self.stats['files_deleted'] += 1 log_msg = f"删除文件: {filepath} ({file_size:,} 字节)" if reason: log_msg += f" - {reason}" logger.info(log_msg) return True else: logger.warning(f"文件不存在或不是文件: {filepath}") return False except PermissionError: logger.warning(f"无权限删除文件(可能正在使用): {filepath}") return False except Exception as e: logger.error(f"删除文件失败 {filepath}: {e}") self.stats['errors'] += 1 return False def archive_files(self, filepaths, archive_name): """将文件打包为ZIP归档""" archive_dir = os.path.join(self.archive_base, datetime.now().strftime('%Y-%m')) os.makedirs(archive_dir, exist_ok=True) archive_path = os.path.join(archive_dir, f"{archive_name}.zip") try: with zipfile.ZipFile(archive_path, 'a', zipfile.ZIP_DEFLATED) as zipf: archived_count = 0 for filepath in filepaths: if os.path.exists(filepath): # 在ZIP中保存相对路径结构 arcname = os.path.basename(filepath) zipf.write(filepath, arcname) archived_count += 1 if archived_count > 0: self.stats['files_archived'] += archived_count logger.info(f"已归档 {archived_count} 个文件到 {archive_path}") return archive_path else: logger.warning("没有文件需要归档") return None except Exception as e: logger.error(f"创建归档失败: {e}") self.stats['errors'] += 1 return None def process_directory(self, target): """处理一个目录的清理任务""" path = target['path'] patterns = target['patterns'] action = target['action'] description = target['description'] if not os.path.exists(path): logger.warning(f"目录不存在,跳过: {path} ({description})") return logger.info(f"处理目录: {path} ({description})") files_to_archive = [] files_to_delete = [] # 收集所有匹配的文件 for pattern in patterns: import glob matched_files = glob.glob(os.path.join(path, '**', pattern), recursive=True) for filepath in matched_files: # 跳过排除的目录 skip = False for exclude in target.get('exclude_dirs', []): if exclude in filepath: skip = True break if skip: continue age_days = self.get_file_age_days(filepath) if action == 'archive_then_delete': if age_days > self.archive_days: files_to_delete.append(filepath) elif age_days > self.keep_days: files_to_archive.append(filepath) elif action == 'delete_old': if age_days > self.max_temp_age_days: files_to_delete.append(filepath) elif action == 'delete_all': files_to_delete.append(filepath) # 执行归档 if files_to_archive: archive_name = f"{description}_{datetime.now().strftime('%Y%m%d_%H%M%S')}" self.archive_files(files_to_archive, archive_name) # 执行删除 for filepath in files_to_delete: reason = "" if action == 'archive_then_delete': reason = f"超过归档期限 ({self.archive_days}天)" elif action == 'delete_old': reason = f"超过保留期限 ({self.max_temp_age_days}天)" self.safe_delete_file(filepath, reason) def cleanup_windows_temp(self): """专门清理Windows临时目录""" temp_paths = [ 'C:\\Windows\\Temp\\*', 'C:\\Windows\\Logs\\*', os.path.join(os.environ.get('WINDIR', 'C:\\Windows'), 'SoftwareDistribution\\Download\\*') ] for temp_pattern in temp_paths: import glob temp_files = glob.glob(temp_pattern) for filepath in temp_files: try: age_days = self.get_file_age_days(filepath) if age_days > 7: # Windows临时文件保留7天 if os.path.isfile(filepath): self.safe_delete_file(filepath, "Windows临时文件") elif os.path.isdir(filepath): # 尝试删除空目录 try: os.rmdir(filepath) logger.info(f"删除空目录: {filepath}") except: pass # 目录非空,跳过 except Exception as e: logger.warning(f"处理Windows临时文件失败 {filepath}: {e}") def run_cleanup(self): """执行完整的清理流程""" logger.info("=" * 60) logger.info(f"开始C盘清理 - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") logger.info(f"保留最近 {self.keep_days} 天的日志") logger.info(f"归档 {self.archive_days} 天前的日志") logger.info(f"清理超过 {self.max_temp_age_days} 天的临时文件") logger.info("=" * 60) start_time = time.time() # 创建归档目录 os.makedirs(self.archive_base, exist_ok=True) # 处理所有目标目录 for target in self.cleanup_targets: self.process_directory(target) # 额外清理Windows临时文件 self.cleanup_windows_temp() # 计算并显示统计信息 end_time = time.time() duration = end_time - start_time freed_gb = self.stats['total_freed'] / (1024**3) logger.info("=" * 60) logger.info("清理完成统计:") logger.info(f" 释放空间: {freed_gb:.2f} GB") logger.info(f" 删除文件: {self.stats['files_deleted']} 个") logger.info(f" 归档文件: {self.stats['files_archived']} 个") logger.info(f" 错误数量: {self.stats['errors']} 个") logger.info(f" 耗时: {duration:.1f} 秒") logger.info("=" * 60) # 返回清理结果 return { 'freed_gb': freed_gb, 'files_deleted': self.stats['files_deleted'], 'files_archived': self.stats['files_archived'], 'errors': self.stats['errors'], 'duration_seconds': duration } if __name__ == "__main__": cleaner = CDriveCleaner() result = cleaner.run_cleanup() # 将结果保存为JSON,方便监控脚本读取 result_file = 'C:\\AI_Service_Monitor\\last_cleanup.json' with open(result_file, 'w', encoding='utf-8') as f: json.dump(result, f, indent=2) logger.info(f"清理结果已保存到: {result_file}")

这个清理脚本有几个实用的设计:

  1. 分级清理策略:不同目录用不同的清理策略,重要日志先归档再删除,临时文件直接删除。
  2. 安全防护:删除前检查文件年龄,排除可能正在使用的文件。
  3. 完整日志:每个操作都有记录,方便追踪和审计。
  4. 统计报告:清理完成后显示详细的统计信息。

4.3 清理脚本的配置调整

你可能需要根据自己服务器的实际情况调整清理配置。主要修改__init__方法里的这几个参数:

# 在 CDriveCleaner 类的 __init__ 方法中修改这些值 # 保留最近多少天的日志文件(不删除) self.keep_days = 7 # 归档多少天前的日志(超过这个天数的删除,7-30天之间的归档) self.archive_days = 30 # 临时文件最大保留天数 self.max_temp_age_days = 30 # 清理目标目录 - 根据你的实际目录调整 self.cleanup_targets = [ { 'path': 'C:\\你的日志目录', # 修改为你的实际日志目录 'patterns': ['*.log', '*.txt'], 'action': 'archive_then_delete', 'description': '你的服务日志' }, # ... 其他目录 ]

如果你不知道日志文件在哪里,可以先运行Ostrakon-VL-8B服务,然后在任务管理器中找到对应的进程,右键"打开文件位置",就能找到日志目录了。

5. 监控系统的部署与使用

5.1 完整部署步骤

现在我们把所有脚本整合起来,完成整个监控系统的部署:

  1. 创建监控目录

    mkdir C:\AI_Service_Monitor cd C:\AI_Service_Monitor
  2. 创建监控脚本用文本编辑器创建monitor_resources.py,复制上面的监控脚本代码保存。

  3. 创建清理脚本创建cleanup_c_drive.py,复制上面的清理脚本代码保存。

  4. 创建启动脚本创建run_monitor.bat,复制上面的批处理代码保存。

  5. 安装Python依赖监控脚本只需要psutil这个库,如果还没安装,运行:

    pip install psutil
  6. 测试脚本先手动运行一次清理脚本,检查是否有权限问题:

    python cleanup_c_drive.py

    然后测试监控脚本:

    python monitor_resources.py

    按Ctrl+C停止测试。

  7. 配置为计划任务(可选)如果你希望监控脚本开机自启动,可以配置为Windows计划任务:

    • 打开"任务计划程序"
    • 创建基本任务
    • 触发器设为"计算机启动时"
    • 操作为"启动程序",程序填C:\AI_Service_Monitor\run_monitor.bat
    • 勾选"不管用户是否登录都要运行"

5.2 日常使用与维护

部署完成后,日常使用非常简单:

  • 启动监控:双击run_monitor.bat,或者如果配置了计划任务,重启电脑后会自动启动。
  • 查看日志:监控日志在C:\AI_Service_Monitor\monitor.log,清理日志在cleanup.log
  • 查看清理结果:每次清理的统计信息会保存到last_cleanup.json
  • 归档文件:归档的日志ZIP文件在C:\AI_Service_Archives目录下,按年月组织。

监控脚本运行后,你会在日志中看到类似这样的输出:

2024-01-15 10:00:00 - INFO - 开始监控检查 - 2024-01-15 10:00:00 2024-01-15 10:00:00 - INFO - 磁盘使用情况: 2024-01-15 10:00:00 - INFO - C:\: 总共237GB, 已用210GB, 剩余27GB (88%) 2024-01-15 10:00:00 - INFO - D:\: 总共931GB, 已用320GB, 剩余611GB (34%) 2024-01-15 10:00:00 - INFO - C盘空间正常,剩余27GB 2024-01-15 10:00:01 - INFO - GPU显存使用情况: 2024-01-15 10:00:01 - INFO - GPU0: 总共24576MB, 已用18432MB (75%) - 正常 2024-01-15 10:00:01 - INFO - 发现2个相关服务在运行: 2024-01-15 10:00:01 - INFO - PID 1234: python.exe 2024-01-15 10:00:01 - INFO - PID 5678: ostrackon_service.exe

当C盘空间不足时,你会看到清理被触发:

2024-01-15 14:00:00 - WARNING - C盘空间不足!剩余8GB,低于阈值10GB 2024-01-15 14:00:00 - INFO - C盘空间不足,触发自动清理... 2024-01-15 14:00:05 - INFO - 清理脚本执行成功: 释放空间: 15.2 GB...

5.3 常见问题与解决

在实际使用中可能会遇到一些问题,这里是一些常见情况的处理:

问题1:脚本没有权限删除某些文件

  • 原因:文件可能被其他程序占用,或者需要管理员权限。
  • 解决:以管理员身份运行PowerShell,然后执行脚本。或者检查文件是否被其他程序打开。

问题2:GPU监控显示"未找到nvidia-smi命令"

  • 原因:服务器没有NVIDIA显卡,或者没安装显卡驱动。
  • 解决:如果有GPU但没显示,安装NVIDIA驱动和CUDA工具包。如果确实没有GPU,可以注释掉GPU监控部分。

问题3:监控脚本占用CPU过高

  • 原因:检查间隔太短,或者脚本有bug。
  • 解决:调整check_interval参数,从300秒(5分钟)改为600秒(10分钟)或更长。

问题4:清理脚本删除了重要文件

  • 原因:清理目标目录配置错误。
  • 解决:立即停止脚本,检查cleanup_targets配置,确保只包含正确的目录。重要文件可以从归档ZIP中恢复。

问题5:服务进程检测不到

  • 原因:进程名称配置不正确。
  • 解决:修改service_process_names列表,添加你实际的服务进程名称。可以在任务管理器中查看进程的准确名称。

6. 总结

这套自动化监控脚本用下来,最大的感受就是省心。以前需要时不时手动检查服务器状态,现在脚本自动帮你盯着,C盘快满了自动清理,服务异常了及时告警。对于跑Ostrakon-VL-8B这类大模型的服务来说,稳定性太重要了,一个小问题就可能导致服务中断,影响线上业务。

脚本的设计考虑了实际使用中的各种情况。比如清理不是简单删除,而是先归档再删除,这样即使误删了重要日志也能找回。监控也不是简单的检查,而是结合了磁盘、GPU、服务状态多个维度,能更全面地反映系统健康状况。

实际部署时,建议你先在测试环境跑几天,观察日志输出,确认清理策略符合预期,然后再上生产环境。根据自己服务器的实际情况,调整一下检查间隔和清理阈值,找到最适合的配置。

如果后续有新的监控需求,比如想监控网络流量或者特定端口的服务状态,可以基于现有脚本扩展,模块化的设计让添加新功能比较方便。希望这套脚本能帮你解决服务器维护的烦恼,让你更专注于模型应用本身。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 4:53:45

猫抓浏览器扩展:三步快速上手网页资源嗅探与下载工具

猫抓浏览器扩展&#xff1a;三步快速上手网页资源嗅探与下载工具 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为无法下载网页视频、音频等资…

作者头像 李华
网站建设 2026/4/20 7:28:18

AI技术赋能毕业设计:8款工具优化论文与代码创作流程

文章总结表格&#xff08;工具排名对比&#xff09; 工具名称 核心优势 aibiye 精准降AIGC率检测&#xff0c;适配知网/维普等平台 aicheck 专注文本AI痕迹识别&#xff0c;优化人类表达风格 askpaper 快速降AI痕迹&#xff0c;保留学术规范 秒篇 高效处理混AIGC内容&…

作者头像 李华
网站建设 2026/4/19 4:53:33

云安全最佳实践

云安全最佳实践&#xff1a;守护数字时代的核心资产 在数字化转型加速的今天&#xff0c;云计算已成为企业运营的核心基础设施。随着云服务的普及&#xff0c;安全威胁也日益复杂化。从数据泄露到恶意攻击&#xff0c;云环境的安全风险不容忽视。如何通过最佳实践保障云上资产…

作者头像 李华
网站建设 2026/4/20 11:26:57

RVC开源贡献指南:如何为RVC WebUI新增语言/功能模块

RVC开源贡献指南&#xff1a;如何为RVC WebUI新增语言/功能模块 1. 引言&#xff1a;从使用者到贡献者 你可能已经用RVC WebUI玩过AI翻唱&#xff0c;或者用它把自己的声音变成各种有趣的音色。这个工具确实强大&#xff0c;3分钟就能训练一个新模型&#xff0c;让语音转换变…

作者头像 李华
网站建设 2026/4/20 7:26:53

学习日记DAY29

今日完成的任务&#xff1a;1.3道算法2.5条八股

作者头像 李华