Моя система страдает от OOM (предположительно из-за атаки DOS). Я использую Tomcat 7, NIO. Я ищу способы сделать мою систему более надежной для этих атак (хотя я не ожидаю, что Tomcat полностью невосприимчив - я хочу как можно больше повысить надежность).
Мои журналы показывают:
Exception in thread "http-nio-8080-exec-285" Exception in thread "http-nio-8080-exec-82" SEVERE:Memory usage is low, parachute is non existent, your system may start failing.
Exception in thread "PoolCleaner[216942577:1400676008859]" SEVERE:Memory usage is low, parachute is non existent, your system may start failing.
Итак, я начал исследовать oomParachute.
Документация (http://tomcat.apache.org/tomcat-7.0-doc/config/http.html) говорит очень мало:
(int) Разъем NIO реализует стратегию OutOfMemoryError, называемую парашютом. Он содержит кусок данных в виде байтового массива. В случае OOM этот фрагмент данных освобождается и сообщается об ошибке. Это даст VM достаточно места для очистки. OomParachute представляет размер в байтах парашюта (массив байтов). Значение по умолчанию - 1024 * 1024 (1 МБ). Обратите внимание, что это работает только для ошибок OOM в отношении пространства Java Heap, и нет абсолютно никакой гарантии, что вы сможете вообще восстановиться. Если у вас есть OOM вне Java-кучи, то этот парашютный трюк не поможет.
Итак, я пытаюсь понять:
Действительно ли дефолт, как говорит док? Если да, то почему я получаю "парашют не существует"?
Должен ли я определить парашют? Какую ценность мне стоит положить? Какие параметры играют роль в определении значения этого параметра? (количество параллельных соединений? ожидаемый размер запроса? общая куча?)
Что делает этот парашют действительно?
Спасибо!