У нас была специфическая проблема в нашей производственной системе из-за очень глупой ошибки в клиентской библиотеке.
Произошло следующее:
public <T> ResponseEntity<T> executePut(String url, JsonObject payload, Class<T> t) {
String payloadString = payload != null ? payload.toString() : null;
HttpEntity<String> entity = new HttpEntity<>(payloadString, getCommonHeaders());
restTemplate.getMessageConverters()
.add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
return restTemplate.exchange(url, HttpMethod.PUT, entity, t);
}
Как видно из приведенного выше методаклиентская библиотека брала объект autowired (singleton) и продолжала добавлять элемент в список MessageConverters.
Проблема: через некоторое время ссылка на объект restTemplate давала NPE, что тоже при трассировка пустого стека.
PS: Я указываю на это как на вероятную причину, потому что это единственное изменение кода, которое произошло между двумя развертываниями.
Кроме того, не должен вызывать большой объекткуча нехватки памяти? В нашем случае этого тоже не произошло, и другие потоки приложений работали безупречно.