我们的微服务应用程序使用 Java 8 Spring Boot 2。在本地运行负载测试注意到堆消耗内存但从未释放回来。我正在使用 G1 垃圾收集器运行应用程序,并且还从 JVisualVM 执行了手动 GC,但分配的内存仍然永远不会被释放。
我获取了堆转储并对其进行了分析,我可以清楚地看到系统类加载器创建的大字节数组被列为泄漏嫌疑对象。我看到字节数组实例保存了对端点“/test”的 HTTP 请求。但负载测试已经完成,线程回到运行负载测试之前的位置。
不知道为什么系统类加载器加载的字节数组包含所有这些元素并无缘无故地占用所有这些堆。
/test 端点是 @RestController 类中的唯一方法
@RequestMapping(value = "/test", method = RequestMethod.GET)
@CrossOrigin(origins = "*")
public void test() {
logger.info("Testing1...");
}
以下是与服务器相关的Spring Boot application.properties:
server.port=8090
server.tomcat.max-threads=200
server.tomcat.accept-count=100
server.tomcat.min-spare-threads=20
server.error.whitelabel.enabled=false
server.max-http-header-size=2097152
Cats萌萌
一只甜甜圈
相关分类