Skip to content
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

关于覆盖率 #65

Open
Billyzou0741326 opened this issue Dec 28, 2019 · 96 comments
Open

关于覆盖率 #65

Billyzou0741326 opened this issue Dec 28, 2019 · 96 comments

Comments

@Billyzou0741326
Copy link
Owner

id roomid type name created_at (时差)
1808040 14201872 guard 舰长 2019-12-28 09:51:38
1808041 2603963 guard 舰长 2019-12-28 09:52:56
1808042 21154366 guard 舰长 2019-12-28 09:53:08
1808043 21539718 guard 舰长 2019-12-28 09:53:16
1808044 21448055 storm 节奏风暴 2019-12-28 09:53:22
1808045 10556121 guard 舰长 2019-12-28 09:53:31
1808046 128135 storm 节奏风暴 2019-12-28 09:54:19
1808047 10556121 guard 舰长 2019-12-28 09:56:16
1808048 1448688 guard 舰长 2019-12-28 09:56:26
1808049 2259890 guard 舰长 2019-12-28 09:56:36
1808050 10556121 guard 舰长 2019-12-28 09:57:36
1808051 21570283 storm 节奏风暴 2019-12-28 09:57:42
1808052 302816 guard 舰长 2019-12-28 09:57:46
1808053 21539718 guard 舰长 2019-12-28 09:58:01
1808054 7654470 guard 舰长 2019-12-28 09:58:01
1808055 10642428 guard 舰长 2019-12-28 09:58:13
1808056 21539718 guard 舰长 2019-12-28 09:58:31
1808057 4348162 guard 舰长 2019-12-28 09:59:48
1808058 2259890 guard 舰长 2019-12-28 10:00:21
1808060 2613601 guard 提督 2019-12-28 10:01:01
1808061 824494 storm 节奏风暴 2019-12-28 10:01:30
1808062 4641942 storm 节奏风暴 2019-12-28 10:01:57
1808063 45972 guard 舰长 2019-12-28 10:03:01
1808064 21580043 guard 舰长 2019-12-28 10:03:11
1808065 21539718 guard 舰长 2019-12-28 10:03:56
1808066 12594500 guard 提督 2019-12-28 10:04:46
1808067 43668 guard 舰长 2019-12-28 10:05:16
1808068 757349 storm 节奏风暴 2019-12-28 10:05:29
1808069 3268068 storm 节奏风暴 2019-12-28 10:05:48
1808070 21448055 storm 节奏风暴 2019-12-28 10:06:04
1808071 21539718 guard 舰长 2019-12-28 10:06:21
1808072 21517049 guard 舰长 2019-12-28 10:06:58
1808073 3702265 storm 节奏风暴 2019-12-28 10:09:29
1808074 2603963 guard 舰长 2019-12-28 10:09:51
1808075 43668 guard 舰长 2019-12-28 10:10:21
1808076 3448829 storm 节奏风暴 2019-12-28 10:11:34
1808077 2625423 guard 舰长 2019-12-28 10:13:03
1808078 21517654 guard 舰长 2019-12-28 10:13:08
1808079 281727 guard 舰长 2019-12-28 10:15:11
1808080 11619634 storm 节奏风暴 2019-12-28 10:15:24
1808081 1011 guard 舰长 2019-12-28 10:15:43
1808082 21386005 guard 舰长 2019-12-28 10:17:31
1808084 21611039 guard 舰长 2019-12-28 10:18:46
1808085 12594500 guard 提督 2019-12-28 10:20:21
1808086 47557 guard 舰长 2019-12-28 10:22:18
1808087 21685737 guard 舰长 2019-12-28 10:22:43
1808088 21386005 guard 舰长 2019-12-28 10:23:51
1808089 21331425 guard 舰长 2019-12-28 10:24:11
1808090 21331425 guard 舰长 2019-12-28 10:24:41
1808091 3647211 guard 舰长 2019-12-28 10:26:11
1808092 3647211 guard 舰长 2019-12-28 10:26:21
1808093 21539718 guard 舰长 2019-12-28 10:26:41
1808094 21580043 guard 舰长 2019-12-28 10:27:46
1808095 21511979 storm 节奏风暴 2019-12-28 10:29:24
1808096 21525988 guard 舰长 2019-12-28 10:30:31
1808097 8128451 storm 节奏风暴 2019-12-28 10:31:34
1808098 392661 guard 舰长 2019-12-28 10:33:18
1808100 10556121 guard 舰长 2019-12-28 10:35:11
1808101 65482 guard 舰长 2019-12-28 10:36:13
1808102 12834857 guard 舰长 2019-12-28 10:39:56
1808103 21620337 guard 舰长 2019-12-28 10:39:56
1808104 989573 guard 舰长 2019-12-28 10:40:18
1808106 11619634 guard 舰长 2019-12-28 10:41:48
1808108 27760 storm 节奏风暴 2019-12-28 10:43:48
1808109 788361 guard 舰长 2019-12-28 10:46:58
1808110 21709053 guard 舰长 2019-12-28 10:51:18
1808111 3647211 guard 舰长 2019-12-28 10:51:41
1808112 424902 storm 节奏风暴 2019-12-28 10:51:47
1808113 306236 guard 舰长 2019-12-28 10:54:03
1808114 10556121 guard 舰长 2019-12-28 10:54:06
1808115 10556121 guard 舰长 2019-12-28 10:55:31
1808116 3297956 guard 舰长 2019-12-28 10:56:21
1808117 3580061 guard 舰长 2019-12-28 10:59:16
1808118 6065099 guard 舰长 2019-12-28 11:03:08
1808119 289079 storm 节奏风暴 2019-12-28 11:07:40
1808120 1362072 guard 舰长 2019-12-28 11:09:29
1808121 21456469 storm 节奏风暴 2019-12-28 11:09:57
1808122 7603080 guard 舰长 2019-12-28 11:10:16
1808123 544793 guard 舰长 2019-12-28 11:10:46
1808124 3641727 storm 节奏风暴 2019-12-28 11:13:25
1808125 14085407 guard 舰长 2019-12-28 11:14:36
1808126 21611039 guard 舰长 2019-12-28 11:14:41
1808127 3269965 guard 舰长 2019-12-28 11:15:29
1808128 81711 guard 舰长 2019-12-28 11:16:56
1808129 38781 guard 舰长 2019-12-28 11:17:26
1808130 12096201 guard 舰长 2019-12-28 11:18:44
1808131 12096201 guard 舰长 2019-12-28 11:19:14
1808132 6140913 guard 舰长 2019-12-28 11:19:21
1808133 11067408 guard 舰长 2019-12-28 11:22:01
1808134 544793 guard 舰长 2019-12-28 11:23:01
1808135 2777322 guard 舰长 2019-12-28 11:24:24
1808136 21058142 guard 舰长 2019-12-28 11:25:16
1808137 5503854 guard 舰长 2019-12-28 11:27:46
1808138 991520 storm 节奏风暴 2019-12-28 11:30:53
1808139 1267921 guard 舰长 2019-12-28 11:33:11
1808140 1135146 guard 舰长 2019-12-28 11:33:59
1808141 3113410 guard 舰长 2019-12-28 11:36:16
1808142 288400 guard 舰长 2019-12-28 11:36:26
1808143 1378879 guard 舰长 2019-12-28 11:36:31
1808144 14805603 guard 舰长 2019-12-28 11:39:09
1808145 3465508 guard 舰长 2019-12-28 11:40:51
1808146 5335284 guard 舰长 2019-12-28 11:44:14
1808147 8128451 guard 舰长 2019-12-28 11:46:34
1808148 10556121 guard 舰长 2019-12-28 11:48:31
1808149 11546841 storm 节奏风暴 2019-12-28 11:49:13
@Billyzou0741326
Copy link
Owner Author

到这个地步了的话... 就该整理代码了

@Pearlulu
Copy link

白天覆盖率稳了,有统计晚高峰的吗?我看了下这两天的还是和之前一样,白天几乎没漏的,一到晚高峰就不如非解限版,会漏大概1/3,CPU负载也不是太高,流量26 27个GB,非解限版流量16GB左右。

@Billyzou0741326
Copy link
Owner Author

白天覆盖率稳了,有统计晚高峰的吗?我看了下这两天的还是和之前一样,白天几乎没漏的,一到晚高峰就不如非解限版,会漏大概1/3,CPU负载也不是太高,流量26 27个GB,非解限版流量16GB左右。

1/3会是风暴吗?风暴id的前半截是跟舰长一起的23333

@Billyzou0741326
Copy link
Owner Author

刚算了下 (768) / (1808005 - 1807198) 差不多95%吧

@Pearlulu
Copy link

不是风暴,我是和非解限版对比。可能还是网络问题,连接数多对网络质量要求高,用国内机器应该好些,可惜国内我只有1M带宽的,不知道能不能跑起来。

@Billyzou0741326
Copy link
Owner Author

不是风暴,我是和非解限版对比。可能还是网络问题,连接数多对网络质量要求高,用国内机器应该好些,可惜国内我只有1M带宽的,不知道能不能跑起来。

嗯... 有什么建议吗 任何策略都行,我看下实现的可行性

@Pearlulu
Copy link

你那里正常的话,我觉得可能是linux系统优化的关系,tcp连接数超过某个阈值就出问题了,用的都是全新安装的debian10默认的参数,我先优化了一下参数跑两天试试。

@Billyzou0741326
Copy link
Owner Author

你那里正常的话,我觉得可能是linux系统优化的关系,tcp连接数超过某个阈值就出问题了,用的都是全新安装的debian10默认的参数,我先优化了一下参数跑两天试试。

用的是Linux分支的版本吗
Linux分支的调整了nofile上限

@Billyzou0741326
Copy link
Owner Author

有root权限的话可以系统层面上提升弄nofile上限(限制tcp句柄数量的好像是)

@Pearlulu
Copy link

用的是Linux分支的版本吗
Linux分支的调整了nofile上限

是的,ulimit和file-max一开始就改过了,tcp超时和回收啥的参数没弄过。

@Billyzou0741326
Copy link
Owner Author

毫无头绪2333
tcp连接策略是非正常断线则立刻重连 有时候断得多容易刷屏我就屏蔽掉了tcp连接的状态
按理说漏过舰长大概率是房间掉线了吧 或者network I/O出问题了

@Pearlulu
Copy link

Pearlulu commented Dec 29, 2019

我直接在一台vps上同时开17号的版本和最新版,这下全都一样了。
还是同样的结果。。未解限版200个舰长,最新版162个舰长,看日志也看不出来啥头绪。
运行了一段时间再统计的,排除了其他干扰。

@Billyzou0741326
Copy link
Owner Author

162/200漏的太多了啊.... 我专门写个限制版给你吧~

@Pearlulu
Copy link

162/200漏的太多了啊.... 我专门写个限制版给你吧~

大佬就按自己思路弄就好了,不用专门写啊。而且你那边测试正常,其实高峰期解限版也就1W多连接数,和五六千连接数的限制版不应该出现这种差别才对。我觉得可能不是连接数的关系,我再找找原因。

@Billyzou0741326
Copy link
Owner Author

嗯 我期待好消息

@Pearlulu
Copy link

下午到晚上8点半之前,限制版会漏几个,解限版几乎没漏,8点半之后解限版就开始漏了。
初步判断是晚上国际出口拥堵,VPS到B站服务器走的电信线路,ping非常稳定,但是一到8点半后会被强制丢包QOS。

@Billyzou0741326
Copy link
Owner Author

原来是这样... 那我可以安心肝覆盖率了hhh

@Pearlulu
Copy link

不过我还是挺好奇为啥限制版受到网络影响就比较小,是掉线重连的逻辑不一样吗

@Billyzou0741326
Copy link
Owner Author

断线重连的策略没变
但是网络读写的数量变得比较恐怖了 毕竟高峰期的弹幕凶残度也是很强了 大量事件堵塞的话会出问题吧

@Pearlulu
Copy link

t
刚挂着看了一会儿,最左边是你的服务器,中间是香港的3M小水管cn2 gia,右边是到弹幕服务器丢包1%以下的美国服务器

@Billyzou0741326
Copy link
Owner Author

我服务器刚刚被412风控了23333

@Billyzou0741326
Copy link
Owner Author

嗯… 刚刚跑的是测试版 error掉了好几次

@Pearlulu
Copy link

Pearlulu commented Dec 31, 2019

8点开始的一个多小时
2117.png
我看你的服务器是走的普通电信163线路,竟然比我走CN2线路的网络还稳定。

忽然想到broadcastlv.chat.bilibili.com有4个IP,两个北京两个上海,服务器到4个IP的网络质量都不一样。现在这个时间高的连接数有5000,低的2800,应该是DNS解析随机获得的IP,可能网络差的连接数高,也可能网络好的连接数高。不知道自己主动控制有没有效果,TCP连接断开后就轮换另一个IP连接,请求域名的话DNS可能会解析到重复IP,按顺序轮换到最后应该是网络好的IP连接数多吧。
2019
旧版的4个IP连接数都在1000多点,没什么网络压力

@Billyzou0741326
Copy link
Owner Author

果然是大佬23333

ip获取这些我不太会呢~

@Billyzou0741326
Copy link
Owner Author

看来要手动getaddr吗... 然后采用均衡负载吧
我先发布一下 expireAt的修复和静态的新策略

@lovezm
Copy link
Collaborator

lovezm commented Dec 31, 2019

netstat -plan|grep :2243|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
netstat -an | grep 120.92.144.250 |wc -l && netstat -an | grep 120.92.78.57 |wc -l && netstat -an | grep 120.92.158.137 |wc -l && netstat -an | grep 120.92.112.150 |wc -l
1185
1248
1380
1381
漏其实没有漏多少 tcp应该不是关键问题 关键问题在于未监听到的房间 其实能够接受

@Billyzou0741326
Copy link
Owner Author

借一下你们的command23333

@Billyzou0741326
Copy link
Owner Author

对了 Clone新的版本的时候别忘了把旧的 src/db/record.json 提出来放进新的里

@Billyzou0741326
Copy link
Owner Author

8点开始的一个多小时
2117.png
我看你的服务器是走的普通电信163线路,竟然比我走CN2线路的网络还稳定。

忽然想到broadcastlv.chat.bilibili.com有4个IP,两个北京两个上海,服务器到4个IP的网络质量都不一样。现在这个时间高的连接数有5000,低的2800,应该是DNS解析随机获得的IP,可能网络差的连接数高,也可能网络好的连接数高。不知道自己主动控制有没有效果,TCP连接断开后就轮换另一个IP连接,请求域名的话DNS可能会解析到重复IP,按顺序轮换到最后应该是网络好的IP连接数多吧。
2019
旧版的4个IP连接数都在1000多点,没什么网络压力

程序是跑得越久覆盖率越高的应该

@Billyzou0741326
Copy link
Owner Author

猜测DNS解析是由b站反向代理均衡分配的
直接用url让b站分配就好…

@Pearlulu
Copy link

Pearlulu commented Jan 4, 2020

另外我干脆把新连接也按掉线率返回IP,好像更好使点,先跑两晚上试试。

这办法在网络很差的机器上表现不错,但是在网络好的机器上容易造成只连一个IP,虽然不影响结果,但是总觉得不太好。还得再想想怎么弄才好,总感觉我在做奇怪的无用功。

解决了,这回应该救得不能再救了,总感觉自己智商不够用,盯着个数组看了半天才想明白。

@Billyzou0741326
Copy link
Owner Author

大佬太肝了吧 不早点睡吗

@Billyzou0741326
Copy link
Owner Author

Billyzou0741326 commented Jan 4, 2020

image
按理说b站只播报一次上舰的消息,程序刚启动的时候像这种比较早的舰长,是怎么获取到的呢?按理说连接到房间的时候已经播报过了。

另外我干脆把新连接也按掉线率返回IP,好像更好使点,先跑两晚上试试。

比较早的舰长不是动态/静态房间检测到的
是6个分区用以检测高能的房间 通过API查询房间时测到的
动态/静态房间跳过API查询,避免莫名其妙的风控导致整个监控完全崩毁

@Billyzou0741326
Copy link
Owner Author

没错... 有次测试触发了风控 翻车现场十分惨烈

@Pearlulu
Copy link

Pearlulu commented Jan 5, 2020

其实,就是盯着数组看了一个小时才想清楚怎么让网络好的IP平均分配连接,找了台网络好的试了下,掉线率都很低的是平均分配IP了,网络差的也比较正常,不过那个统计掉线策略还是不太好。风控不知道是不是因为短时间内对同一个IP大量连接请求。对了,顺便说下客户端好像断开后不会重连,比如路由器重拨,心跳似乎在运行,但是不抽奖了。

@Billyzou0741326
Copy link
Owner Author

不重连的情况我需要多点信息
逻辑是重试3次后 变成每30秒重试一次
我测试过服务器重启3连 无一例外的所有client都重连上了

是完全收不到播报吗?

@Pearlulu
Copy link

Pearlulu commented Jan 5, 2020

路由器重拨试了几次,完全收不到,日志就停留在断网那个时候了,不过直播挂机经验一直在涨。
onClose不知道为什么好像没触发

@Pearlulu
Copy link

Pearlulu commented Jan 5, 2020

懒得再去那边开issue了,刚单独测试了下。
nodejs这个ws模块有点无语,服务器端如果关闭会触发close事件,但是客户端这边如果断网是不会触发close事件的,还没浏览器的ws事件方便。
https://github.com/websockets/ws#how-to-detect-and-close-broken-connections
得靠那个定期接触发的ping事件检测有没有断网。

@Billyzou0741326
Copy link
Owner Author

是我疏忽了 测试的时候全程跑服务器的 没考虑过客户端断网的情况
服务器的ping设置的20秒间隔 我往客户端加个lastPing检测吧

@Billyzou0741326
Copy link
Owner Author

先鸽几天 有课了

@Pearlulu
Copy link

Pearlulu commented Jan 6, 2020

先鸽几天 有课了

hhh结果又肝上了
又发现个新的现象,不同CPU连接数竟然不一样,内核越多连接数越高,同样是1核的也是性能好的连接数多。三个同时跑,一个2W连接数,一个1W5,一个1W,覆盖率也是从高到低,CPU都没跑满。

@Billyzou0741326
Copy link
Owner Author

太强了吧 这么多服务器测 不贵吗....

@Pearlulu
Copy link

Pearlulu commented Jan 6, 2020

都是各种便宜的辣鸡VPS,专门用来瞎折腾的

@Billyzou0741326
Copy link
Owner Author

我以前用的aws和现在跑的学校服务器都挺稳

而且线路都是海外这边的

@Pearlulu
Copy link

Pearlulu commented Jan 7, 2020

原本以为要解决网络问题很简单,切换网络好的IP就行了,结果一写起来全是坑
每次睡前懒得折腾,刚想睡觉想法就来,还好折腾网络真开心。。
感觉这次应该折腾得差不多了,各种网络情况都考虑到了,网络差的好的,高峰期和平时,新连接数多连接数少,根据实时网络质量IP负载均衡切换。就是代码写得无比难看。

@Billyzou0741326
Copy link
Owner Author

早点睡 我也没多少时间写代码了反正
难看无所谓啊hhh逻辑清晰了代码可以后期重整的
前几天我才重写了一遍request/response那层,用的Fluent API比之前优雅不少倍。同理IP分配也可以整理的肯定

@Pearlulu
Copy link

Pearlulu commented Jan 8, 2020

把房间添加到永久监听的时候,似乎有几率会漏,比如连上两个舰,检测到第一个舰长后从动态转到静态,然后第二个就漏了。

@Billyzou0741326
Copy link
Owner Author

快忙死了hhh 不过问题了解了 暂时想不到转静态那几秒的差时怎么处理

@Billyzou0741326
Copy link
Owner Author

好吧想到了

@Billyzou0741326
Copy link
Owner Author

一写就是几个小时... 结果作业都没动一下 wsl

@Pearlulu
Copy link

Pearlulu commented Jan 9, 2020

折腾这个比写作业有趣一万倍hhhhh
image
最右边的是老版本,网络问题应该是不能继续优化了,几个参数也调得差不多了,再跑几天没啥问题就可以结束折腾了
剩下的就是养静态房间列表提高覆盖率了

@Billyzou0741326
Copy link
Owner Author

静态目前的策略是慢慢收集 我这边有接近5000静态了 如果有更激进的获取方式更好hhh
动态分双核发现个问题 估计分配房间逻辑不稳 有概率两边重复监听同一个房间

动态的问题可以放一放 先攻静态吧

@Pearlulu
Copy link

Pearlulu commented Jan 9, 2020

改到500万次,爆了5G内存。。setTimeout果然不能大量使用,又学到了。还是老实把setInterval的值调小点好使。

对了,还有个误区纠正一下,nodejs的setTimeout运行完成几秒后就会完全释放内存,辣鸡chrome吃了内存就不吐出来

@Billyzou0741326
Copy link
Owner Author

果然 NodeJS的v8引擎gc还是很不错的hhh

@Pearlulu
Copy link

Pearlulu commented Jan 9, 2020

静态目前的策略是慢慢收集 我这边有接近5000静态了 如果有更激进的获取方式更好hhh
动态分双核发现个问题 估计分配房间逻辑不稳 有概率两边重复监听同一个房间

动态的问题可以放一放 先攻静态吧

要不开播的房间舰长数大于50的都直接添加到静态里?还有就是如果长期不播的可以从列表里删掉。

@Billyzou0741326
Copy link
Owner Author

舰长数要访问两个API才能弄到 上次我被风控就因为获取舰长数导致的23333

@Pearlulu
Copy link

看了下日志,最新版第一天晚上9点左右还是412了一次,之后几天没412
image
渣网络的问题跑了很多天比较稳定,不用再继续改了,可以看看怎么把这写得比较丑陋的代码整合进去了

@Billyzou0741326
Copy link
Owner Author

这个我想了下 可以在建立连接后用net.Socket.remoteAddress获取IP存为this.ip_addr,掉线时this.emit('ip_disconnect', this.ip_adrr),controllerlistener.on('ip_disconnect', ...)记录掉线率

TypeScript的重写差不多完成一半了 重构了些部分 顺便写进ip也是可以的

@yjqiang
Copy link

yjqiang commented Feb 1, 2020

静态房间你可以用我的那一套就行,我间隔几个月就会跑一次。数据在 1.5w 左右

@Billyzou0741326
Copy link
Owner Author

我这个不要紧... 静态有万了 不过一直没放上来2333

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants