<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>监控 &#8211; 95博客</title>
	<atom:link href="https://95bok.cn/tag/%E7%9B%91%E6%8E%A7/feed/" rel="self" type="application/rss+xml" />
	<link>https://95bok.cn</link>
	<description>云烟</description>
	<lastBuildDate>Thu, 09 Apr 2026 08:49:57 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://95bok.cn/wp-content/uploads/2025/11/cropped-1740116058152-32x32.jpg</url>
	<title>监控 &#8211; 95博客</title>
	<link>https://95bok.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Ollama 多模型同时运行 + 资源监控：避免 OOM 崩溃的实用配置</title>
		<link>https://95bok.cn/ollama-multi-model-resource-monitoring/</link>
					<comments>https://95bok.cn/ollama-multi-model-resource-monitoring/#respond</comments>
		
		<dc:creator><![CDATA[云烟]]></dc:creator>
		<pubDate>Thu, 09 Apr 2026 07:00:00 +0000</pubDate>
				<category><![CDATA[本地AI]]></category>
		<category><![CDATA[Ollama]]></category>
		<category><![CDATA[OOM]]></category>
		<category><![CDATA[监控]]></category>
		<category><![CDATA[资源管理]]></category>
		<guid isPermaLink="false">https://95bok.cn/?p=380</guid>

					<description><![CDATA[多个模型同时跑的时候，内存管理不当很容易 OOM。这篇就讲怎么控制，别等机器崩了才想办法。 Ollama 是怎 ... <a title="Ollama 多模型同时运行 + 资源监控：避免 OOM 崩溃的实用配置" class="read-more" href="https://95bok.cn/ollama-multi-model-resource-monitoring/" aria-label="阅读 Ollama 多模型同时运行 + 资源监控：避免 OOM 崩溃的实用配置">阅读更多</a>]]></description>
										<content:encoded><![CDATA[<p>多个模型同时跑的时候，内存管理不当很容易 OOM。这篇就讲怎么控制，别等机器崩了才想办法。</p>
<hr />
<h2>Ollama 是怎么管理模型的</h2>
<p>每次请求，Ollama 按需加载模型到内存。关键是加载后不会立刻卸载——有个 5 分钟的 keep alive 时间。这段时间里模型占着内存等下一个请求，来了就不用重新加载。</p>
<p>这本来是好事。但如果你连续切几个模型，比如先调 qwen 做翻译，再调 llama 写代码，再调 gemma 做总结，三个模型同时占着内存，可能直接就爆了。</p>
<hr />
<h2>查看当前加载的模型</h2>
<pre><code class="language-bash">ollama ps</code></pre>
<p>输出类似：</p>
<pre>NAME              ID           SIZE     PROCESSOR    UNTIL
qwen2.5:7b        1234abcd     4.7 GB   100% GPU     4m30s from now
llama3.1:8b       5678efgh     4.9 GB   100% GPU     2m15s from now</pre>
<p>能看到每个模型占了多少、跑在 CPU 还是 GPU、还有多久自动卸载。</p>
<hr />
<h2>控制模型驻留时间</h2>
<p>每次请求可以指定 keep_alive：</p>
<pre><code class="language-bash"># 10分钟后才卸载
curl http://localhost:11434/api/chat -d '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"你好"}],"keep_alive":"10m"}'

# 用完立刻卸载
curl http://localhost:11434/api/chat -d '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"你好"}],"keep_alive":"0s"}'

# 永久驻留（只要内存够就不卸载）
curl http://localhost:11434/api/chat -d '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"你好"}],"keep_alive":"-1"}'</code></pre>
<p>嫌每次指定麻烦，直接改全局默认：</p>
<pre><code class="language-bash">sudo systemctl edit ollama
[Service]
Environment="OLLAMA_KEEP_ALIVE=2m"  # 改成2分钟，更快释放
# 或者
Environment="OLLAMA_KEEP_ALIVE=0s"  # 用完就释放</code></pre>
<hr />
<h2>防止 OOM 的几个配置</h2>
<p><strong>限制上下文窗口</strong>——这是吃内存大户。8G 机器控制在 2048 或 4096，16G 可以开到 8192。Modelfile 里加 <code>PARAMETER num_ctx 2048</code>。</p>
<p><strong>限制同时加载的模型数</strong>：</p>
<pre><code class="language-bash">Environment="OLLAMA_MAX_LOADED_MODELS=2"</code></pre>
<p><strong>GPU 显存不够</strong>的话可以控制多少层放 GPU：</p>
<pre><code class="language-bash">ollama show qwen2.5:7b --modelfile &gt; /tmp/MF
echo "PARAMETER num_gpu 20" &gt;&gt; /tmp/MF  # 假设模型有32层，只放20层到GPU
ollama create qwen2.5:7b-partial -f /tmp/MF</code></pre>
<hr />
<h2>遇到 OOM 了怎么办</h2>
<p>紧急处理：</p>
<pre><code class="language-bash"># 卸载所有模型
curl -X POST http://localhost:11434/api/ps

# 重启 Ollama
sudo systemctl restart ollama</code></pre>
<p>排查原因：</p>
<pre><code class="language-bash">dmesg | grep -i "out of memory|oom"
journalctl -u ollama --since "1 hour ago"</code></pre>
<hr />
<h2>监控脚本</h2>
<p>简单跑个后台，内存超过阈值自动卸载模型：</p>
<pre><code class="language-bash">#!/bin/bash
while true; do
    MEM=$(free | awk '/Mem:/ {printf "%.0f", $3/$2 * 100}')
    if [ "$MEM" -ge 90 ]; then
        echo "[$(date)] 内存 ${MEM}%，卸载所有模型"
        curl -s -X POST http://localhost:11434/api/ps
    fi
    sleep 10
done</code></pre>
<p>后台跑着：<code>nohup bash ~/ollama-watch.sh &gt; /var/log/ollama-watch.log 2&gt;&amp;1 &amp;</code></p>
]]></content:encoded>
					
					<wfw:commentRss>https://95bok.cn/ollama-multi-model-resource-monitoring/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker 运维实战：备份、迁移、端口映射、日志监控、资源限制</title>
		<link>https://95bok.cn/docker-operations-backup-migrate-monitoring/</link>
					<comments>https://95bok.cn/docker-operations-backup-migrate-monitoring/#respond</comments>
		
		<dc:creator><![CDATA[云烟]]></dc:creator>
		<pubDate>Thu, 09 Apr 2026 06:05:39 +0000</pubDate>
				<category><![CDATA[Docker容器]]></category>
		<category><![CDATA[未分类]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[备份]]></category>
		<category><![CDATA[监控]]></category>
		<category><![CDATA[运维]]></category>
		<guid isPermaLink="false">https://95bok.cn/docker-operations-backup-migrate-monitoring/</guid>

					<description><![CDATA[Docker 跑起来只是第一步。备份、迁移、日志、资源限制——这些日常运维的东西，实际用到了才知道有多重要。  ... <a title="Docker 运维实战：备份、迁移、端口映射、日志监控、资源限制" class="read-more" href="https://95bok.cn/docker-operations-backup-migrate-monitoring/" aria-label="阅读 Docker 运维实战：备份、迁移、端口映射、日志监控、资源限制">阅读更多</a>]]></description>
										<content:encoded><![CDATA[<p>Docker 跑起来只是第一步。备份、迁移、日志、资源限制——这些日常运维的东西，实际用到了才知道有多重要。</p>
<hr />
<h2>数据备份</h2>
<h3>Volume 备份</h3>
<pre><code class="language-bash">docker run --rm 
  -v ollama_ollama-data:/data 
  -v $(pwd):/backup 
  alpine tar czf /backup/ollama-backup-$(date +%F).tar.gz -C /data .</code></pre>
<p>恢复就是反过来 tar xzf。</p>
<h3>compose 文件放 Git</h3>
<p>配置文件比数据更重要——没有 compose 文件，连容器都起不来。建议放 Git 仓库里管理。</p>
<h3>自动备份脚本</h3>
<p>每周定时跑一次，清理 30 天前的旧备份：</p>
<pre><code class="language-bash">#!/bin/bash
BACKUP_DIR="/data/backups/docker"
mkdir -p $BACKUP_DIR
for vol in $(docker volume ls -q); do
  docker run --rm -v $vol:/data:ro -v $BACKUP_DIR:/backup alpine tar czf /backup/${vol}-$(date +%F).tar.gz -C /data .
done
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete</code></pre>
<p>加 cron：<code>0 3 * * 0 /usr/local/bin/docker-backup.sh</code></p>
<hr />
<h2>迁移到另一台服务器</h2>
<pre><code class="language-bash"># 旧服务器
cd /opt/ai-stack
docker compose down
tar czf /tmp/ai-stack.tar.gz /opt/ai-stack
scp /tmp/ai-stack.tar.gz root@新IP:/tmp/

# 新服务器
tar xzf /tmp/ai-stack.tar.gz -C /
curl -fsSL https://get.docker.com | sh
cd /opt/ai-stack &amp;&amp; docker compose up -d</code></pre>
<p>模型数据也在 tar 里的话，不需要重新拉。直接能用。</p>
<hr />
<h2>端口映射</h2>
<p>只监听本机最安全：<code>127.0.0.1:3000:8080</code>。外面通过 Nginx 反代访问。</p>
<p>冲突排查：<code>ss -tlnp | grep 3000</code> 看哪个进程占了端口。或者 <code>docker ps --format "table {{.Names}}t{{.Ports}}"</code>。</p>
<hr />
<h2>日志管理</h2>
<p><strong>限制日志大小。</strong>这个很重要，不限制的话跑几个月吃满磁盘：</p>
<pre><code class="language-bash">cat &gt; /etc/docker/daemon.json &lt;&lt; &#039;EOF&#039;
{
  &quot;log-driver&quot;: &quot;json-file&quot;,
  &quot;log-opts&quot;: {
    &quot;max-size&quot;: &quot;50m&quot;,
    &quot;max-file&quot;: &quot;3&quot;
  }
}
EOF
systemctl restart docker</code></pre>
<p>每个容器最多 3 个日志文件，每个 50MB。</p>
<h3>清理旧日志</h3>
<pre><code class="language-bash">for f in $(find /var/lib/docker/containers/ -name "*.log"); do
  truncate -s 0 $f
done</code></pre>
<hr />
<h2>资源限制</h2>
<p>默认容器能吃多少吃多少。Ollama 把内存吃光，MySQL 和 Nginx 也会跟着挂。限制一下：</p>
<pre><code class="language-yaml">services:
  ollama:
    deploy:
      resources:
        limits:
          memory: 8G
          cpus: "4"
        reservations:
          memory: 4G</code></pre>
<p>这样即使 Ollama 出问题，也不会把整台机器拖死。</p>
<hr />
<h2>健康检查</h2>
<pre><code class="language-yaml">services:
  ollama:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:11434"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s</code></pre>
<p>查看状态：<code>docker ps --format "table {{.Names}}t{{.Status}}"</code></p>
<hr />
<h2>常用命令</h2>
<p><code>docker stats</code> 看实时资源占用。<code>docker system df</code> 看磁盘使用。</p>
<p>更新服务：<code>docker compose pull &amp;&amp; docker compose up -d</code>。</p>
<p>清理悬空镜像：<code>docker image prune</code>。慎用 <code>docker system prune -a</code>，会删掉所有不用的镜像。</p>
<p>Ollama 的模型数据在 volume 里，不在 Docker image 里。清理 Docker 镜像不会删模型。模型用 <code>ollama rm 模型名</code> 删。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://95bok.cn/docker-operations-backup-migrate-monitoring/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
