В процессе эксплуатации Jabber-сервера Openfire неприятным сюрпризом стал факт постепенного «съедания» всей памяти, доступной Java-машине. Перезапуск службы не давал результатов, лишь увеличение лимита памяти ненадолго решало проблему. Когда я увидел, как при минимальной загрузке служба «съедает» все выделенные ей 256Мб ОЗУ – я понял, что с этим нужно решать кардинально.
Детальное изучение программы показало, что все дело в базе, в которой сервер хранит служебную информацию. Я использую опцию «embedded database» и похоже на то, что при работе она пытается полностью загрузиться в память. Учитывая её немалый объём (за несколько лет набралось около 200Мб), стало очевидно, в чём корень зла.
Некоторое время пришлось потратить на поиск инструментов для работы с HSQLDB, толковых бесплатных не нашёл и остановился на платной RazorSQL (у неё есть полнофункциональная триал-версия на 30 дней). Подключился к базе (пользователь 'SA', пароль пустой) и удалил старые логи плагина 'monitoring', сохранив структуру, но удалив все записи из таблиц 'ENTCONPARTICIPANT', 'ENTCONVERSATION', 'ENTMESSAGEARCHIVE', 'OFCONPARTICIPANT', 'OFCONVERSATION', 'OFMESSAGEARCHIVE' схемы 'public'.
После этой операции, база «похудела» до нескольких мегабайт и теперь Openfire использует всего 30-40Мб ОЗУ при полной нагрузке.