Я использую следующий фрагмент кода для регистрации своих запросов. Большую часть времени мои запросы обслуживаются в пределах 100 мс. Но иногда чтение буфера занимает слишком много времени, что приводит к высокому TP99.9.
final HttpServletRequest rq = (HttpServletRequest) request;
final BufferedReqWrapper brq = new BufferedReqWrapper(rq);
А затем в BufferedReqWrapper
private final BufferingIPStream bis;
public BufferedReqWrapper(final HttpServletRequest req, final Integer maxBytesToBuffer) throws IOException
{
super(req);
bis = new BufferingIPStream(super.getInputStream());
}
В BufferingIPStream
public BufferingIPStream(final InputStream delegate) throws IOException
{
this.delegate = delegate;
buffer = fillBuffer(delegate);
}
, а метод fillbuffer -
private byte[] fillBuffer(final InputStream input) throws IOException
{
return IOUtils.toByteArray(input);
}
Этот код отлично работает для большинства запросов, но иногда занимает много времени, что приводит к задержке более 1000 мс (TP99.9 становится высоким).