Использование ASP.NET CORE 2.2, My REST API в производственных встречах, спорадические ошибки плохого запроса: < /p>
Чтение тела запроса, проведенного из -за слишком медленно. См. MinrequestbodyDatarate
В производственной среде, запросы обычно представляют собой смесь быстрых и медленных подключений. Будьте достаточно низким, чтобы запустить настройку Kestrel 240B/S MINBodyDatarate)
Исключение поднимается в пользовательском классе TextInputFormatter, на jarray.load Call:
public override Task ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)
{
var stream = context.HttpContext.Request.Body;
using (var reader = context.ReaderFactory(stream, encoding))
using (var jsonReader = new JsonTextReader(reader))
{
// Don't close the request stream because you many need it in other middleware or controllers.
jsonReader.CloseInput = false;
bool isSuccessful = true;
List model = null;
try
{
Assembly assembly = typeof(BaseCommand).Assembly;
// here we're reading and parsing the json array directly from the stream
var objCollection = JArray.Load(jsonReader);
Log.Information("Json message:{0}", JsonConvert.SerializeObject(objCollection));
model = objCollection
.Select((obj) =>
{
// here some code mapping the incoming data to the internal type BaseCommand
// ...
return mappedCmd;
}).ToList();
}
catch (Exception ex)
{
Log.Error(ex, "Error parsing BaseCommand");
isSuccessful = false;
}
if (isSuccessful)
{
if (model == null && !context.TreatEmptyInputAsDefaultValue)
return InputFormatterResult.NoValueAsync();
else
return InputFormatterResult.SuccessAsync(model);
}
return InputFormatterResult.FailureAsync();
}
}
< /code>
После того, как на сервере есть 5 или 6 активных запросов (согласно нашей Haproxy), мы начинаем получать около 12% ошибок. Ошибка.
После прочтения этого потока я подозревал голод потока, и поэтому я асинхронизировал метод (используя wait jarray.loadasync () вместо Jarray.load () ), а также увеличил количество mindthread threatpool (10 вместо 1): противоположный моему ожиданию, это не имело эффекта на все! ЦП и диагностика памяти, и они не насыщены: никогда не превышают 15% ЦП и 10% памяти.>
Подробнее здесь: https://stackoverflow.com/questions/790 ... e-minreque