Якщо у вашому додатку падає OutOfMemoryError (OOM), то воно вже не може функціонувати нормально, і все що вам залишається - це перезапустити його. Даний процес відмінно автоматизується за допомогою Tanuki Java Service Wrapper. Так само даний сервіс дозволяє робити ще багато різних штук, щоб підвищити відмовостійкість (falt tolerance) вашої системи.
За допомогою java wrapper ви можете запускати ваше java додаток в якості сервісу, який буде стартувати при завантаженні машини, а так само при будь-якому падінні вашого застосування. Таким чином він буде стежити за тим, щоб ваше додаток було постійно запущено.
Так само java wrapper вміє перезапускати вашу програму, якщо виявить у балках спеціальне повідомлення. Наприклад, за допомогою наступної конфігурації можна змусити його перезапускати JVM при виникненні OutOfMemoryError.
Таким же способом ви можете скофігуріровать перезавантаження вашого застосування при будь-якій проблемі. Наприклад, якщо ваш додаток не може відновитися, коли трапляється якась критична проблема, і допоможе тільки перезапуск всієї системи, то унаследуйтесть від jva.lang.Error, скажімо, визначте клас InfrustructureError і кидайте його в усіх таких випадках, попередньо додавши відповідний запис в конфігураційний файл. Тільки як і в разі OOM зробіть пошук по всій codebase, на відсутність наступної конструкції:
якої часто грішать ледачі розробники. Зрозуміло, що при такому коді, вас ніякої java wrapper не врятує.
До речі в разі нестачі пaмять JVM може і не кидати OOM (див. Опцію -XX: -UseGCOverheadLimit), а починати проводити весь час в збирача сміття. У той разі java wrapper теж може допомогти. За замовчуванням він постійно шле пінг додатком, і якщо протягом півхвилини не отримує відповіді, то перезапускає JVM.
Ще java wrapper вміє друкувати thread dump, якщо не може застопать JVM, але його треба попросити про це:
І взагалі він вміє ще багато багато чого.
А хіба java wrapper не платні.
У висновку хочу сказати, що не закликаю вас писати кривої код і сподіватися, що вас врятує jawa wrapper. Якщо у вас є витоки пам'яті, то зніміть heap dump, знайдіть причину і полагодите вашу програму. Однак, це займе якийсь час, і користувачі вашого додатка не завжди чекатимуть, поки ви там розберетеся в чому проблема і вирішите її. Так що підстелити соломку у вигляді java wrapper ніколи не зашкодить.