У меня есть экземпляр Tomcat 8, работающий за обратным прокси-сервером Nginx. Он обслуживает обычное приложение J2EE, которое мы обновляем через Maven 3 и плагин cargo-maven2-plugin.
Обычно это работает нормально, но в конечном итоге Tomcat Manager (или Nginx, на самом деле сложно сказать) дает сбой, возвращая слишком большой объект 413. Максимальный размер загрузки установлен на 150 МБ, а WAR - 85, так что это не должно быть проблемой.
[INFO] [edDeployerDeployMojo] Resolved container artifact org.codehaus.cargo:cargo-core-container-tomcat:jar:1.6.1 for container tomcat8x
[INFO] [mcat8xRemoteDeployer] Deploying [C:\source\web-0.1-SNAPSHOT.war]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:56 min
[INFO] Finished at: 2016-11-10T17:07:30+01:00
[INFO] Final Memory: 61M/656M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.cargo:cargo-maven2-plugin:1.6.1:deploy (default-cli) on project reforce-fasthi-web: Execution default-cli of goal org.codehaus.cargo:cargo-maven2-plugin:1.6.1:deploy failed: Failed to deploy [C:\source\web-0.1-SNAPSHOT.war]: Server returned HTTP response code: 413 for URL: https://server:443/manager/text/deploy?path=%2F&version=20161110-1604UTC -> [Help 1]
Есть идеи, в чем может быть проблема? Я много чего пробовал, например, обойти Nginx (в этом случае время передачи истекает). Согласно обзору сервера Tomcat Manager, загрузки вызывают затяжной поток, который не исчезает, пока сервер не будет перезапущен. Журналы абсолютно ничего не говорят!
После многих долгих сеансов поиска и устранения неисправностей мы наконец нашли ответ. Оказывается, проблема была в объеме памяти; с нашей конфигурацией Tomcat не смог запустить новое приложение в доступной памяти.
Как ни странно, поведение действительно стохастическое, иногда оно работает, хотя памяти осталось очень мало, а иногда нет, хотя памяти достаточно.
Мы закончили увеличивать максимальный объем доступной памяти (это виртуальный сервер), чтобы он мог расширяться во время фактического развертывания, а затем снова устанавливаться. С тех пор мы не видели проблемы (постучите по дереву ...).