【发布时间】:2010-12-11 01:15:06
【问题描述】:
在部署大型 Java webapp (>100 MB .war) 时,我目前使用以下部署过程:
- 应用程序 .war 文件在开发机器上本地展开。
- 扩展的应用程序从开发机器rsync:ed到实时环境。
- 实时环境中的应用服务器在 rsync 后重启。这一步不是必须的,但我发现在部署时重新启动应用程序服务器可以避免由于频繁加载类而出现“java.lang.OutOfMemoryError: PermGen space”。
这种方法的好处:
- rsync 最大限度地减少了从开发机器发送到实时环境的数据量。上传整个 .war 文件需要十多分钟,而 rsync 需要几秒钟。
这种方法的坏处:
- 当 rsync 运行时,应用程序上下文会重新启动,因为文件已更新。理想情况下,重启应该在 rsync 完成后进行,而不是在它仍在运行时进行。
- 应用服务器重启会导致大约两分钟的停机时间。
我想找到一个具有以下属性的部署过程:
- 部署过程中的停机时间最短。
- 上传数据花费的时间最短。
- 如果部署过程是特定于应用服务器的,那么应用服务器必须是开源的。
问题:
- 鉴于所述要求,最佳部署流程是什么?
【问题讨论】:
-
在我看来这应该是一个“社区维基”
-
内森:为什么?这是一个我需要回答的技术问题。也许我错过了一些围绕“社区 wiki”的规则。
-
只是为了满足我的好奇心:你的 webapp 有什么东西这么重?
-
Pascal Thivent:Grails + 静态文件(图形)+ 一些外部依赖项很快就会增加到 >100 MB。
-
knorv,您是否尝试过调整服务器 jvm 上的内存/permgem 空间?
标签: java tomcat grails deployment resin