我想将物品存放在jruby中一小段时间。对象使用procs所以我似乎无法将其存储到db中。如果有人对如何坚持1-5分钟的jruby物体有好的想法,那就太好了。
这些对象非常大,特别是快速浏览器对象。
现在,我已经像jruby一样创建了一个模型:
class Persist
@@persistHash ||= Hash.new
def self.storeItem(id, item)
@@persistHash[id.to_s] = item
end
def self.getItem(id)
return @@persistHash[id.to_s]
end
end
我已经将应用程序弄坏了并将其部署到glassfish v2。
我运行该程序,它运行良好一段时间。但过了一天,如果我在“商店”(10-20秒)之后立即打电话给“获取”,我将返回零。
我在日志中找不到任何错误。
编辑:我还发现该项确实插入了哈希表(哈希表在插入过程中没有耗尽内存):在24小时之前:
Persist.storeItem()后跟Persist.getItem()工作正常。
商店的http调用。然后另一个get调用get返回对象。
24小时后:
Persist.storeItem()后跟Persist.getItem()工作正常。
商店的http调用。然后另一个get get的http调用返回nil。
答案 0 :(得分:1)
我在任何时候都看不到对象被删除。
我会使用其他工具检查JVM。很可能你已经耗尽了内存但是永远不会创建日志消息/异常以报告内存耗尽。
我是否可以建议连接各种堆区域的JMX监视,并创建一种方法,通过该方法可以清除旧对象的哈希值。
希望我能为你做更多的事情。祝你好运!