我们在 tomcat 下运行 jruby/rails 应用程序,由于我们正在使用的一些组件,无法立即转换到线程安全。在此期间,我们计划设置jruby.runtime.min和jruby.runtime.max以防止 perm-gen 内存不足错误。不幸的是,这会将并发用户的数量限制在一个相当小的数量,所以我的问题是运行时何时被回收?是基于会话还是其他。降低会话超时是否有助于加快池的可用性,或者还有更多的作用。任何可以更好地了解 jruby 运行时如何工作的细节的链接将不胜感激。
问问题
279 次
1 回答
-1
首先,在 q 中存在一些混淆 - 设置最小/最大运行时参数不会防止 perm-gen 错误......当你看到那些时,你可能需要稍微增加内存(取决于你的应用程序的占用空间)尤其是 如果您将最小值/最大值设置得更高。
其次 - 它肯定会限制并发但不会太多 - 将其视为杂种(瘦)集群:处理的并发请求> =运行实例的数量
单个运行时在单个请求的持续时间内被阻塞(完全不依赖于任何会话状态),在返回响应后,运行时返回到池中并准备好处理另一个请求。如果一个请求进来并且池中没有运行时,它将尝试等待一个可用,然后返回 HTTP 错误(可以使用jruby.runtime.acquire.timeout进行配置)。
我建议使用min = max运行或至少(集成)测试,因为按需启动运行时可能会很昂贵(这又取决于应用程序),同时在启动时更难猜测您的内存需求服务时按需提供 Rails 实例。请注意,启动可能需要一段时间,因为您的应用程序需要在最小部署时间内加载。
于 2013-08-12T07:33:02.213 回答