Il mio sistema soffre di OOM (presumibilmente a causa di un attacco DOS). Sto usando Tomcat 7, NIO. Sto cercando modi per rendere il mio sistema più robusto a questi attacchi (anche se non mi aspetto di rendere Tomcat completamente immune - voglio migliorare la robustezza il più possibile).Tomcat oomParachute: come configurare correttamente
miei log mostrano:
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.
così ho iniziato a indagare l'oomParachute.
La documentazione (http://tomcat.apache.org/tomcat-7.0-doc/config/http.html) dice molto poco:
(int) Il connettore NIO implementa una strategia OutOfMemoryError chiamato paracadute. Tiene un blocco di dati come una matrice di byte. In caso di una OOM, questa porzione di dati viene rilasciata e viene segnalato l'errore. Questo darà alla VM spazio sufficiente per ripulire. OomParachute rappresenta la dimensione in byte del paracadute (l'array di byte). Il valore predefinito è 1024 * 1024 (1 MB). Si noti che questo funziona solo per gli errori OOM relativi allo spazio Java Heap e non è assolutamente possibile garantire che sarà possibile eseguire il ripristino. Se hai una OOM al di fuori del Java Heap, allora questo trucco con il paracadute non ti aiuterà.
Quindi sto cercando di capire: C'è davvero un valore predefinito come dice il documento? In tal caso, perché ricevo "il paracadute non esiste"?
Devo definire un paracadute? Che valore dovrei mettere lì? Quali parametri svolgono un ruolo nel determinare il valore di questo parametro? (numero di connessioni simultanee? dimensione prevista della richiesta? heap totale?)
Cosa fa veramente questo paracadute?
Grazie!