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)

相关推荐
feng_you_ying_li1 分钟前
liunx指令的介绍(2)
linux·运维·服务器
AC赳赳老秦8 分钟前
使用OpenClaw tavily-search技能高效撰写工作报告:以人工智能在医疗行业的应用为例
运维·人工智能·python·flask·自动化·deepseek·openclaw
czxyvX9 分钟前
010-NAT-代理服务-内网穿透
网络
逸Y 仙X12 分钟前
文章八:ElasticSearch特殊数据字段类型解读
java·大数据·linux·运维·elasticsearch·搜索引擎
竹之却17 分钟前
国内外主流大模型全面解析(2026版)
服务器·大模型·国内外主流大模型·openclaw·云养虾
源远流长jerry27 分钟前
RDMA Memory Region (MR) 机制详解:地址转换与内存保护
linux·服务器·网络·tcp/ip·架构·mr
c++逐梦人27 分钟前
Linux进程信号
linux·服务器
徐子元竟然被占了!!28 分钟前
ENSP学习-路由器
网络·学习
逸Y 仙X31 分钟前
文章九:ElasticSearch索引字段常见属性
java·大数据·服务器·数据库·elasticsearch·搜索引擎
9稳35 分钟前
基于plc的自动化立体仓库控制系统设计
开发语言·网络·数据库·嵌入式硬件·plc