java - 内存不足:元空间
问题描述
我在元空间中出现内存不足。正如我在谷歌搜索后理解的那样,元空间中的内存不足错误可能是由于 Classloader 中的泄漏。因此,为此我开始分析 Eclipse MAT 中的堆转储并打开“类加载器资源管理器”,它给出以下内容:
正如我从上述数据中了解到的那样,com.newrelic.bootstrap.BootstrapAgent$JVMAgentClassLoader 占用了 396,707 个未进行垃圾回收的实例。我的理解正确吗?
在我选择了这一行并打开“GC Roots 的路径 -> 排除所有幻象/弱/软 Ref”后,我观察到 Shallow Heap 和 Retained Heap 分别为 96 和 231,040。
在我为类 org.apache.felix.framework.BundleWiringImpl$BundleClassLoader 在“类加载器资源管理器”中选择另一行并再次打开“GC 根路径-> 排除所有幻象/弱/软引用”之后,现在我看到了这些数据:
从这些数据中,是否可以安全地得出结论,在此类中存在泄漏: com.newrelic.agent.util.DefaultThreadFactory$AgentThreadImpl 不是垃圾收集的?
如果没有,请建议我还应该检查什么?
解决方案
com.newrelic.bootstrap.BootstrapAgent$JVMAgentClassLoader 占用了 396,707 个没有被垃圾回收的实例。我的理解正确吗?这意味着
com.newrelic.bootstrap.BootstrapAgent$JVMAgentClassLoader
已经加载了 2627 个类,并且这些类有 396,707 个实例。就其本身而言,这看起来不是问题。
Duplicate Classes 可能是一个很好的查询,可以运行以查看一个类是否已加载到一个类加载器中,然后再次加载(可能是因为它已更新),但旧的类加载器没有被释放。
线程com.newrelic.agent.util.DefaultThreadFactory$AgentThreadImpl
应该是活的。检查线程概述查询以了解它在做什么?
推荐阅读
- coq - 归纳命题在 Coq 中是如何工作的?
- rxjs6 - 在 RxJS 版本 6 中可观察到与管道运算符的合并
- excel - Excel堆叠折线图显示空单元格时过渡到0但我不希望它
- angular - 连接为 Meteor 客户端的 Ionic UI 的简单示例?
- reactjs - 使用 Redux 在 componentDidMount 中生成不重复项
- python - Google Tasks API 在 Python 中清除任务列表
- python - 使用 Paraview 的可编程过滤器
- django - Wagtail Form Builder:使自定义表单提交成为另一个模型中的外键并在提交时自动更新
- swift - 为不同的对象实现相同的功能
- android - apksigner 一无所有返回