【问题标题】:jruby runtimes and tomcatjruby 运行时和 tomcat
【发布时间】:2013-08-09 23:19:21
【问题描述】:

我们在 tomcat 下运行 jruby/rails 应用程序,由于我们正在使用的某些组件,无法立即转换到线程安全。在此期间,我们计划设置 jruby.runtime.minjruby.runtime.max 以防止 perm-gen 内存不足错误。不幸的是,这会将并发用户的数量限制在一个相当小的数量,所以我的问题是运行时何时被回收?是基于会话还是其他。降低会话超时是否有助于加快池的可用性,或者还有更多的作用。任何可以更好地了解 jruby 运行时如何工作的细节的链接将不胜感激。

【问题讨论】:

    标签: tomcat jruby jrubyonrails jruby-rack


    【解决方案1】:

    首先,在 q 中存在一些混淆 - 设置最小/最大运行时参数不会防止 perm-gen 错误...您可能需要稍微增加内存(取决于您的应用程序的占用空间)重新看到那些特别是。如果您将最小值/最大值设置得更高。

    其次 - 它肯定会限制并发,但不会太多 - 将其视为杂种(瘦)集群:处理的并发请求>=运行实例的数量

    单个运行时在单个请求期间被阻塞(完全不依赖于任何会话状态),在返回响应后,运行时返回到池中并准备好处理另一个请求。如果一个请求进来并且池中没有运行时,它将尝试等待一个可用,然后返回 HTTP 错误(可以使用 jruby.runtime.acquire.timeout 进行配置)。 p>

    我建议使用 min = max 运行或至少(集成)测试,因为按需启动运行时可能成本高昂(这又取决于应用程序)并且同时更难当您在服务时按需启动 Rails 实例时猜测您的内存需求。请注意,启动可能需要一段时间,因为您的应用程序需要在最小部署时间内加载。

    【讨论】:

    • 感谢您的回复,Kares - 非常清楚地解释了我试图理解的内容。通过谷歌搜索没有找到任何解释这一点
    猜你喜欢
    • 2011-06-20
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    相关资源
    最近更新 更多