Jruby проблема с постоянством - PullRequest
0 голосов
/ 24 марта 2011

Я хочу хранить объекты в jruby в течение короткого времени.Объекты используют процы, поэтому у меня, похоже, проблемы с сохранением в db.Если у кого-то есть хорошие идеи о том, как сохранить объекты jruby в течение 1-5 минут, это было бы замечательно.

Эти объекты довольно велики, в частности, объекты обозревателя скорости.

ПокаЯ создал модель в 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.

Я запускаю программу, и она некоторое время работает нормально.Но через день, если я позвоню 'get' сразу после 'store' (10-20 секунд), я вернусь ноль.

Я не могу найти никаких ошибок в журналах.

EDITЯ также обнаружил, что элемент действительно вставлен в хеш-таблицу (хеш-таблица не исчерпала память во время вставки):

До 24 часов:

Persist.storeItem (), а затемPersist.getItem () работает нормально.

HTTP-вызов магазина.Затем другой http-вызов get возвращает объект.

Через 24 часа:

Persist.storeItem (), за которым следует Persist.getItem (), работает нормально.

HTTP-вызовдля магазина.Затем другой http-вызов get возвращает nil.

1 Ответ

1 голос
/ 24 марта 2011

Я не вижу удаляемого объекта ни в одной точке.

Я бы изучил JVM, используя другие инструменты. Вполне возможно, что вы исчерпали память, но сообщение / исключение журнала никогда не создается для сообщения об исчерпании памяти.

Могу я предложить подключить JMX-мониторинг различных областей кучи и создать средство, с помощью которого хэш может очищаться от старых объектов.

Хотел бы я иметь больше для тебя. Удачи!

...