Я использую Glassfish v2, но у меня была такая же проблема в tomcat.
После запуска сервера я вижу:
sudo jmap -histo:live 14127 | grep KVStore
6222: 1 24 xxx.xxx.KVStore
Через некоторое время использования я получаю:
sudo jmap -histo:live 14127 | grep KVStore
7240: 1 24 xxx.xxx.KVStore
7360: 1 24 xxx.xxx.KVStore
Хотя я предполагаю, что это как-то связано с масштабированием Glassfish, это действительно проблематично, потому что я использую KVStore как класс хранения в памяти.
Этоодноэлементный класс со статической хеш-таблицей и методами получения и установки:
class KVStore
public static KVStore kvstore;
public Hashtable hash;
Теперь проблема в том, что с одним классом.Когда я звоню в магазин и получаю сервлет, я получаю объект просто отлично.Но с двумя классами или KVStore сервлет чередуется между двумя и никогда не возвращается правильно, когда вызовы выполняются последовательно.
Теперь мне действительно нужно сохранить объект в памяти.Как заставить этот класс загружаться только один раз?Или создать глобально доступную хеш-таблицу?
И последнее, я развертываю боевой файл с варпблом в jruby.Если нет никакого реального способа, которым это могло бы случиться, дайте мне знать, и я вместо этого рассмотрю это.