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