mihomo
mihomo copied to clipboard
[Bug] 使用hysteria/hysteria2协议会导致内存泄漏
验证步骤
- [X] 我已经阅读了 文档,了解所有我编写的配置文件项的含义,而不是大量堆砌看似有用的选项或默认值。
- [X] 我仔细看过 文档 并未解决问题
- [X] 我已在 Issue Tracker 中寻找过我要提出的问题,并且没有找到
- [X] 我是中文用户,而非其他语言用户
- [x] 我已经使用最新的 Alpha 分支版本测试过,问题依旧存在
- [X] 我提供了可以在本地重现该问题的服务器、客户端配置文件与流程,而不是一个脱敏的复杂客户端配置文件。
- [X] 我提供了可用于重现我报告的错误的最简配置,而不是依赖远程服务器或者堆砌大量对于复现无用的配置等。
- [X] 我提供了完整的日志,而不是出于对自身智力的自信而仅提供了部分认为有用的部分。
- [X] 我直接使用 Mihomo 命令行程序重现了错误,而不是使用其他工具或脚本。
操作系统
Windows
系统版本
Windows10 22H2 19045.5011 (Linux下似乎也有同样的问题)
Mihomo 版本
1.18.10
配置文件
# 机场订阅,名称不能重复
proxy-providers:
# 用于下载订阅时指定UA
global-ua: clash.meta
# 全局配置
port: 7893
socks-port: 7891
redir-port: 7892
mixed-port: 7890
tproxy-port: 7894
log-level: debug
ipv6: false
allow-lan: true
unified-delay: true
tcp-concurrent: true
geodata-mode: false
geodata-loader: standard
geo-auto-update: true
geo-update-interval: 48
geox-url:
geoip: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
geosite: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
mmdb: "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb"
asn: "https://github.com/xishang0128/geoip/releases/download/latest/GeoLite2-ASN.mmdb"
# 控制面板
external-controller: 0.0.0.0:9090
secret: ""
#external-ui: ui
#external-ui-url: "https://ghp.ci/https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip"
# 匹配进程 always/strict/off
find-process-mode: off
global-client-fingerprint: chrome
keep-alive-idle: 600
keep-alive-interval: 30
# 策略组选择和fakeip缓存
profile:
store-selected: true
store-fake-ip: true
# 流量嗅探
sniffer:
enable: false
sniff:
HTTP:
ports: [80, 8080-8880]
override-destination: true
TLS:
ports: [443, 8443]
QUIC:
ports: [443, 8443]
force-domain:
- +.v2ex.com
skip-domain:
- "Mijia Cloud"
- "dlg.io.mi.com"
- "+.push.apple.com"
- "+.apple.com"
# 代理模式
tun:
enable: false
stack: mixed
mtu: 9000
dns-hijack:
- "any:53"
- "tcp://any:53"
auto-route: true
auto-redirect: true
auto-detect-interface: true
# DNS模块
dns:
enable: false
listen: 0.0.0.0:1053
ipv6: false
respect-rules: true
# 模式切换 redir-host / fake-ip
enhanced-mode: fake-ip
fake-ip-range: 28.0.0.1/8
# 模式切换 whitelist/blacklist
# 黑名单模式表示如果匹配成功则不返回 Fake-IP, 白名单模式时只有匹配成功才返回 Fake-IP
fake-ip-filter-mode: blacklist
fake-ip-filter:
- "+.lan"
- "+.local"
- geosite:private
- geosite:cn
default-nameserver:
- 223.5.5.5
- 119.29.29.29
proxy-server-nameserver:
- 223.5.5.5
- 119.29.29.29
nameserver:
- 223.5.5.5
- 119.29.29.29
nameserver-policy:
"rule-set:private_domain,cn_domain":
- 223.5.5.5
- 119.29.29.29
"rule-set:geolocation-!cn":
- "https://dns.cloudflare.com/dns-query"
- "https://dns.google/dns-query"
proxies:
- name: "🟢 直连"
type: direct
udp: true
# 锚点
pr: &pr {type: select, proxies: [🚀 节点选择, ♻️ 香港自动, ♻️ 日本自动, ♻️ 美国自动, ♻️ 自动选择, 🌐 全部节点, 🟢 直连]}
# 策略组
proxy-groups:
- {name: 🚀 节点选择, type: select, proxies: [♻️ 自动选择, ♻️ 香港自动, ♻️ 日本自动, ♻️ 美国自动, 🌐 全部节点, 🟢 直连]}
- {name: 🤖 ChatGPT,!!merge <<: *pr}
- {name: 🎵 TikTok,!!merge <<: *pr}
- {name: 📲 Telegram,!!merge <<: *pr}
- {name: 🎥 NETFLIX,!!merge <<: *pr}
- {name: ✈️ Speedtest,!!merge <<: *pr}
- {name: 💶 PayPal,!!merge <<: *pr}
- {name: 🍎 Apple, type: select, proxies: [🟢 直连, 🚀 节点选择]}
- {name: 🎯 全球直连, type: select, proxies: [🟢 直连, 🚀 节点选择]}
- {name: 🐟 漏网之鱼,!!merge <<: *pr}
- {name: ♻️ 香港自动, type: url-test, include-all: true, tolerance: 100, interval: 60, filter: "(?=.*(港|HK|(?i)Hong))^((?!(台|日|韩|新|深|美|限速)).)*$"}
- {name: ♻️ 日本自动, type: url-test, include-all: true, tolerance: 100, interval: 60, filter: "(?=.*(日|JP|(?i)Japan))^((?!(港|台|韩|新|美|限速)).)*$" }
- {name: ♻️ 美国自动, type: url-test, include-all: true, tolerance: 100, interval: 60, filter: "(?=.*(美|US|(?i)States|America))^((?!(港|台|日|韩|新|限速)).)*$"}
- {name: ♻️ 自动选择, type: url-test, include-all: true, tolerance: 100, interval: 60, filter: "^((?!(直连|限速)).)*$"}
- {name: 🌐 全部节点, type: select, include-all: true}
rules:
- RULE-SET,private_domain,🟢 直连
- RULE-SET,apple_domain,🍎 Apple
- RULE-SET,proxylite,🚀 节点选择
- RULE-SET,ai,🤖 ChatGPT
- RULE-SET,tiktok_domain,🎵 TikTok
- RULE-SET,speedtest_domain,✈️ Speedtest
- RULE-SET,telegram_domain,📲 Telegram
- RULE-SET,netflix_domain,🎥 NETFLIX
- RULE-SET,paypal_domain,💶 PayPal
- RULE-SET,geolocation-!cn,🚀 节点选择
- RULE-SET,cn_domain,🎯 全球直连
- RULE-SET,netflix_ip,🎥 NETFLIX,no-resolve
- RULE-SET,telegram_ip,📲 Telegram,no-resolve
- RULE-SET,cn_ip,🎯 全球直连
- MATCH,🐟 漏网之鱼
rule-anchor:
ip: &ip {type: http, interval: 86400, behavior: ipcidr, format: mrs}
domain: &domain {type: http, interval: 86400, behavior: domain, format: mrs}
qcy: &qcy {type: http, interval: 86400, behavior: domain, format: text}
class: &class {type: http, interval: 86400, behavior: classical, format: text}
rule-providers:
private_domain: {!!merge <<: *domain, url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/private.mrs"}
proxylite: {!!merge <<: *class, url: "https://raw.githubusercontent.com/qichiyuhub/rule/refs/heads/master/ProxyLite.list"}
ai: {!!merge <<: *class, url: "https://raw.githubusercontent.com/qichiyuhub/rule/refs/heads/master/AI.list"}
telegram_domain: {!!merge <<: *domain, url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/telegram.mrs"}
netflix_domain: {!!merge <<: *domain, url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/netflix.mrs"}
paypal_domain: {!!merge <<: *domain, url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/paypal.mrs"}
apple_domain: {!!merge <<: *domain, url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/apple-cn.mrs"}
speedtest_domain: {!!merge <<: *domain, url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/ookla-speedtest.mrs"}
tiktok_domain: {!!merge <<: *domain, url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/tiktok.mrs"}
gfw_domain: {!!merge <<: *domain, url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/gfw.mrs"}
geolocation-!cn: {!!merge <<: *domain, url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/geolocation-!cn.mrs"}
cn_domain: {!!merge <<: *domain, url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/cn.mrs"}
cn_ip: {!!merge <<: *ip, url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/cn.mrs"}
telegram_ip: {!!merge <<: *ip, url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/telegram.mrs"}
netflix_ip: {!!merge <<: *ip, url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geoip/netflix.mrs"}
描述
其他协议正常, 但使用hysteria/hysteria2协议会导致内存泄漏
重现方式
使用hysteria/hysteria2协议, 持续运行几个小时, 观察内存占用
日志
日志见附件
我的是有个机场100多个hy2的节点,只要加进来,立马内存占用飙升。直接把我linux的内存加SWAP撑爆了
我的是有个机场100多个hy2的节点,只要加进来,立马内存占用飙升。直接把我linux的内存加SWAP撑爆了
我暂时是用脚本定时重启
急需clash verge rev项目能加入自动检测和恢复功能.
如果webview漏了超过500M, 就自动重启gui 如果核心mihomo漏了超过500M,就自动重启核心.
确实是,我发现直接调用内核 hy2的节点会导致内存一点一点涨,尽管我做了一些措施,比如将 Transport = nil 方便他GC,但是还是没用。