Asp.Net Core Web Api内存泄漏问题

背景

使用Asp.Net Core Web Api框架开发网站中使用到了tcp socket通信,网站作为服务端开始tcp server,其他的客户端不断高速给它传输信息时,tcp server中读取信息每次申请的byte\[\]没有得到及时的释放,导致内存浪费越来越多,最终内存溢出,系统崩溃。

示例代码

cs 复制代码
Socket server = new Socket(SocketType.Stream, ProtocolType.Tcp);
IPAddress iPAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint iPEndPoint = new IPEndPoint(iPAddress, 8080);
server.Bind(iPEndPoint);
server.Listen(3);
Task.Run(() =>
{
    Task.Run(() =>
    {
        while (true)
        {
            Socket client = server.Accept();
            while (true)
            {
                byte[] buffer = new byte[client.ReceiveBufferSize];
                int length = client.Receive(buffer);
                if (length > 0)
                {
                    string str = Encoding.ASCII.GetString(buffer, 0, length);
                    Console.WriteLine(str);
                }
                else
                {
                    client.Shutdown(SocketShutdown.Both);
                    client.Close();
                    client.Dispose();
                    break;
                }
            }
        }
    });
});

Console.ReadLine();

客户端使用网络调试助手进行模拟

结论

同样的代码,使用纯控制台项目框架搭建,则正常引发GC,每次申请的buffer数组都得到及时的释放。

而使用Asp.Net Core Web Api框架搭建的项目中跑这个服务端代码,则是这样的,很少引发GC,没有及时回收buffer数组的无效内存空间

解决方案

右键项目文件->编辑它

PropertyGroup属性中添加一个子属性,保存,重新启动项目

XML 复制代码
<ServerGarbageCollection>false</ServerGarbageCollection>

再次观察GC引发的频率和内存使用状况,可以发现内存没有继续暴增了

GC模式

已经有大佬总结,再次不多赘述

讨论.NET Core 配置对GC 工作模式与内存的影响 - YOYOFx - 博客园 (cnblogs.com)

相关推荐
YWamy8 小时前
如何降低RTC SDK在复杂网络环境下的运行成本
网络·音视频·实时音视频
北京盛世宏博8 小时前
信创国产化智慧档案馆管库系统:十二防一体化管控平台落地笔记
网络·方案·温湿度·智慧档案馆建设
镜子AI9 小时前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化
w-w0w-w9 小时前
SQL注入
网络·数据库·sql
tianyuanwo9 小时前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
一条泥憨鱼9 小时前
【计算机网络】短连接、长连接与连接池:从 TCP 握手到池化复用的完整链路
网络·数据库·网络协议·tcp/ip·计算机网络
北京盛世宏博10 小时前
数字孪生 3D 可视化实战:档案十防体系温湿度数据联动与告警定位实现
网络·档案八防·十防
Lynne30911 小时前
EtherCAT网络中,多个节点如何配置才能互不干扰?
网络·网络配置·ethercat·工业网络
Yang961111 小时前
实验室里的多面手:鼎讯信通TM-150信号发生器技术拆解与实测思考
网络
知已难寻11 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件