在部署大型Java Web应用程序(> 100 MB .war)时,我正在使用以下部署过程: 应用程序.war文件在开发机器上进行本地扩展。 扩展的应用程序是从开发机器到现场环境的rsync:ed。 实时环境中的应用程序服务器在rsync之后重新启动。 这一步不是严格需要的,但是我发现在部署时重新启动应用程序服务器避免了由于频繁的类加载导致的“java.lang.OutOfMemoryError:PermGen空间”。 这个方法的好处是: rsync最大限度地减less了从开发机器发送到现场环境的数据量。 上传整个.war文件需要十多分钟,而rsync需要几秒钟。 这种方法不好的地方: 当rsync运行时,由于文件被更新,应用程序上下文被重新启动。 理想情况下,重启应该在rsync完成之后发生,而不是在仍在运行的时候。 应用程序服务器重新启动导致大约两分钟的停机时间。 我想find具有以下属性的部署过程: 部署过程中停机时间最短。 花费最less的时间上传数据。 如果部署过程是特定于应用服务器的,那么应用服务器必须是开源的。 题: 根据规定的要求,最佳的部署过程是什么?