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)

相关推荐
云飞云共享云桌面7 小时前
传统工作站 vs 云飞云共享云桌面:制造业设计云桌面选型深度对比
运维·服务器·前端·网络·3d·架构·制造
JAVA面经实录9178 小时前
操作系统面试题
java·服务器·数据库·计算机网络·面试
小刘|8 小时前
Spring AI Alibaba 集成和风天气 API 实战
java·服务器·前端
森G9 小时前
61、信号与槽机制在 TCP 编程中的应用---------网络编程
网络·c++·qt·网络协议·tcp/ip
Maynor9969 小时前
我用 Codex 给自己的网站上线了一个智能体客服:从 Dify 到服务器部署,全程实战复盘
运维·服务器
聚名网10 小时前
域名net,com,cn有区别吗?有哪些不同呢?
服务器·开发语言·php
java_cj10 小时前
深入kubectl create源码:从YAML到Pod的完整链路拆解
运维·云原生·容器·kubernetes
小小小花儿10 小时前
SSH密钥配置(免密连接远程服务器)
服务器·ssh
swordbob11 小时前
NIO 的 Channel 里有多个 BIO 吗?
linux·网络·nio
天天讯通11 小时前
OKCC 呼叫中心安全性能全解析:技术防护与管理措施指南
大数据·开发语言·网络·人工智能·安全·语音识别