123 lines
7.0 KiB
Markdown
123 lines
7.0 KiB
Markdown
# OpenList 卡顿优化方案 v2(含 CF 源保留 + 决策点 + 操作排期)
|
||
|
||
> 对象:容器 `1Panel-openlist-9Tuc` / 镜像 `openlistteam/openlist:v4.2.5` / 1Panel
|
||
> 数据目录:`/opt/1panel/apps/openlist/openlist/data`
|
||
> 状态:2026-09-06 只读诊断完成。28pan / sakura Cloudreve **在用且保留**(偶发 CF 假死)。**此文件为待决策方案**,未执行任何改动。
|
||
> 执行前先在 1Panel 备份该应用(或至少 `cp -a data`)。
|
||
|
||
---
|
||
|
||
## 0. 诊断结论速览(v2 修正)
|
||
|
||
| 项 | 实测 | 结论 |
|
||
|---|---|---|
|
||
| 数据库 | SQLite `data.db` 76KB,`x_meta`=0 行 | 只是配置库,无本地文件索引 |
|
||
| 缓存 | 3 源 30s,Local/139 = **0(从不缓存)** | 冷/大数据目录每次实时拉远端 |
|
||
| 搜索 | meilisearch 指向 `localhost:7700` 但**未部署** | 搜索实时遍历,无索引 |
|
||
| **出口代理** | 宿主设 `http_proxy/https_proxy=http://127.0.0.1:7890`、`ALL_PROXY=socks5://127.0.0.1:7890`(FlClash/Clash 类) | **关键**:openlist 访问 CF 源很可能经由该代理,代理抽风 → 源"假死" |
|
||
| **CF 源真因** | sakura DNS 只回 AAAA(2606:4700)+A(104.21);**宿主无 IPv6 默认路由**;直连 TCP 443 秒通,但 HTTPS 时通时超时 | 双层问题:①无 IPv6 出口却拿到 AAAA;②CF 应用层对出口间歇限流/掐断 → 偶发假死 |
|
||
| 自身性能 | 本地 API <2ms;容器 CPU ~0%、内存 587MB | 非资源瓶颈 |
|
||
|
||
**一句话根因**:OpenList 实时聚合多个远端源;其中 2 个 CF 源因"无 IPv6 出口 + 走抖动代理 + CF 偶发掐断"会间歇超时;数据越多 → 请求 CF 越频繁 → 越容易撞上假死窗口 → 整体越卡。
|
||
|
||
---
|
||
|
||
## 1. 方案总览(分 A/B/C 三档,可独立勾选执行)
|
||
|
||
### 档 A:保留 2 个 CF 源,做「绕代理 + IPv4 + 缓存」加固(推荐先做)
|
||
|
||
**A1|让 openlist 直连出网,不走 127.0.0.1:7890 抖动代理**
|
||
- 影响面:仅 openlist 这一个容器。宿主其他程序仍走代理。
|
||
- 做法:
|
||
1. 1Panel 应用编排(compose)给 openlist 增加环境变量 `NO_PROXY=*` / `no_proxy=*`(对 Go 应用需确认其代理读取实现;openlist 基于 Go,多数库读 `HTTP_PROXY`/`NO_PROXY`)。
|
||
2. 若 openlist 镜像默认信任系统代理,则用 `HTTP_PROXY=` 置空或设 `NO_PROXY=*`。
|
||
- 收益:CF 源不再随 7890 抖动而假死;直连可稳定复用 CF 边缘(实测直连 TCP 秒通)。
|
||
- 风险:低。仅容器代理行为变化;无数据改动。
|
||
|
||
**A2|规避无 IPv6 出口却解析到 AAAA**
|
||
- 根因:sakura DNS 返回 `2606:4700:...`(AAAA),宿主**没有 IPv6 默认路由** → Go 解析优先尝试 v6 → `network is unreachable` 超时。
|
||
- 做法(任一):
|
||
1. **首选**:给这两个域名在宿主/DNS 层固定 A 记录(hosts 或内部 DNS 覆写为 `104.21.x.x`),或让 DNS 只回 A。
|
||
2. 或:临时确认 openlist 是否支持 `ForceIPV4`/`ForceHostname` 类配置(需查该版本);若无则用 hosts 覆写最直接。
|
||
- 收益:消除一半以上"假死"来源。
|
||
- 风险:极低。不破坏源可用性,回滚=删掉 hosts 行。
|
||
|
||
**A3|保留源 + 调大缓存(按原表)**
|
||
- 给 5 个在用源按下表把 `cache_expiration` 调大(**28pan / sakura 保留,同样调大**,命中缓存时即使源假死,目录也能秒开):
|
||
|
||
| 挂载 | driver | 当前 cache | 建议 |
|
||
|---|---|---|---|
|
||
| /hi168s3 | S3 | 30s | 3600s |
|
||
| /189pan/oba | 189CloudPC | 30s | 3600s |
|
||
| /chunyu_local | Local | **0** | 600~3600s |
|
||
| /chunyu_139 | 139Yun | **0** | 600~3600s |
|
||
| /星辰云盘 | WebDav | 30s | 1800s |
|
||
| /drive.sakura… | Cloudreve V4 | 30s | 3600s(源易假死→高缓存收益最大) |
|
||
| /28pan webdav | WebDav | 30s | 3600s(同上) |
|
||
|
||
### 档 B:补搜索索引(meilisearch)— 中等改动,可选
|
||
- 部署一个 meilisearch 容器(同 `1panel-network`),改 config 指向它并配 `api_key`,重建索引。
|
||
- 效果:搜索从实时遍历 → 本地索引 <1s。
|
||
- 成本:多一个容器 + 首次全量建索引时间。
|
||
|
||
### 档 C:稳定性 / 维护(低风险顺手项)
|
||
1. 设容器资源上限(1Panel 改 compose:`cpus=4, memory=4GiB`)。
|
||
2. 清理旧日志(`/` 76%):`data/log` 50MB 旧档可删/轮转。
|
||
3. 可选:给 2 个 CF 源配置更短的失败超时/重试,减少假死窗口内的等待。
|
||
|
||
---
|
||
|
||
## 2. 决策点(请逐项拍板)
|
||
|
||
| # | 决策 | 选项 | 我的建议 |
|
||
|---|---|---|---|
|
||
| D1 | A1 让 openlist **绕开 7890 代理直连**? | ① 直连(NO_PROXY=*) ② 保持走代理 | **①**(直连 TCP 实测更稳) |
|
||
| D2 | A2 对 sakura/28pan 做 **IPv4 hosts 覆写**? | ① 做(固定 A 记录)② 不做 | **①**(消除 v6 超时) |
|
||
| D3 | A3 缓存表按上表**统一调大**? | ① 全按建议 ② 只调 CF 两个源 ③ 自定义 | **①** |
|
||
| D4 | B 档是否**部署 meilisearch**? | ① 是 ② 否 | ②(先做 A 档见效;B 可后续) |
|
||
| D5 | C 档资源上限 / 清日志是否执行? | ① 都做 ② 只清日志 ③ 都不 | **①** |
|
||
| D6 | 执行顺序 | A→C 分步、逐步验证 | 分步 |
|
||
|
||
---
|
||
|
||
## 3. 操作时间表(建议排期,均需维护窗口/低峰)
|
||
|
||
> 说明:每步之间隔开观察;改 compose/重启容器会造成 openlist 短时重启(秒级~数十秒)。
|
||
|
||
| 时段 | 操作 | 影响 | 回滚 |
|
||
|---|---|---|---|
|
||
| **T0(5 分钟)** | 1Panel 对该应用做备份/快照 | 无 | — |
|
||
| **T1(10 分钟)** | A1:compose 加 `NO_PROXY=*` 并重启容器 | openlist 重启 | 移除该环境变量重启 |
|
||
| **T2(15 分钟)** | A2:hosts 覆写 sakura/28pan → IPv4;重启或 reload | 同上 | 删除 hosts 行 |
|
||
| **T3(10 分钟)** | A3:调大 5~7 个源 cache_expiration;WebUI 保存/重启 | 同上 | 恢复原值 |
|
||
| **T4(验证 15 分钟)** | 逐源列目录/搜索实测;看 docker log 错误量 | 无 | — |
|
||
| **T5(可选)** | B 档 meilisearch(若 D4=是) | 多一容器 | 停容器即可 |
|
||
| **T6(可选)** | C 档资源上限 + 清日志 | 无业务影响 | 还原配置 |
|
||
|
||
**总窗口预估**:只做 A 档 ≈ **40 分钟**;加 B/C ≈ **60–90 分钟**。
|
||
**建议执行时间**:业务低峰(如深夜 00:00–02:00,当前时段流量最低时)执行 T1–T3,T4 观察半小时。
|
||
|
||
---
|
||
|
||
## 4. 验证命令(T4 用)
|
||
|
||
```bash
|
||
# openlist 自身
|
||
curl -sk -o /dev/null -w '%{http_code} %{time_total}s\n' http://127.0.0.1:5244/ping
|
||
docker logs --since 30m --tail 80 1Panel-openlist-9Tuc | grep -cE 'deadline exceeded|unreachable'
|
||
# 两 CF 源(容器视角需在容器内或 hosts 覆写后)
|
||
curl -4 -skI -m 8 https://drive.sakura.exp.dog
|
||
curl -4 -skI -m 8 https://www.28pan.com/api/webdav_server.php
|
||
# 容器代理是否已绕开(应无 7890)
|
||
docker exec 1Panel-openlist-9Tuc env | grep -i proxy
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 回滚总则
|
||
- 所有改动均为容器配置/环境/hosts,不碰业务数据。
|
||
- 回滚 = 按表反向操作并重启;备份保留在 T0。
|
||
- 若某步验证不达预期,可单独撤销该步,不影响其余。
|
||
|
||
> 请按第 2 节 D1–D6 拍板;确认后我按第 3 节排期执行(可只先做 A 档)。
|