我有一个 Tomcat 8 实例在 Nginx 反向代理后面运行。它为常规 J2EE 应用程序提供服务,我们通过 Maven 3 和 cargo-maven2-plugin 对其进行更新。
通常情况下,这种方法可以正常工作,但最终 Tomcat Manager(或 Nginx,很难说)会失败,返回 413 实体太大。最大上传大小设置为 150 MB,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 的服务器概述,上传会导致一个持续的线程,除非重新启动服务器,否则该线程不会消失。日志什么也没说!
答案1
经过多次漫长的故障排除,我们终于找到了答案。原来是内存量的问题;在我们的配置下,Tomcat 无法在可用内存内启动新应用程序。
奇怪的是,这种行为确实是随机的,有时虽然剩余内存很少,但它仍然有效,有时虽然有足够的可用内存,但它仍然无效。
我们最终增加了最大可用内存量(这是一台虚拟服务器),以便它可以在实际部署期间扩展,然后再次稳定下来。自那以后,我们再也没有见过这个问题(敲木头……)。