Skip to content

日常问题:演示环境慢 / 卡 / 宕机(公网带宽打满 + 130/140 VMware 双机 crash)

生成日期:2026-08-12
场景:ruoyioffice.com 演示站(公网 182.92.106.252 + frp → 内网 130 后端 / 140 Jenkins)
关联技能:.cursor/skills/remote-env-troubleshoot/
对外 FAQ:kb/deployment/演示站很慢或不可用-分层排查.md

现象(可叠加)

  1. :打开 https://ruoyioffice.com/web 极慢、白屏转圈;文档站 / 也慢;小接口偶发还能通。
  2. 半挂:静态页 200,但 /admin-api 404/连不上;公网 :48080 无监听。
  3. 全挂13022 / 14022 SSH 也进不去;frpc 在公网 frps 日志里显示断开。

客户常误判为「后端挂了」。多数时候要先分清:公网带宽 / frp / 内网 guest / VMware 宿主机

架构速记

text
浏览器
  ↓ HTTPS :443
公网 ECS 182.92.106.252(nginx 静态 + frps)
  ├─ /web /doc /app … → 本机静态(占公网上行)
  └─ /admin-api → 本机 :48080(frp)→ 内网 130:48080(yudao-server)
内网 140 → Jenkins(frp :14022)

两台内网机均为 VMware 虚拟机,历史上多次同秒/同时段重启


一、站点极慢:主因是公网出口带宽打满(2026-08-12)

结论

主因是公网机上行顶满(约 4.5–5 Mbps),不是 130 应用卡顿。
静态大包与 API 共用同一条窄公网;/web 多 MB 图标 JS 一抢就爆。

分层实测(排除法)

层级命令/观察正常参考当天结论
130 本机 APIcurl -w '%{time_total}\n' http://127.0.0.1:48080/admin-api/...数 ms~十几 ms2–15ms,排除应用卡
130 健康容器内 /actuator/healthUPUP,CPU 空闲
公网 frp 小接口curl 公网 :48080 或经 HTTPS /admin-api 小包150–300ms可接受,排除「穿透本身特别慢」
HTTPS 大静态/web/js/material-symbols-*.js(~8MB)、mdi(~3MB)应秒级KB/s 级,卡在公网上行
公网 eth0连续采样 TX远低于规格上限TX 持续 ~4.5–5.0 Mbps

加剧因素

  • 公网机规格弱:ecs.e-c1m1.large(约 2C/2G),内存常告急。
  • /web 图标相关单文件多 MB,首屏连续下载十几 MB。
  • SSH 扫描打 13022:当天 17 点时段 frpsssh130 连接暴增(常见扫描源 IP 见下文),占用连接与带宽,加重「整站卡死」体感。

排查命令清单(公网机)

bash
# 5 秒带宽采样
RX1=$(awk '/eth0:/ {print $2}' /proc/net/dev); TX1=$(awk '/eth0:/ {print $10}' /proc/net/dev)
sleep 5
RX2=$(awk '/eth0:/ {print $2}' /proc/net/dev); TX2=$(awk '/eth0:/ {print $10}' /proc/net/dev)
awk -v rx=$((RX2-RX1)) -v tx=$((TX2-TX1)) 'BEGIN{printf "RX=%.2fMbps TX=%.2fMbps\n", rx/5/125000, tx/5/125000}'

# frp SSH 隧道扫描量
grep 'ssh130' /var/log/frps.log | tail -n 500 | wc -l
grep 'ssh130' /var/log/frps.log | tail -n 200 | awk '{print $NF}' | tr -d '[]' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head

# 大静态本机 vs 公网对比
curl -o /dev/null -w 'local total=%{time_total} speed=%{speed_download}\n' http://127.0.0.1/web/js/…大文件…
# 再从外网同 URL 对比;本机快、外网慢 → 公网带宽

缓解方向

优先级动作
调高公网 ECS 带宽 / 升配
继续用防火墙 + fail2ban + ip-guard 压扫描(见第三节)
前端拆包/按需图标,减小首屏体积
静态资源 CDN/OSS(演示站可选)

二、API 突然 404 / frpc 断开 / 130·140「宕机」

当天时间线(CST)

时间现象
~17:20–17:25130 仍有 syslog(含运维 SSH);公网 13022 扫描高峰
17:29 / 17:30公网 frps:140、130 的 frpc 先后断开;:48080 消失
17:25 → 18:55130 /var/log/messages 断档约 1.5h(无 OOM/panic/shutdown)
18:55130 与 140 同一秒 rebootlast -x 记为 crash(非 shutdown
之后frpc 恢复;130 上 Docker/yudao 需等容器起来,短暂可能 connection refused

结论(guest 侧能坐实的部分)

  1. 不是「yudao 单进程把自己弄挂」的典型形态(双机同秒、无 OOM 痕迹)。
  2. 更像同一 VMware 宿主机/共享存储/电源,或 vSphere 上对两台做 Reset/硬重启
  3. 17:29 起外网不可达,可能是 guest 冻住,直到 18:55 才被强制拉起(与 crash、日志断档一致)。
  4. SSH 扫描会加重外网侧症状,但解释不了两台 VM 齐 crash + 多年同步重启。

历史同步重启(旁证:同 ESXi / 同维护窗口)

不完全列举(last -x reboot,130≈140):

  • 2026-04-25 19:09
  • 2026-05-23 ~17:36
  • 2026-06-10 19:26
  • 2026-06-13 ~22:57
  • 2026-07-15 ~22:30
  • 2026-07-20 21:48
  • 2026-08-12 18:55

guest 侧取证命令

bash
# 虚拟化
systemd-detect-virt; cat /sys/class/dmi/id/sys_vendor product_name

# 是否非正常关机
last -x | head -30   # 关注 crash vs shutdown,以及两台 reboot 是否同秒

# 宕机前最后一行(重启后看 messages)
# 若「某时刻后空白,直到新 boot」→ 冻住/掉电/硬重置,而非优雅关机
grep -E '^Aug 12' /var/log/messages | tail -50

# 当前 journal 是否只有本次启动(旧 crash 日志常丢)
journalctl --list-boots

要坐实根因:必须看 ESXi / vSphere(guest 往往没有)

17:25–18:55 窗口查:

  • 宿主机事件、HA、存储超时、UPS/电源
  • 是否有人 Reset / Power Off 两台 VM
  • 共享 datastore 告警

恢复检查顺序

  1. 公网:frps 进程、:48080 / :13022 / :14022 监听
  2. 130:docker ps、本机 48080/actuator/health
  3. 140:Jenkins 进程/容器
  4. 外网:https://ruoyioffice.com/admin-api/...(401 常表示反代已通)

三、当天已落地的安全加固(公网 252)

细节以机器上 /root/SECURITY-HARDENING-20260812.md 为准;备份在 /root/firewall-backup-*

防火墙 / 安全组

  • 保留公网22804437700(frp)、以及运维需要的 330611302214022
  • 可关:公网直暴 48080(站点走 443 → nginx → 本机 48080 即可)。
  • 对活跃扫描 IP 做 DROP(当天观察源含 172.104.140.1492.57.122.89185.242.3.110 等,以当时日志为准)。
  • nginx /admin-api 反代改为走本机回环侧(如 172.17.0.1:48080),避免多余公网绕一圈。

ip-guard(频率减半策略)

位置/规则
脚本/usr/local/ip-guard/ip-guard.py + config.env + whitelist.txt
HTTP/天>1000 → 临时封禁
SSH 隧道/天(13022 等)>150 → 临时封禁
连续 3 天触发永久封禁
临时解封每日 00:05
cron每 10 分钟 scan;00:05 daily
状态/日志/var/lib/ip-guard//var/log/ip-guard.log

fail2ban

  • sshd + frps-ssh:约 75 次 / 10 分钟 → 封 24h(以当时 jail 配置为准)。

四、下次类似问题:5 分钟决策树

text
1) 打开 /web 大静态是否极慢,而 130 本机 API 仍很快?
   → 公网带宽 / 扫描 / 静态体积(第一节)

2) 静态正常,仅 /admin-api 挂,frps 无 130 客户端?
   → frpc/130 进程或网络;先 SSH 13022

3) 13022 与 14022 同时不通,且 last 显示双机同秒 crash?
   → 优先查 VMware 宿主机,不要只重启 yudao(第二节)

4) 只有扫描 IP 狂连 13022?
   → 查 ip-guard / fail2ban / 安全组计数,勿误判为业务流量

误判对照

误判实际
「后端很慢」130 本机 API 仍 ms 级,慢在公网上行
「frp 坏了」小包仍 200ms,大文件挤爆带宽
「Java OOM」无 OOM 记录 + 双机同秒 → 共享层
「只重启 Docker」guest 已冻/已 crash 时无效,需宿主机或硬重启

五、改进建议(中长期)

  1. 公网升带宽/升配,与静态大站匹配。
  2. ESXi 告警/UPS 巡检;双机同步重启要建事件台账。
  3. guest:journald 持久化、关键日志落盘,避免 crash 后无前因。
  4. 13022/14022:能 VPN/IP 白名单更佳;短期靠 fail2ban + ip-guard。
  5. 排障入口继续用 remote-env-troubleshoot 技能,避免连错机、用错密码。

附录:公网机磁盘/内存打满与 XXL-JOB(2026-08-12 晚)

结论
云盘 99%主因 xxl-job-admin Docker json.log ~23G(无 max-size);次因 nginx access ~3.9G
内存 ~92%本机 mysql57 ~827MB + xxl-job-admin Java ~187MB,塞在 2G ECS
XXL 对外firewalld 已对 :9090 reject;Admin 日志持续 Access denied for root@182.92.106.252,调度实际已废
演示站依赖130 yudao-server 近期日志无 xxl 注册;站点不依赖公网 XXL
已做docker update --restart=no + stop xxl-job-admin;truncate 23G json.log;归档/压缩 nginx 与 xxl 文件日志;/etc/docker/daemon.jsonmax-size=50m/max-file=3重启 dockerd,仅影响之后新建容器)
保留mysql57(:33061)未停——库内有多套历史库/ruoyi-office
效果磁盘约 99%→26%(腾出 ~28G);内存 available 约 134M→341M
备注重启说明:/root/XXL-JOB-STOPPED-*.md;若再启应绑 127.0.0.1:9090 并先修好 DB 账号

修订记录

日期修改
2026-08-12初稿:慢站分层实测 + 双机 crash 时间线 + 安全加固摘要
2026-08-12附录:XXL 日志撑盘、临时停用与 daemon 日志上限
联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版