3x-ui定时重启Xray解决随机卡顿

面板部分假设已经按3x-ui安装教程装好。这篇讲的是一个老问题——Xray-core跑着跑着隔一两天就卡一次,客户端显示连接但实际不通,重启一下又好了,日志里也看不出明显报错。

先别急着定时重启,看看是不是有明确原因

"随机卡顿"这四个字很容易变成万能借口,实际上有两种情况是能查出具体原因的,值得先排除掉:

  • 客户端到期或者超流量触发的重启循环:3x-ui 面板检测到某个客户端到期或者流量用完,会重写 config.json 并重启 Xray 核心禁用这个客户端。如果这个检测逻辑本身反复触发(比如临近到期的客户端很多),就会变成频繁重写配置、反复重启核心,表现出来就是"隔三差五卡一下"。查一下面板日志里有没有密集的重启记录,跟客户端到期时间对得上的话,这就是真实原因,不是随机的。
  • 端口冲突导致核心崩溃后被反复拉起:改配置或者新建入站的时候,如果新配置和正在监听的端口有冲突,核心会直接退出,面板的看门狗机制发现进程不在了又会把它拉起来,一冲突一拉起,看着就是间歇性卡顿。检查有没有多个入站不小心用了同一个端口。

如果这两种情况都排除了,日志确实干干净净看不出问题,那就是社区里普遍反馈的那种"确实会随机卡"的情况——XTLS/Xray-core、MHSanaei/3x-ui 的 issue 列表里都有类似反馈,目前没有能根治所有场景的方案,定时重启是现实里普遍在用的兜底办法。

用 restart-xray,不要用完整的 restart

3x-ui 的命令行脚本里有两个不同的重启命令:

1
2
x-ui restart        # 面板web服务 + Xray核心一起重启
x-ui restart-xray # 只重启Xray核心,面板不受影响

定时任务优先用 restart-xray,只是给 Xray 核心发一个重启信号,不会连带把整个面板服务也重启一遍,影响范围更小,也不会打断你正在面板里做的操作。

写入 crontab

先确认命令的实际路径:

1
which x-ui

一般脚本安装的路径是 /usr/bin/x-ui,确认好之后编辑 crontab:

1
crontab -e

加一行,选一个业务低峰的时段,比如凌晨 4 点:

1
0 4 * * * /usr/bin/x-ui restart-xray >> /var/log/xray-restart.log 2>&1

把 /usr/bin/x-ui 换成你 which x-ui 查到的实际路径。保存退出,crontab 会自动生效,不需要额外重启 cron 服务。

重启会不会影响正在用的人

会有短暂影响。重启的瞬间正在连接的客户端会断开几秒钟,大部分客户端软件会自动重连,感知不会太强烈,但如果是游戏、视频通话这类对瞬断敏感的场景,断的那几秒还是能感觉到。所以尽量选凌晨这种没什么人在用的时间点,没必要为了"保险"设置成每小时重启一次,间隔越长对正在使用的人影响越小,一天一次通常就够了。

如果排查下来发现是端口冲突问题,建议直接去检查入站配置把冲突解决掉,比反复靠定时重启掩盖问题更彻底;多用户管理和到期设置可以参考3x-ui多用户管理,把到期时间错开也能减少上面说的第一种重启循环的概率。