一、前言
在下载前,为了消除顾虑,再分析dump进行优化,接上篇文章,找出了dotnetty的问题,那surging 没有问题了?这次我们用windbg 来分析,先输出命令!dumpheap -stat,如下图

从上图来看,已经没有arraypool 对象了,所以dotnetty 优化成功,那么占了19M的system.Byte[]是不是又是dotnetty的出问题了?输入命令!dumpheap -mt 7ffeed6378d8 查看具体对象

然后找一个比较大的,输入命令!dumpobj /d 335e7db8a8, 去看下明细

content 居然有serviceId 信息,这里还不清楚是什么,点击进去看结果

从以上内容来看,发现问题所在了居然有payload 用户信息,那么这个问题就是出现在restcontext或者是rpccontext, 但是有http 信息,如下图

从以上分析就知道RestContext出现问题了,然后再看源码,里面有IHttpContextAccessor 对象比较可疑没有销毁,每次获取对象都是通过 ServiceLocator.GetService进行获取,明显是依赖注入的问题,然后发现注入的单例模式,看官方说明说IHttpContextAccessor不能用单例,后面改成了Scoped, 代码如下
context.Services.AddScoped<IHttpContextAccessor, HttpContextAccessor>();
然后问题解决了。发布之后,我可是压测了,还一直直播推流,但是内存一直比较稳定

HttpFlv:http://117.72.121.2:281/httpflv.html (黑衣人)
HttpFlv:http://117.72.121.2:281/httpflv1.html (大红包)
rtmp:rtmp://117.72.121.2:76/live1/livestream2 (黑衣人)
rtmp:rtmp://117.72.121.2:76/live1/livestream3 (大红包)
凯亚 (Kayak) 是什么?
凯亚(Kayak)是基于.NET6.0软件环境下的surging微服务引擎进行开发的, 平台包含了微服务和物联网平台。支持异步和响应式编程开发,功能包含了物模型,设备,产品,网络组件的统一管理和微服务平台下的注册中心,服务路由,模块,中间服务等管理。还有多协议适配(TCP,MQTT,UDP,CoAP,HTTP,Grpc,websocket,rtmp,httpflv,webservice,等),通过灵活多样的配置适配能够接入不同厂家不同协议等设备。并且通过设备告警,消息通知,数据可视化等功能。能够让你能快速建立起微服务物联网平台系统。
凯亚物联网平台:http://117.72.121.2:3100(用户名:fanly 密码:123456)
链路跟踪Skywalking V8:http://117.72.121.2:8080/
surging 微服务引擎开源地址:https://github.com/fanliang11/surging(后面surging 会移动到microsurging进行维护)
二、下载使用
这是凯亚物联网平台测试版
通过网盘分享的文件:kayak.iot.7z
链接: https://pan.baidu.com/s/17ylodtrjD4MQbWWXhaTp8Q?pwd=48a6 提取码: 48a6
然后下载完成,可以看到以下目录结构

然后可以点击startup.bat 开始允许凯亚物联网平台,然后也可以在skywalking 的bin 目录下找到startup.bat进行点击运行skywalking
然后输入http://127.0.0.1:3100/进行访问,如下图可以登录后可以看到有两个服务节点

然后全局的负载算法改成了RoundRobin(权重轮询算法),注意可以在surgingsetting.json文件中修改,大家可以进行测试,新添加的服务节点会有10分钟预热,权重会降低,等服务器预热完毕,达到最佳性能后,会按照设置好的权重进行计算访问。

网路组件开启的http组件,也可以访问swagger

可以访问http://127.0.0.1:8080/,看到skywalking

链路追踪

点击可以查看对应打印的日志

如果不想开启skywalking, 然后可以在surgingsetting.json 设置,Packages配置节把 SkyApmLogModule;,SkywalkingModule; 去掉就可以了,再重新运行启动就不会加载skywalking 模块,如下图所示
