我的系统遭受OOM(可能是由于DOS攻击)。 我正在使用Tomcat 7,NIO。 我正在寻找让我的系统对这些攻击更加强大的方法(尽管我不希望Tomcat完全免疫 - 我想尽可能提高鲁棒性)。Tomcat oomParachute:如何正确配置
我的日志显示:
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,这部分数据将被释放并报告错误。这将给虚拟机足够的空间来清理。 oomParachute表示降落伞(字节数组)的大小(以字节为单位)。默认值是1024 * 1024(1MB)。请注意,这仅适用于与Java堆空间有关的OOM错误,并且绝对不能保证您将能够恢复。如果你在Java堆外部有一个OOM,那么这个降落伞技巧将无济于事。
所以我想弄清楚: 是否真的有默认的文档说的?如果是这样,为什么我会得到“降落伞不存在”?
我应该定义一个降落伞吗?我应该放哪些价值?什么参数在确定这个参数的值时起作用? (并发连接的数量?预期的请求大小?总堆?)
这个降落伞真的有什么用?
谢谢!