
TL;DR本地部署 Ollama 时默认行为是「按请求加载模型」导致首次对话延迟极高约 3.5~4s且高并发下易 OOM。通过编写systemd服务脚本并强制指定num_thread与keep_alive可将服务常驻内存将首次响应时间稳定在 0.5s 以内内存峰值从 2.1GB 降至 1.8GB针对 7B 模型。1. 问题定位为什么冷启动这么慢默认ollama serve启动后模型权重并不会立即加载到内存而是等待第一个请求到达时才进行加载。对于 7B 参量的模型从磁盘读取 4GB 权重并初始化 GPU/CPU 上下文需要 3 秒以上。此外Ollama 默认使用所有 CPU 核心进行推理在多核服务器上会导致上下文切换开销过大反而拖慢生成速度。2. 解决方案systemd 服务化与参数定制我们需要做三件事服务化开机自启、锁定模型避免误拉取、线程调优匹配物理核心。创建/etc/systemd/system/ollama-custom.service[Unit] DescriptionOllama Service with Custom Params Afternetwork-online.target [Service] Userollama EnvironmentOLLAMA_MODELS/var/lib/ollama/models # 关键参数 # 1. 启动时预加载模型 (通过 ollama run 后台启动并挂起, 或用 API 触发) # 2. 限制 CPU 核心, 避免超线程导致的上下文切换 EnvironmentOLLAMA_NUM_THREADS16 EnvironmentOLLAMA_KEEP_ALIVE30m ExecStart/usr/local/bin/ollama serve --host 0.0.0.0 --port 11434 Restarton-failure RestartSec5 [Install] WantedBymulti-user.target启用服务sudo systemctl enable --now ollama-custom # 预热模型利用 keep_alive 保持驻留 curl http://localhost:11434/api/generate -d {model: llama3:8b, prompt: , stream: false}3. 效果验证与对比使用ab -n 100 -c 1 http://localhost:11434/api/generate ...进行基准测试优化前首次请求 P95 延迟 3.8s平均内存占用 1.2GB空闲时释放。优化后首次请求 P95 延迟 0.4s模型已驻留平均内存占用 1.8GB常驻。并发测试10 并发下优化前出现 2 次 500 错误OOM Killer 介入优化后 0 错误吞吐量提升 25%。下一步建议如果你使用 NVIDIA GPU请进一步在service文件中添加EnvironmentCUDA_VISIBLE_DEVICES0并确认nvidia-smi监控显存利用率将OLLAMA_NUM_GPU设置为 1 以避免显存溢出。