Memory Jruby,垃圾收集器,Redis

Memory Jruby,垃圾收集器,Redis,memory,jruby,redis,store,Memory,Jruby,Redis,Store,我有一个Jruby On Rails应用程序,它使用多个WS来收集数据。应用程序处理数据并将其显示给用户,用户进行更改,然后发送回WS 这里的问题是,我将所有内容都存储在使用内存存储的缓存(基于会话)中。但在没有明确原因的情况下(至少对我而言),不时会出现以下错误: ActionView::Template::Error (GC overhead limit exceeded) 我读了我能找到的关于它的资料,显然这意味着垃圾收集器花费了太多时间试图释放内存,但在这方面没有取得任何实际进展。我的

我有一个Jruby On Rails应用程序,它使用多个WS来收集数据。应用程序处理数据并将其显示给用户,用户进行更改,然后发送回WS

这里的问题是,我将所有内容都存储在使用内存存储的缓存(基于会话)中。但在没有明确原因的情况下(至少对我而言),不时会出现以下错误:

ActionView::Template::Error (GC overhead limit exceeded)
我读了我能找到的关于它的资料,显然这意味着垃圾收集器花费了太多时间试图释放内存,但在这方面没有取得任何实际进展。我的猜测是,由于所有东西都像缓存一样存储在内存中,GC试图释放它,但无法释放,并抛出此错误

下面是问题

  • 我怎样才能避开这件事
  • 如果我从内存存储切换到Redis,如果我的假设是正确的,这个问题还会出现吗
  • GC是否会尝试释放Redis的内存区域?(这可能是个愚蠢的问题,但……尽管如此,还是请帮忙:))

谢谢。

Redis是一个单独的进程,所以你的应用程序垃圾收集器不会触及它。但是,可能是redis耗尽了应用程序可用的所有内存,或者您实际使用的是进程内存缓存,而不是redis,这是一种不同类型的内存存储