【发布时间】:2020-07-23 15:10:51
【问题描述】:
我在 Linux 上的 docker 容器中有 .NET Core 3.1 Web API。
我使用测试工具向 Web API 发出 1000 个连续请求。
Web API 控制器如下所示:
public MyController(ISendService sservice)
{
_sservice = sservice;
}
[HttpPost()]
public async Task<IActionResult> SendMessage([FromBody] SendMessageRequest request)
{
await _sservice.SendIt(request.Message);
}
我的发送服务如下所示:
public class SendService: ISendService
{
private readonly HttpClient _client;
public SendService(HttpClient client)
{
_client = client;
}
public async Task SendMessage(string data)
{
var request= new HttpRequestMessage(HttpMethod.Post, "https://somelocation/test") { Version = new Version(2, 0) };
request.Content = new StringContent(data);
var response = await _client.SendAsync(request);
//Log response
}
}
我在 Startup 中添加 SendService,如下所示:
services.AddHttpClient<ISendService, SendService>().ConfigurePrimaryHttpMessageHandler(() =>
{
var handler = new HttpClientHandler { SslProtocols = SslProtocols.Tls12 };
var store = new Store.GetStore();
handler.ClientCertificates.Add(store.certificate);
return handler;
});
我的问题是,每当调用 SendMessage 时,docker 容器内的内存使用量都会随着每个请求而上升。即我调用它 10 次,内存会上升并停留在那里。我调用它 1000 次,内存不断增加,超过 85%(读取到 .NET Core 3.1 中的限制应该是 75%),并且在每个测试场景中等待 20 分钟。
为什么它似乎没有进行垃圾收集或释放内存?我正在运行测试,但我认为它将达到 100%,并且服务将停止,这不好。谢谢
【问题讨论】:
-
连接可能没有关闭。从 cmd.exe >Netstat -A 试试看你是否有多个连接。
标签: c# docker asp.net-core docker-compose httpclient