2 回答
TA贡献1805条经验 获得超9个赞
Tomcat 缓存了许多对象以使其运行速度更快。通过设置,server.max-http-header-size=2097152
您使这些缓存对象之一声明 2 MB 内存并保留它。
该文档有以下内容processorCache
:
协议处理程序缓存处理器对象以提高性能。此设置指示缓存这些对象的数量。-1表示无限制,默认为200。如果不使用Servlet 3.0异步处理,一个好的默认值是使用与maxThreads设置相同的值。如果使用 Servlet 3.0 异步处理,一个好的默认值是使用 maxThreads 和最大预期并发请求数(同步和异步)中的较大者。
所以我的建议是将设置server.max-http-header-size
为更合理的值,例如8KB(默认值),并在测试表明您确实需要它时慢慢加倍(相关:当总标头大小大于时,Tomcat 抛出“400 Bad request” server.max-http-header-size
)。
TA贡献1836条经验 获得超5个赞
在运行压力测试之前获取转储,并在运行压力测试之后获取转储。Eclipse MAT 允许您比较两个转储之间的直方图,以便您知道发生了内存泄漏。
我建议使用 Java Mission Control (JMC) 来监视 JVM,您可以在其中仔细查看内存消耗(堆和非堆)。请注意正在使用的内存和已提交的内存之间的区别。
较新版本的 Java 具有更复杂的算法,其中 JVM 将内存返回给操作系统。对于 Java 8,一种选择是使用 Eclipse Open J9 JVM。
添加回答
举报