java - 为 Spring Boot 应用程序捕获堆转储
问题描述
我是堆分析的新手。我们一直在我们的 Web 应用程序中使用 Spring Boot。最近堆使用率变得太高了。为了使用 Mat 和 JProfiler 等工具分析堆转储,我使用执行器下载它,如下所示:
http://localhost:8080/actuator/heapdump
但是每次,我都在进行堆转储,堆使用率变得很低。我怀疑可能是 GC 一直在踢。如果我错了,请纠正。所以我无法捕捉到实际情况。有没有办法在不触发 GC 的情况下进行堆转储?或者无论如何,只要堆使用量增加超过 500 MB,就会生成堆转储。
解决方案
您可以有一项@Scheduled
任务来定期获取堆使用情况并生成 500 MB 堆转储。您可以使用ManagementFactory.getMemoryPoolMXBeans();
,它显示不同的堆区域及其使用情况。
要在外部做到这一点:
您可以使用 jstat 对堆使用情况进行外部监控。将其包装在一个脚本中,该脚本将分析jstat -gc
然后用于jmap
获取堆转储。
推荐阅读
- apache - 如何配置 Apache 代理以正确返回 JAX-WS WSDL XSD 位置
- python - 带有 dtype 字符串的 MXNet NDArray?
- mysql - MySQL/MariaDB InnoDB 同步事务和锁定行为
- node.js - 将 Sonarqube 的覆盖范围与 istabuljs/nyc 合并
- spring-boot - Primefaces fileUpload with uploader apache-commons 获得 413 Request Entity Too Large Response
- amazon-web-services - AWS cognito 用户列表:lambda
- asp.net-core - 如何从 /signin-oidc 重定向回我的控制器/动作?
- apache-spark - py4j.protocol.Py4JError:调用 None.None 时出错。跟踪:身份验证错误:意外命令
- tfs - 如何设置不同的默认 TFS 代理池
- python - 如何从 Rasa 中的按钮获取值?