-
Notifications
You must be signed in to change notification settings - Fork 9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
什么时候能解决cpu99+ 打游戏延迟999ms的问题啊 #2565
Comments
包括这些问题,其实都是这个BUG引起的,其实而不是核心无法利用多核的问题,当然,,v2现在确实是单核心,能多核心运算更好,特别是vps服务器上进行 #2548 v2ray/discussion#558 |
我估计,开发的朋友,现在都不知道这个Bug出在什么地方,不知道从什么地方开始修。 因为代码看起来没问题;这个问题又挺难复现的。(无法通过访问某个特定网站之类的方法让它准确发生;我服务器上的v2ray进程有时一跑就是几个月不重启,几年了,至今也没见这个问题发生过一次) 我不是否认说没有这个Bug,只是说它之影响一部分特定用户,并且似乎只发生在某些特定平台上,给我感觉更像是针对操作系统平台的“编译器”有某些隐藏的bug,而不像是V2Ray的代码有Bug。 |
这个问题可以轻易百分百复现。。是属于必现。要复现随时都可以进行 |
这也是奇怪的地方之一。 你知道v2ray是有人用来开机场的。一个机场服务器连接几百人在用,这几百人连接服务器干啥玩意的都有,却没见机场的进程炸过。 但无论如何,我等会照你另一个帖子写的,开Netch连接CoD Infinite Warfare (我只有这个)玩一会看看(或者你能再给我列几个其它容易炸的游戏)。进程有没有炸我会告诉你,至少我们这样能知道,是属于“某些系统环境下才会出现的问题”还是属于“V2Ray本身处理某些数据流的问题” |
客户端使用socks5 udp也会出现cpu占用高的情况 |
@Kylejustknows pubg,这些fps的游戏都百分百必现 @zhj9709 对的。。v2ray提供的s5也是一样会出问题,只要是经过了v2ray就有这毛病 |
所以 我直接换$$了 |
等个写代码的大佬提交下代码修复这个毛病 |
我刚刚,顶着200+的延迟(我的服务器允许UDP但不是为游戏优化的)玩了一局COD,一局CSGO,一局Dota2。总共大约2小时。 V2ray的进程CPU占用率一直在0%,偶尔跳到2%,但从没超过2% 然后为了测试,用iperf超最大限速收发UDP包(特意制作大量UDP包和大量丢包),在收发UDP包跑满网速的情况下,V2ray的CPU能偶尔才达到5%。 所以我这边情况(win10最新版, i3CPU,Netch+UDP+V2ray),死活就是无法复现V2ray占满CPU的BUG(我不是说没有这个Bug,而是针对v2ray总用户数有几百万的情况下,这个Bug真的可能只有少数用户遇到。开发的朋友也一直不回应这个Bug,估计这个Bug他们也无法复现,就忽视掉了) 能不能看看,你们的机子,是不是有什么对网络流量有审核的部件,大家汇报一下看看有没有共同点?(360有网速监控,QQ管家,xx管家等等都有软件网络流量监控、多数杀毒软件和防火墙对每个软件的网络流量也都有即时扫描和审计,我怀疑某个流量监控或流量统计软件、驱动和V2Ray冲突了) PS: 顺便说下,Netch里带的Netfilter SDK+ Redirector真是个好东西啊,让windows实现了几乎完美的透明代理,连底层的UWP和系统进程都代理了!我这一试,就直接把用了多年的Proxifier给扔了。 |
在Netch群里,和各种身边朋友,都能轻松正常复现这个问题,而且是百分百复现。不存在无法复现的可能性。包括服务端也能轻松复现相同的问题,不仅仅是客户端 |
我安卓上测试了,不管是用脚本,还是用v2rayNG,用到socks udp时都会出现cpu占用高的问题,我还让人也测试了,同样的问题。#2427 |
而且我那个issue上有个PR Wanted的标签,估计还要等别人提交pr请求吧 |
我不是说没有这个问题,但因为回音壁效应,和你共鸣的都是有这个问题的。但也许有更多的人,没有这个问题所以不回复你,你也不知道。 比如说我,其实很久之前就看到issues里有这个问题,但是在我自己的”小机场“上和各个客户端上,这个问题从来没有出现过,所以就从来没回复、没关心过这个问题。 而且我刚刚玩了几局被骂得很惨的游戏,大致证实了我的个人电脑上这个问题不存在(因为据你说,这个问题应该游戏开始后很快就复现;我差不多玩了两个小时没有出现) 我漏掉两个细节: |
1.不管是直接使用netch内置的v2ray 还是netch通过127.0.0.1:10808 s5模式连接到v2rayn客户端,都会存在相同的问题,包括之前群里面有人不信有毛病,他们一测cod,也出现相同的问题了,很明显在fps游戏中,很容易出现这种情况 |
行,我再跑一局COD试试看。 |
你是4核心的吗?4核心利用一个核心的话,大约就在25%左右浮动,可能是同一个问题引起 |
所见略同。当它跳到30%的时候,任务管理器正好在记录中,我赶紧看了一眼,那30%的峰值,是平均分配到4个核心。(电脑CPU核心4个逻辑核心都在30%左右)但V2ray的CPU使用和连接方式有关 但经过一波测试,我感觉我找到一些出错逻辑: 1,UDP瞬间发包数,当我把发包数限制为10的时候,测试总能通过。默认值发包(每秒120个UDP包左右)都产生高CPU然后失败了。(UDP数据包数量超过V2ray的vmess协议能瞬间处理的数量?) |
这个是Windows 10的线程优化。实际上还是单核心运行的。解决这个问题的终点不是让他利用更多的核心,而是想办法解决问题所在,让其不占用CPU,对比下ss-lbev,人家占用不超过0.5%的cpu,内存也才5MB |
@Kylejustknows 你会写代码吗,要不要提交写修复这毛病啊 |
把客户端换成 Clash 试试看 |
Clash是gui还是?用的不是v2ray核心? |
Clash 用的是自己的核心,Clash Core. |
/~https://github.com/Dreamacro/clash/releases 这个吗?我看了下介绍,用的是v2ray的核心,不是他们自己开发的 |
你可以选择看看代码,或者装上客户端亲自试一试,而不是只看 Readme 里的鸣谢。 |
在我的Win10Pro+Netch 1.4.9的试验下,一局10分钟的CSGO,游戏中显示的延迟大概在62-70之间波动,和我节点本身的延迟并没有太大区别. 由于我没有COD,所以无法测试.但是我在GTAV,CSGO,彩虹六号中也从未遇到过CPU占用满的问题. 所以我觉得这个问题是CoD的个例,就我本人的游戏体验来看,从未遇到过类似情况 |
据我现在的经验,它和发包率有一些关系。Steam平台的游戏以较低的30pps速度发UDP包在config文件内可调,PUBG和CoD没有公开数据,但我估计为了体验可能用了超高的发包率。我自以为我的电脑没有这个bug,但当我用测试软件每秒100个UDP包发送时,我的V2ray也假死了。 问题不在于该不该玩Cod或者用Netch,关键在于,一个代理软件,你对它发送好的、坏的、大的、小的、扭曲的、合法不合法。。。的各种数据包,它都应该能合理地处理(该转发的转发,该抛弃的抛弃)。而不应该遇到自己不喜欢的数据包就立刻死给你看。 |
应该是没用的。我这两天有空时在测试和研究怎样准确地触发这个Bug。 Netfilter来转发UDP或者SSTAP全局VPN都会触发这个Bug都试过。这个Bug和UDP数据流的“内容”有关,而与你用什么软件、什么方法把数据传给V2ray无关。 |
(声明:本人萌新+小白,若有纰漏,还望各位大佬海涵。) for {
mpayload, err := reader.ReadMultiBuffer()
... ...
for _, payload := range mpayload {
... ...
if inbound := session.InboundFromContext(ctx); inbound != nil && inbound.Source.IsValid() {
ctx = log.ContextWithAccessMessage(ctx,... ...)
}
ctx = protocol.ContextWithRequestHeader(ctx, request)
... ...
}
} 首先, v2ray-core/app/proxyman/inbound/worker.go Line 289 in f9935d0
对于 socksClient 发来的每一个UDP包,v2ray 都会对ctx 进行log.ContextWithAccessMessage() 与protocol.ContextWithRequestHeader() 操作。这两个函数本质上是Context.WithValue() 。Context.WithValue() 相关代码:
func WithValue(parent Context, key, val interface{}) Context {
if key == nil {
panic("nil key")
}
if !reflectlite.TypeOf(key).Comparable() {
panic("key is not comparable")
}
return &valueCtx{parent, key, val}
} 当 func (c *valueCtx) Value(key interface{}) interface{} {
if c.key == key {
return c.val
}
return c.Context.Value(key)
} 当 |
@JimHan75d8c5 感谢分析,如果是这个问题的话,不知道好修不? |
应该挺好修的,在 |
@kslr 这位开发者,麻烦进来帮看看,上面有人发了修复方案 |
请问用的什么测试软件 |
iperf3 , 自定义参数 -u 打开UDP测试;-l 每个UDP包大小(数字后要加上K或者多少M);-b每秒传输数据量(也要数字加K); 这两个参数组合,就可以设计出各种大小、每秒各种数量的测试包。 测试时一旦遇到假死数据中断,服务器那边就会等很久很久很久才会放弃,所以记得远程连上服务器随时重启服务端。 |
好的,感谢提示。 |
我尝试修修看看 |
安卓上用iperf3测试了一下,cpu占用好像正常了,之前测试cpu占用可以在50%以上,现在最多也就5-6%左右 等其他人再测试看看 |
另一部手机测试了一下,虽然cpu占用好很多,但还是有点高 |
感谢楼上大佬提交PR,等版本发布好进行测试,不会编译,只能等现成的 |
我编译一份发给你试试 |
|
Vmess+Ws+TLS |
这个是测试版的链接吗 |
测试了,还是没修复,不过确实有一定好转了。不过问题还存在。之前不到10分钟必爆炸的,现在能撑住20-25分钟左右才出问题,打游戏依旧还是能百分百复现这个问题 |
我这边感觉好多了,两个小时了,很稳定,就百分之2以下不涨了,之前一个小时就爆了 |
大佬们牛逼,🙏🙏 |
可能你说的第二个问题,也会引起CPU100%。。。我这能出现
|
把你贴的日志文件精简一下,太长了,重复的留几行就行了。 现在我打字的同时,我的服务器和客户端正在以每秒2000个UDP包的速度同时上传+下载,不停地跑,稳定的一笔。 你贴的日志,看起来像是shadowsocks组件出的问题。可否换回成vmess试试?现在修复后vmess的UDP性能可能比Shadowsocks协议更强悍了。 |
额。玩了十分钟确实没问题了,我只升级了服务端,我刚才Netch客户端内的v2ray没升级。 不过v2ray内置的ss要不要顺便看看是什么毛病啊? 配置方法如下
根据之前大佬提交的PR,,我搜了下源代码,应该是这个文件这一段影响了 如果正式版本发布了,希望注明下当前版本已经可以支持游玩游戏。方便大家看到更新日志能理解现在v2ray也能用来打游戏了 |
感觉这个问题都没人关注,很多人都有提出过,我在几年前也说过,,,3年过去了,依旧没有开发者来修复
The text was updated successfully, but these errors were encountered: