Стараюсь сделать проект более стабильным. Проблема в том, что в какой-то момент возникает ситуация, когда весь код, использующий связь с другими API, перестает работать. Пока я не перезагружаю кота, что мне нужно делать каждые несколько часов (от 4 часов до нескольких минут, похоже, это зависит от количества пользователей). При этом код, который принимает GET (или любой другой) запрос и не связывается с другими серверами во время своей активности - продолжает работать. Связь с другими серверами потеряна и другие проекты на этом сервере.
Сервер Ubuntu 12.04, nginx 1.12.0, tomcat 9.0.0.M26. На сервере 12 небольших проектов на java. Spring 5.0.4.RELEASE, спящий режим 5.2.16.Final, (PostgreSQL) 9.6.3
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
Я также получаю много других ошибок в разных местах и разных типов, чаще всего NPE (потому что из-за отсутствия связи объект, который я хотел от другого сервера = null), иногда я получаю HttpClientErrorException и статус 400, хотя удаленный сервер всегда отвечает на аналогичные запросы по статусу 200. На моем местном коте у меня никогда не было подобной ситуации. Давно мучаюсь с этой проблемой, ситуация ухудшается (больше пользователей - быстрее ломается), буду благодарен за любой совет. Прошу прощения за гугл переводчик.
Дамп потока из jstack - threaddumps.log
Ниже приведены потоки jvisualvm в то время, когда код не работает




Попробуйте перейти на Tomcat 9.0.6. Было исправлено несколько ошибок между 9.0.0 и 9.0.6.
Я тоже думал об этом, но это не помогло.
Достаточно много он показывает все признаки "конфигурации подключения", касающиеся балансировки нагрузки.
Как вы сказали, он делает это, когда привлекает большое количество пользователей. Однако похоже, что он использует какой-то тип изолированного объекта RMI в некоторых сетевых запросах
Сериализованные объекты - это объекты класса Java, которые «после загрузки в стек готовы» затем удаляются в специальный пакет для передачи по сети, аналогично удалению работающего двигателя транспортного средства и его удалению во время его работы и помещению в другое транспортное средство с пустым моторный отсек для подключения во время работы.
RMI называется «удаленным вызовом метода». Это означает, что существует очень преднамеренное действие по обработке действующей оперативной JVM на другой удаленной машине с использованием предварительно загруженных запущенных классов java из JVM, запущенной на другой машине, в другую действующую JVM по сети! ?
Решением было переместить объявление RestTemplate с глобального на локальное. Помимо добавленных значений «application / json» в RestTemplate, также автоматически добавлялись «text / plain» и «/». В моем классе, где были собраны методы доступа к API, каждый раз использование RestTemplate приводило к добавлению этой информации, в результате заголовок увеличивался до тех пор, пока я не получил «Заголовок запроса или файл cookie слишком велик».
Было бы правильно уделить этому больше внимания, но симптомы были странные, и это меня смущало. Теперь я понимаю, что одновременная поломка во всех проектах - просто совпадение из-за примерно равного количества обращений к другим серверам. И перезагрузка tomcat помогла, потому что заголовок вначале чистый. Теперь каждый метод создает свой собственный экземпляр RestTemplate и не накапливает эту добавленную информацию в заголовке.
Спасибо всем, кто помогал мне в чате и помог принять решение. Я также хочу отметить этот вопрос (и ответы на него) как очень полезный в моей ситуации - Spring RestTemplate - как включить полную отладку / ведение журнала запросов / ответов?
OP даже использует промежуточный выпуск, а не правильный выпуск. Я бы не стал вкладывать ни минуты в то, что происходит по этому поводу: D.