Unsafe.defineClass 挂起 - 缓慢的反射调用

2024-01-18

我在 Java 8 / Spring 5 / Tomcat 8.5 Web 应用程序中观察到极长的运行请求(> 30 秒)。大多数请求都会正常响应。 值得注意的是,经过几天的正常运行后,长跑者的频率有所增加。

Threaddumps 显示 Unsafe.defineClass 挂起:

at sun.misc.Unsafe.defineClass(Native Method) 
at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:63) 
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:399) 
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:394) 
at java.security.AccessController.doPrivileged(Native Method)  
at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:393) 
at sun.reflect.MethodAccessorGenerator.generateMethod(MethodAccessorGenerator.java:75) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:53) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.springframework.core.annotation.AnnotationUtils.getValue(AnnotationUtils.java:1328)  
at org.springframework.core.annotation.AnnotatedElementUtils$MergedAnnotationAttributesProcessor.getAdaptedValue(AnnotatedElementUtils.java:1627) 
at org.springframework.core.annotation.AnnotatedElementUtils$MergedAnnotationAttributesProcessor.overrideAttributes(AnnotatedElementUtils.java:1610) 
at org.springframework.core.annotation.AnnotatedElementUtils$MergedAnnotationAttributesProcessor.postProcess(AnnotatedElementUtils.java:1598) 
at org.springframework.core.annotation.AnnotatedElementUtils$MergedAnnotationAttributesProcessor.postProcess(AnnotatedElementUtils.java:1515) 
at org.springframework.core.annotation.AnnotatedElementUtils.searchWithFindSemantics(AnnotatedElementUtils.java:1145) 
at org.springframework.core.annotation.AnnotatedElementUtils.searchWithFindSemantics(AnnotatedElementUtils.java:1066) 
at org.springframework.core.annotation.AnnotatedElementUtils.searchWithFindSemantics(AnnotatedElementUtils.java:1038) 
at org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotationAttributes(AnnotatedElementUtils.java:650) 
at org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotation(AnnotatedElementUtils.java:726)
....

有人见过这个问题吗?


是否您使用保守的方法耗尽了元空间-XX:MaxMetaspaceSize或者服务器上没有足够的 RAM?由于 GC 在元空间上运行,您的缓慢可能是由于它难以清理它而导致的。默认情况下,如果元空间内存达到MaxMetaspaceSize所以这 30 秒的暂停可能是 GC。

然而还有一个更大的问题。您的代码中的内容是分配这些类,以及为什么它经常发生以填充元空间。通常,类是在启动期间创建的,之后创建的频率要低得多。也许您正在进行热部署并且ClassLoader正在泄漏?

在 Java 8 之前的版本中,这可能是由于 GC 和 PermGen 耗尽而导致的,例如正如这个问题中所问的,它在哪里导致了 OutOfMemoryError https://stackoverflow.com/questions/16478894/tomcat-permgen-space-out-of-memory-exception-tomcat-hangs-and-stops-responding.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unsafe.defineClass 挂起 - 缓慢的反射调用 的相关文章

随机推荐

  • 如果Python中的单元格包含特定字符,如何为其着色?

    我正在处理一个数据框 来自 Excel 文件 我想格式化单元格 DF具有以下内容 作为示例 a b c 234 gt 500 200 gt 500 0 234 gt 500 400 6 66 34 1 我想将包含 gt 的单元格着色为红色
  • Python 3 - pickle 可以处理大于 4GB 的字节对象吗?

    基于此comment https stackoverflow com a 29704623 1202808以及参考文档 来自 Python 3 4 的 Pickle 4 0 应该能够 pickle 大于 4 GB 的字节对象 但是 在 Ma
  • 如何在 Django REST 框架 ViewSet 子类中使用分页?

    我有一个简单的子类viewsets ViewSet看起来像 from rest framework import viewsets from rest framework response import Response from mode
  • Angular2目标特定路由器出口

    我有一个应用程序 它有一个基本路由器插座 用作整个应用程序的基础 然后是一个子路由器出口 用户登录后使用该子路由器出口来显示由于单击基于基本路由器出口的导航链接而加载的任何组件 我希望在基本模板中单击导航链接时能够定位子路由器出口 当我单击
  • 如何在核心数据中存储 swift 枚举?

    Swift 允许您定义枚举 但核心数据不支持 开箱即用 如何保存它们 我在互联网上看到的推荐解决方案 迄今为止使用过 是使用私有变量 class ManagedObjectSubClass NSManagedObject enum Card
  • 查询数据库中的元组列表

    由于我是Python编程新手 所以我不太了解如何从数据库查询数据 首先 我在 SQL Server 中创建了数据库 其中包含 2 列 String列和Numeric column String Numeric One 1 Five 5 Th
  • 如何创建持久性 cookie 和非持久性 cookie?

    我似乎不知道如何创建持久性 cookie 和非持久性 cookie 例如 它们在发送回的 HTTP 标头方面有何不同 Cookie 有一个隐式或显式设置的到期日期 该日期控制它们的持续时间 取决于用户代理实际执行的情况 cookie 可能仅
  • C# 中的用户定义公式

    我有一个应用程序 用户可以为每个对象指定他自己的测量点 然后 这些测量值将用于将对象分类为 A 需要服务 B 服务应在 X 天内安排 C 不需要 ATM 服务 然而 这些对象几乎可以是任何东西 我们无法硬编码如何将测量值聚合到分类 我们需要
  • 编译器错误:“错误 CS0307:变量 'int' 不能与类型参数一起使用”

    如果我有以下代码 private void Check bool a bool b private void Check int a int b int c bool flag Check a lt b a gt flag c b 10 我
  • 如何使用H2数据库创建存储过程?

    有人尝试过使用 H2 数据库创建存储过程吗 要在 Java 函数中访问数据库 您确实需要连接 对于H2 有两种方式获得这样的连接 解决方案1 如果Java函数的第一个参数是ajava sql Connection 然后数据库提供连接 对于
  • 我们如何重命名 rpm 版本?

    我想将 rpm 文件的名称从 oldname 7 x86 64 rpm 更改为 newname 8 x86 64 rpm 我使用新名称创建了新的 rpm 但是当我尝试执行时 rpm Uvh newname 8 x86 64 rpm 它抛出以
  • 将 MS Word 2002 模板从 PC 转换为 Mac

    我必须转换数百个 MS Word 2002 模板 在 PC 上 才能在 Macintosh 上使用 我必须评估Word 模板是否可以在iWork Pages 和Mac 版Microsoft Word 中运行 我无法转换以下内容 Word V
  • Python PIL 检测图像是全黑还是全白

    使用 Python 成像库 PIL 如何检测图像的所有像素是黑色还是白色 Update 健康 状况 Not迭代每个像素 if not img getbbox 将测试图像是否是全黑的 Image getbbox 返回假值None如果图像中没有
  • C#——从 MySQL 检索数据并在不使用 DataGridView 的“页面”中对它们进行排序

    我是 C 编程新手 我正在开始创建一个应用程序 该应用程序通过 ProgressBars 显示 现实生活中 事件 何时到期 所有信息 有关这些事件的信息存储在数据库中 因此 打开与 my sql 数据库的连接我可以检索所有事件 问题是我不知
  • IsEnabled 时更改按钮图像

    我想在按钮时更改按钮图像IsEnabled False 下面是我的示例 当我将它们更改为时 绑定很好False True它仍然不起作用
  • 使用 LinearNDInterpolator (Python) 绘制插值

    我使用以下脚本对某些 x y z 数据使用 LinearNDInterpolator 但是 我不知道如何从插值数据到以热图形式绘制 显示插值 我是否遗漏了一些东西 比如根据 x 和 y 的最小值和最大值设置网格网格 任何帮助或例子都会很棒
  • 在 Codeigniter 中使用带有 .php 扩展名的外部 js [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • 如何导出正确的TSV?

    简短而有趣 如何从 R 导出 TSV CSV write table write csv almost works test lt data frame a 2 4 b 3 5 write table test file test tsv
  • 如何在AWS上定义spring配置文件

    我已将 war 文件作为 java 应用程序部署在 AWS 的 Elastic Beanstalk 上 我想在 AWS 上指定 spring profiles active 就像我执行时所做的那样 java jar Dspring prof
  • Unsafe.defineClass 挂起 - 缓慢的反射调用

    我在 Java 8 Spring 5 Tomcat 8 5 Web 应用程序中观察到极长的运行请求 gt 30 秒 大多数请求都会正常响应 值得注意的是 经过几天的正常运行后 长跑者的频率有所增加 Threaddumps 显示 Unsafe