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)

相关推荐
hhb_61812 分钟前
SQL高性能查询优化与复杂场景实战指南
服务器·数据库·sql
醇氧13 分钟前
WSL2(Windows Subsystem for Linux ) 从入门到实践指南
linux·运维·服务器·windows·学习
xiaoye370814 分钟前
java接口文档工具 swagger2和swagger3对比
java·服务器·前端
wangyangyangcumt16 分钟前
银河麒麟V10 SP3离线安装Nginx1.21.5全记录
linux·运维·数据库
杨浦老苏23 分钟前
自托管网络监控工具LanLens
网络·docker·监控·群晖
能年玲奈喝榴莲牛奶26 分钟前
路由器弱口令利用
网络·web安全·智能路由器·网络设备·攻防演练
菱玖34 分钟前
常见 HTTP 状态码详解
网络·网络协议·http
被摘下的星星35 分钟前
无类比域间路由选择(CIDR)
网络
TechWayfarer37 分钟前
离线IP数据库内网部署:场景选型与热更新落地实践
网络·数据库·python·网络协议·tcp/ip
科技牛牛37 分钟前
离线IP数据库推荐:风控合规场景怎么选
网络·数据库·tcp/ip·离线ip数据库·.数据安全