<?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/%e4%bb%bb%e5%8a%a1%e9%98%9f%e5%88%97/feed/" rel="self" type="application/rss+xml" />
	<link>https://95bok.cn</link>
	<description>云烟</description>
	<lastBuildDate>Mon, 13 Apr 2026 08:38:32 +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>低配机器跑 AI Agent 不崩的配置技巧：内存监控 + 任务队列 + 失败自动重试</title>
		<link>https://95bok.cn/%e4%bd%8e%e9%85%8d%e6%9c%ba%e5%99%a8%e8%b7%91-ai-agent-%e4%b8%8d%e5%b4%a9%e7%9a%84%e9%85%8d%e7%bd%ae%e6%8a%80%e5%b7%a7%ef%bc%9a%e5%86%85%e5%ad%98%e7%9b%91%e6%8e%a7-%e4%bb%bb%e5%8a%a1%e9%98%9f/</link>
					<comments>https://95bok.cn/%e4%bd%8e%e9%85%8d%e6%9c%ba%e5%99%a8%e8%b7%91-ai-agent-%e4%b8%8d%e5%b4%a9%e7%9a%84%e9%85%8d%e7%bd%ae%e6%8a%80%e5%b7%a7%ef%bc%9a%e5%86%85%e5%ad%98%e7%9b%91%e6%8e%a7-%e4%bb%bb%e5%8a%a1%e9%98%9f/#respond</comments>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Mon, 13 Apr 2026 08:38:32 +0000</pubDate>
				<category><![CDATA[Docker容器]]></category>
		<category><![CDATA[Linux运维]]></category>
		<category><![CDATA[本地AI]]></category>
		<category><![CDATA[Ollama]]></category>
		<category><![CDATA[任务队列]]></category>
		<category><![CDATA[低配]]></category>
		<category><![CDATA[内存优化]]></category>
		<category><![CDATA[自动重试]]></category>
		<category><![CDATA[配置]]></category>
		<guid isPermaLink="false">https://95bok.cn/%e4%bd%8e%e9%85%8d%e6%9c%ba%e5%99%a8%e8%b7%91-ai-agent-%e4%b8%8d%e5%b4%a9%e7%9a%84%e9%85%8d%e7%bd%ae%e6%8a%80%e5%b7%a7%ef%bc%9a%e5%86%85%e5%ad%98%e7%9b%91%e6%8e%a7-%e4%bb%bb%e5%8a%a1%e9%98%9f/</guid>

					<description><![CDATA[# 低配机器跑 AI Agent 不崩的配置技巧：内存监控 + 任务队列 + 失败自动重试 先说结论：2G 内 ... <a title="低配机器跑 AI Agent 不崩的配置技巧：内存监控 + 任务队列 + 失败自动重试" class="read-more" href="https://95bok.cn/%e4%bd%8e%e9%85%8d%e6%9c%ba%e5%99%a8%e8%b7%91-ai-agent-%e4%b8%8d%e5%b4%a9%e7%9a%84%e9%85%8d%e7%bd%ae%e6%8a%80%e5%b7%a7%ef%bc%9a%e5%86%85%e5%ad%98%e7%9b%91%e6%8e%a7-%e4%bb%bb%e5%8a%a1%e9%98%9f/" aria-label="阅读 低配机器跑 AI Agent 不崩的配置技巧：内存监控 + 任务队列 + 失败自动重试">阅读更多</a>]]></description>
										<content:encoded><![CDATA[<p># 低配机器跑 AI Agent 不崩的配置技巧：内存监控 + 任务队列 + 失败自动重试</p>
<p>先说结论：<strong>2G 内存的机器也能跑本地 AI Agent，但得精打细算。</strong></p>
<p>我在 1G 和 2G 内存的机器上都试过，踩了不少 OOM 的坑。这篇把我总结出来的配置技巧都写下来，给用小鸡的朋友参考。</p>
<hr />
<h2>一、选对模型是第一要务</h2>
<h3>模型推荐（按内存排序）</h3>
<p>| 模型 | 最低内存 | 量化 | 适合场景 |</p>
<table>
<thead>
<tr>
<th>
<hr />
<hr />
</th>
<th>
<hr />
<hr />
<hr />
</th>
<th>
<hr />
<hr />
</th>
<th>
<hr />
<hr />
<hr />
</th>
</tr>
</thead>
<tbody>
<tr>
<td>phi3:mini</td>
<td>2G</td>
<td>Q4_K_M</td>
<td>简单问答、分类</td>
</tr>
<tr>
<td>qwen2.5:1.5b</td>
<td>2G</td>
<td>Q4_K_M</td>
<td>中文理解、翻译</td>
</tr>
<tr>
<td>qwen2.5:3b</td>
<td>4G</td>
<td>Q4_K_M</td>
<td>摘要、分析</td>
</tr>
<tr>
<td>qwen2.5:7b</td>
<td>8G</td>
<td>Q4_K_M</td>
<td>复杂任务、长文本</td>
</tr>
</tbody>
</table>
<p>| llama3.2:3b | 4G | Q4_K_M | 英文为主 |</p>
<p>2G 内存的机器，<strong>只推荐 phi3:mini 或 qwen2.5:1.5b</strong>。</p>
<p>别贪心上 7B，就算能加载，推理时也容易被系统杀掉。</p>
<pre><code class="language-bash"># 拉取小模型
ollama pull phi3:mini
# 或者
ollama pull qwen2.5:1.5b
</code></pre>
<h3>量化版本的选择</h3>
<p>Ollama 默认拉取的就是量化版（Q4_K_M），不用额外操作。但如果你手动拉取 GGUF 文件的话，记住：</p>
<ul>
<li><strong>Q2_K</strong>：最小，但质量损失明显</li>
<li><strong>Q4_K_M</strong>：性价比最高，推荐</li>
<li><strong>Q8_0</strong>：接近原始，但内存翻倍</li>
<li><strong>FP16</strong>：别想了，小鸡跑不动</li>
<hr />
<h2>二、Ollama 配置优化</h2>
<h3>限制上下文窗口</h3>
<p>默认上下文是 8192 token，会吃掉不少内存。2G 机器建议砍到 2048：</p>
<pre><code class="language-bash"># 创建 Ollama 配置
mkdir -p /etc/systemd/system/ollama.service.d
cat &gt; /etc/systemd/system/ollama.service.d/override.conf &lt;&lt; &#039;EOF&#039;
[Service]
Environment=&quot;OLLAMA_HOST=0.0.0.0&quot;
Environment=&quot;OLLAMA_NUM_PARALLEL=1&quot;
Environment=&quot;OLLAMA_MAX_LOADED_MODELS=1&quot;
Environment=&quot;OLLAMA_CONTEXT_LENGTH=2048&quot;
EOF</p><p>systemctl daemon-reload &amp;&amp; systemctl restart ollama
</code></pre>
<p>关键参数：</p>
<li><code>OLLAMA_NUM_PARALLEL=1</code>：只允许一个并发请求</li>
<li><code>OLLAMA_MAX_LOADED_MODELS=1</code>：内存里只留一个模型</li>
<li><code>OLLAMA_CONTEXT_LENGTH=2048</code>：上下文窗口砍到 2048</li>
<h3>设置自动卸载</h3>
<p>Ollama 加载模型后默认 5 分钟才卸载，期间一直占内存。改成 1 分钟：</p>
<pre><code class="language-bash"># 在同一个 override.conf 里加
Environment="OLLAMA_KEEP_ALIVE=1m"
</code></pre>
<p>或者在 API 调用时指定：</p>
<pre><code class="language-bash">curl http://localhost:11434/api/generate -d '{
  "model": "phi3:mini",
  "prompt": "你好",
  "keep_alive": "1m",
  "stream": false
}'
</code></pre>
<hr />
<h2>三、内存监控</h2>
<h3>脚本</h3>
<pre><code class="language-bash">cat &gt; /opt/n8n/mem-monitor.sh &lt;&lt; &#039;SCRIPT&#039;
#!/bin/bash</p><p>MEM_TOTAL=$(free -m | awk '/Mem:/{print $2}')
MEM_USED=$(free -m | awk '/Mem:/{print $3}')
MEM_PCT=$(free -m | awk '/Mem:/{printf "%.0f", $3/$2*100}')
SWAP_USED=$(free -m | awk '/Swap:/{print $3}')</p><p>echo "内存: ${MEM_USED}/${MEM_TOTAL}MB (${MEM_PCT}%)"
echo "Swap: ${SWAP_USED}MB"</p><p># 内存占用 Top 5
echo ""
echo "进程内存 Top 5:"
ps aux --sort=-%mem | head -6 | awk '{printf "  %-8s %sn", $4"%", $11}'</p><p># OOM 风险判断
if [ "$MEM_PCT" -ge 90 ]; then
  echo ""
  echo "&#x26a0; 内存使用率超过 90%！"
  echo "建议操作："
  echo "  1. 杀掉不用的 Docker 容器: docker stop "
  echo "  2. 清理 Ollama 模型: ollama stop "
  echo "  3. 清理系统缓存: sync &amp;&amp; echo 3 &gt; /proc/sys/vm/drop_caches"
fi
SCRIPT</p><p>chmod +x /opt/n8n/mem-monitor.sh
</code></pre>
<h3>配合 cron 使用</h3>
<pre><code class="language-bash"># 每 30 分钟检查一次
(crontab -l 2&gt;/dev/null; echo "*/30 * * * * bash /opt/n8n/mem-monitor.sh &gt;&gt; /var/log/mem-check.log 2&gt;&amp;1") | crontab -
</code></pre>
<hr />
<h2>四、任务队列（防止并发撑爆）</h2>
<h3>问题</h3>
<p>n8n 如果同时触发多个工作流（比如你设了 3 个工作流都在早上 8 点跑），Ollama 会尝试并行处理，内存直接爆。</p>
<h3>解决：用队列串行执行</h3>
<p>在 n8n 设置里：</p>
<pre><code class="language-yaml"># docker-compose.yml 里加
environment:
  - EXECUTIONS_MODE=queue
  - QUEUE_BULL_REDIS_URL=redis://redis:6379
  - N8N_CONCURRENCY_PRODUCTION_LIMIT=1
  - GENERIC_TIMEZONE=Asia/Shanghai
  - TZ=Asia/Shanghai
</code></pre>
<p>加上 Redis：</p>
<pre><code class="language-yaml">services:
  n8n:
    # ... 原有配置
    depends_on:
      - redis
  
  redis:
    image: redis:7-alpine
    container_name: n8n-redis
    restart: unless-stopped
    command: redis-server --maxmemory 64mb --maxmemory-policy allkeys-lru
    deploy:
      resources:
        limits:
          memory: 64M
</code></pre>
<p><code>N8N_CONCURRENCY_PRODUCTION_LIMIT=1</code> 保证同一时间只有一个工作流在跑，其他的排队等。</p>
<hr />
<h2>五、失败自动重试</h2>
<h3>工作流级别的配置</h3>
<p>n8n 每个节点都支持错误重试：</p>
<p>1. 点开节点设置<br />
2. <code>On Error</code> → <code>Retry</code><br />
3. <code>Max Retries</code> → <code>3</code><br />
4. <code>Retry Interval</code> → <code>30s</code>（或指数退避）</p>
<h3>脚本层面的重试</h3>
<pre><code class="language-bash">#!/bin/bash
# 带重试的 Ollama 调用</p><p>call_ollama() {
  local prompt="$1"
  local max_retries=3
  local retry=0
  
  while [ $retry -lt $max_retries ]; do
    response=$(curl -s -m 120 http://127.0.0.1:11434/api/generate 
      -d "{"model":"phi3:mini","prompt":"$prompt","stream":false}" 2&gt;/dev/null)
    
    if [ $? -eq 0 ] &amp;&amp; [ -n "$response" ]; then
      echo "$response"
      return 0
    fi
    
    retry=$((retry + 1))
    echo "调用失败，第 $retry 次重试..."
    sleep $((retry * 10))  # 指数退避
  done
  
  echo "错误：调用 Ollama 失败，已重试 $max_retries 次"
  return 1
}</p><p># 使用
result=$(call_ollama "总结一下今天的新闻")
</code></pre>
<p>关键：</p>
<li>超时设 120 秒（小模型推理慢）</li>
<li>重试间隔递增（10s → 20s → 30s）</li>
<li>最多重试 3 次，别无限重试</li>
</ul>
<hr />
<h2>六、Swap 配置</h2>
<p>2G 内存的机器，<strong>强烈建议加 Swap</strong>。虽然慢，但比 OOM 强。</p>
<pre><code class="language-bash"># 创建 2G Swap 文件
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile</p><p># 写入 fstab 持久化
echo '/swapfile none swap sw 0 0' &gt;&gt; /etc/fstab</p><p># 调整 swappiness（降低对 swap 的依赖）
sysctl vm.swappiness=10
echo 'vm.swappiness=10' &gt;&gt; /etc/sysctl.conf
</code></pre>
<p><code>vm.swappiness=10</code> 的意思是：只有内存真的不够了才用 swap，平时尽量用物理内存。</p>
<hr />
<h2>七、日常维护</h2>
<h3>每周清理</h3>
<pre><code class="language-bash">cat &gt; /opt/n8n/weekly-cleanup.sh &lt;&lt; &#039;SCRIPT&#039;
#!/bin/bash
# 每周清理脚本</p><p>echo "=== $(date) 清理开始 ==="</p><p># 停止不用的容器
docker ps -a --filter "status=exited" -q | xargs -r docker rm
echo "已清理停止的容器"</p><p># 清理悬空镜像
docker image prune -f
echo "已清理悬空镜像"</p><p># 清理 n8n 旧执行记录
sqlite3 /opt/n8n-data/database.sqlite "DELETE FROM execution_data WHERE createdAt &lt; datetime(&#039;now&#039;, &#039;-7 days&#039;);&quot;
echo &quot;已清理 7 天前的执行记录&quot;</p><p># 清理系统日志
journalctl --vacuum-time=3d
echo "已清理 3 天前的系统日志"</p><p>echo "=== 清理完成 ==="
SCRIPT</p><p>chmod +x /opt/n8n/weekly-cleanup.sh</p><p># 每周日 3 点执行
(crontab -l 2&gt;/dev/null; echo "0 3 * * 0 bash /opt/n8n/weekly-cleanup.sh &gt;&gt; /var/log/cleanup.log 2&gt;&amp;1") | crontab -
</code></pre>
<hr />
<h2>总结：2G 机器的配置清单</h2>
<p>| 项目 | 推荐值 |</p>
<table>
<thead>
<tr>
<th>
<hr />
<hr />
</th>
<th>
<hr />
<hr />
<p>&#8212;</th>
</tr>
</thead>
<tbody>
<tr>
<td>模型</td>
<td>phi3:mini 或 qwen2.5:1.5b</td>
</tr>
<tr>
<td>上下文窗口</td>
<td>2048</td>
</tr>
<tr>
<td>并发数</td>
<td>1</td>
</tr>
<tr>
<td>n8n 内存限制</td>
<td>256MB</td>
</tr>
<tr>
<td>Redis 内存限制</td>
<td>64MB</td>
</tr>
<tr>
<td>Swap</td>
<td>2GB</td>
</tr>
<tr>
<td>swappiness</td>
<td>10</td>
</tr>
<tr>
<td>工作流执行间隔</td>
<td>至少间隔 15 分钟</td>
</tr>
</tbody>
</table>
<p>| 执行记录保留 | 3 天 |</p>
<p>按这个配，2G 机器跑一个轻量 AI Agent 问题不大。但别指望它能跑 7B 模型同时处理长文本——那是 8G 以上机器的事。</p>
<p>量力而行，够用就行。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://95bok.cn/%e4%bd%8e%e9%85%8d%e6%9c%ba%e5%99%a8%e8%b7%91-ai-agent-%e4%b8%8d%e5%b4%a9%e7%9a%84%e9%85%8d%e7%bd%ae%e6%8a%80%e5%b7%a7%ef%bc%9a%e5%86%85%e5%ad%98%e7%9b%91%e6%8e%a7-%e4%bb%bb%e5%8a%a1%e9%98%9f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
