Mihomo 启动、代理与常见故障排查指南


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 实现有效测试。

如果你在使用过程中还有其他定制需求,欢迎留言探讨!


文章作者: QT
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 QT !
赏
 上一篇
Spark 高可用部署中的路径扩容与软链接技巧 Spark 高可用部署中的路径扩容与软链接技巧
Spark 的 work 目录默认位于安装目录下,这在高并发环境中容易造成空间瓶颈。本文介绍了两种路径迁移方法:修改 spark-env.sh 和使用软链接,并分析了各自的优劣。
下一篇 
SFTP代理冲突的实战解决方案与mihomo配置优化 SFTP代理冲突的实战解决方案与mihomo配置优化
记录在使用mihomo作为透明代理时,SFTP上传被劫持问题的解决过程。重点介绍如何通过NO_PROXY和规则直连实现上传功能正常化。
  目录