很长一段时间以来,我的trojan经常性地断线,需要经常重启它,才会好用一段时间。这很让我苦恼,我曾多次尝试修复它。但鉴于我自己的网络知识有限,每次只能依赖于通过Google搜索学习,又或者AI辅助来排查,弄了几次,都是能好上半天,但是又坏。最近,我终于搞定了这个问题,因此来分享一下。
trojan我已经使用了好多年了。有多久呢?我从Ubuntu 18.04 LTS开始,一路从20.04,22.04用下来。我虽然用的是LTS版本,但是我向来不用最新,而是使用更稳定的次新版。因此,到目前为止,我还没有使用24.04。
排查的方式
我把排查的思路写下来,如果你遇到了问题,也可以这么排查。当trojan的客户端连接之后,测速超时时,需要按照以下排查。
- 查看nginx里的正常网站能否使用,如果不能,则可能是nginx服务可能有问题,又或者是连接数不足。
- 如果是nginx服务有问题,则重启nginx服务。这个可能性比较小。
- 连接数不足,可以扩大连接数。
- 此外,也可能是DNS的问题。Linux服务器默认都会开启本地的DNS缓存,而且首选是虚拟机提供商提供的内部服务器。可是我使用的虚拟机提供商Vultr,提供的DNS内部服务器不够稳定,一旦它出了问题。也会导致trojan服务无法使用。
- 这类问题可以通过ping -c 3 goole.com或者查看trojan的日志来看error的类型是否是无法解析域名之类的确定。
- 解决办法是添加1.1.1.1,8.8.8.8这类第三方服务器到本地服务器的下方作为备用。
- 添加检测的脚本到cron,每5分钟执行一次,检测到了此类错误,就重启对应的dns缓存服务。
这两类问题解决之后。trojan偶尔还是会出现问题。通过查看,我发现原来trojan的代码由于太过古老,它在2021年就已经停止更新了。它在22.04下存在内存泄露。正常使用的情况下,它的内存占用只有10MB左右,但是一旦内存泄露,会逐渐膨胀到400多MB。这应该还不是它的极限,只不过是我的虚拟机只有1GB的内存,所以它最多也就能占用这么多的内存。
如果你的trojan的日志里有stream失败的错误信息,然后你看到了占用内存异常的大。就可以直接重启trojan服务。
将trojan占用内存的命令写入脚本,然后遇到大于20MB,就重启trojan服务。这可以也可以添加到cron,5分钟运行一次。
结论
原本在18.04,20.04下运行相当稳定的trojan服务,在22.04下运行的时候却因为太过古老存在内存泄露。同时虚拟机提供商提供的本地DNS服务器不够稳定,有时也会导致问题。因此,我们创建脚本,定时检测这两方面的问题,如果遇到了,就重启对应的服务。
前面我提到的信息都比较简略,这是因为在如今的时代,你只需要这些简略的信息,然后将它作为提示词,询问你自己习惯使用的AI就可以了。所以,这些简略信息已经足够了。
trojan作为一个多年停止更新的服务,目前在最新的系统中使用,已经明显过时了。解决的办法是在docker中使用旧版的Ubuntu系统。又或者想我这样,使用脚本在需要时重启服务。更好的办法是使用更现代的,更新更频繁的其他服务,比如v2ray之类的。