【问题标题】:Why does a JRuby application on App Engine take so long to start (versus a Python app)?为什么 App Engine 上的 JRuby 应用程序需要这么长时间才能启动(与 Python 应用程序相比)?
【发布时间】:2010-03-30 18:11:20
【问题描述】:
我正在考虑在 App Engine 上使用 JRuby,但听说 App Engine 上的 Juby 应用程序与 Python 应用程序相比启动滞后较长。为什么是这样?
是因为 JRuby jar 文件太大以至于冷启动需要在应用程序开始服务之前将它们加载到内存中吗?这是我的猜测,但我不确定这是否是一个精确的技术解释。如果是这样,为什么 Python 不一样?
【问题讨论】:
标签:
java
python
ruby
google-app-engine
jruby
【解决方案1】:
基本上就是这样。当您的应用有一段时间未使用时,App Engine 会将其换出,直到收到另一个请求。
发生这种情况时,它会加载您的应用所需的所有 JAR,这可能需要很长时间,在某些情况下超过 10-15 秒。
我对 JRuby 没有任何经验,但this page 提供了一些关于如何减少应用程序冷启动时间的提示。即使您不是严格编写 vanilla Java,这些提示也应该很有用。
基本上,不要包含您的应用不严重依赖的任何 JAR。
【解决方案2】:
免责声明:我自己没有对此进行基准测试
Python 版本和 JRuby 的区别
可能与 JRuby 是一门语言这一事实有很大关系
在另一种语言之上实现。另一个是 Python 引擎
hand 是原生的,并且更接近于 CPython(一些内部变体
Unladen swallow,我猜)。这意味着对于 Python,
解释器根据定义已经加载,但是对于 JRuby,你的
应用程序必须先加载 Ruby 解释器才能开始
从它的应用程序逻辑开始。