1. 僵尸进程问题
当使用 ps -aux 查看 mihomo 时出现如下:
[qjy@node20 mihomo]$ ps -aux | grep mihomo
qjy 371 0.0 0.0 0 0 ? Z 23:04 0:00 [mihomo] <defunct>
表示 mihomo 出现了僵尸进程(Zombie Process)。此类进程不能直接 kill,需要通过清理其父进程解决:
ps -o pid,ppid,stat,cmd -p 371 # 查看父进程 PID
kill -9 <父进程PID> # 强制杀掉父进程
系统会自动将僵尸进程交由 init 清理。
2. 配置错误:UTF-8 编码非法字符
报错如下:
yaml: invalid trailing UTF-8 octet
说明配置文件包含非法字符或非 UTF-8 编码。解决方法如下:
file -i config.yaml # 检查编码格式
iconv -f gbk -t utf-8 config.yaml -o config_fixed.yaml
vim config_fixed.yaml # 手动修复可疑位置
确保所有配置文件均以 UTF-8 编码保存。
3. 端口冲突排查与 Clash 冲突
Mihomo 启动失败时常见错误如下:
listen tcp 127.0.0.1:7890: bind: address already in use
使用以下命令查看哪个程序占用了端口:
sudo netstat -tunlp | grep 7890
输出示例:
tcp 127.0.0.1:7890 ... 13624/clash
解决方法(若 clash 不再需要):
sudo systemctl stop clash
sudo systemctl disable clash
sudo kill -9 13624
4. 后台运行 mihomo 的推荐方式
避免前台执行后 Ctrl+C 导致代理服务中断,可使用:
nohup ~/bin/mihomo -f config.yaml > mihomo.log 2>&1 &
或者使用 tmux / screen 管理会话。
5. curl 代理测试与误区
正确方式
curl --proxy http://127.0.0.1:7890 https://ip.gs
返回你的代理出口 IP,表示代理工作正常。
错误方式:使用 ping
很多人习惯用:
ping google.com
来测试连通性,但注意:ICMP(ping)不走 HTTP 代理,且 Google 会屏蔽 ping,不能用于判断代理是否正常。
6. 临时解决端口占用(不修改配置)
你也可以使用软链接方式迁移工作目录或绕过端口限制,具体在下一篇关于 Spark 的文章中将展开说明。
总结
Mihomo 是一款强大且兼容 Clash 的代理工具,但初学者在部署过程中容易遇到编码、端口占用、运行方式等问题。本文提供了系统性的故障排查流程,帮助你稳定运行代理服务,并结合 curl 实现有效测试。
如果你在使用过程中还有其他定制需求,欢迎留言探讨!