jvm优化

前言:此处描述的两个问题是在一年前发现并修复的。 本文仅作为历史证明,也是有关解决Java中文件描述符泄漏的初学者指南。

在Ultra ESB中,我们使用内存RAM磁盘文件缓存来进行快速且无垃圾的有效负载处理。 一段时间以前,我们在共享的SaaS AS2网关上遇到了一个问题,该缓存随着时间的推移泄漏了文件描述符。 最终,在击中系统ulimit时,导致too many open files错误too many open files

有弹性的城堡军团:流支持的MIME部分的剩余部分?

我们发现其中一个罪魁祸首是Bouncy Castle ,这是著名的安全服务提供商,自Ultra ESB Legacy以来,就一直是我们的深爱。

通过一些 简单的工具,我们发现BC习惯了对MIME部分调用getContent()以确定它们的类型(例如, instanceof检查)。 没错,这本身并不是犯罪。 但是我们的大多数MIME部分都是文件支持的,另一端带有文件缓存文件-这意味着每个getContent()都会为该文件打开一个新流。 因此,现在有指向我们的文件缓存的杂散流(以及文件描述符)。

这些已经足够了,我们将用尽分配给Ultra ESB(Java)进程的文件描述符配额。

让他们变得懒惰!

我们不想弄乱BC代码库。 因此,我们找到了一个简单的解决方案:使用“惰性”流创建所有文件支持的MIME部分。 我们(以前)同事Rajind写了LazyFileInputStream -灵感LazyInputStreamjboss-vfs -打开只有当实际文件read尝试。

BC很高兴,文件缓存也很高兴。 但是我们是最快乐的

Hibernate JPA:晚饭后清理,也就是关闭消耗的流

我们发现的另一个错误是某些数据库操作留下了未关闭的文件句柄。 显然,只有当我们将流支持的Blob馈送到Hibernate时,流才通常来自文件缓存项。

经过一番挖掘之后,我们提出了一个理论,即Hibernate不会关闭这些Blob条目的基础流。 (这是有道理的,因为java.sql.Blob接口没有公开Hibernate可以用来操作基础数据源的任何方法。)但是,这是一个问题,因为丢弃的流(以及关联的文件句柄)不会得到发布直到下一个GC。

对于一个短期应用程序来说,这本来可以,但是像我们这样长期运行的应用程序很容易用完文件描述符。 例如突然而持续的峰值。

让他们自动关闭!

我们不想失去流媒体的好处,但是我们也无法控制流媒体。 您可能会说我们应该将流放在可自动关闭的结构中(例如try-with-resources )。 不错的尝试; 但是可悲的是,Hibernate在我们的执行范围之外(特别是在@Transactional流中)读取它们。 一旦我们开始关闭代码范围内的流,我们的数据库操作就会开始惨败-尖叫“流已关闭!”。

他们说,在罗马时,就像罗马人一样

因此,我们决定不打扰Hibernate,而是决定自己处理流。

Rajind(是的,还是他)再次入侵了SelfClosingInputStream包装器。 这将跟踪从底层流读取的数据量,并在读取最后一个字节后立即将其关闭。

(我们确实考虑过使用现有选项,例如Apache commons-io AutoCloseInputStream ;但是发生了,我们到处都需要一些自定义设置,例如详细的跟踪日志记录。)

底线

当谈到Java中的资源管理时,很容易过度关注内存和CPU(处理),而忽略其余部分。 但是虚拟资源(例如 临时端口和每个进程的文件描述符)可能同样重要,甚至更多。

尤其是在长时间运行的流程(例如我们的AS2 Gateway SaaS应用程序)上,它们实际上可以成为沉默的杀手。

您可以通过两种主要方式检测这种“泄漏”:

  • “单周期”资源分析:运行一个完整的处理周期,比较前后的资源使用情况
  • 长期监控:持续记录和分析资源指标以识别趋势和异常

在任何情况下,修复泄漏都不是一件容易的事。 一旦您清楚地了解要处理的内容。

祝您好运,寻找您的资源消耗d(a)守护程序!

翻译自: https://www.javacodegeeks.com/2019/10/is-your-jvm-leaking-file-descriptors-like-mine.html

jvm优化

jvm优化_您的JVM是否泄漏了文件描述符-像我的一样?相关推荐

  1. jvm 助记符_您的JVM是否泄漏文件描述符-像我的一样?

    jvm 助记符 前言:此处描述的两个问题是在一年前发现并修复的. 本文仅用作历史证明,也是有关解决Java中文件描述符泄漏的初学者指南. 在Ultra ESB中,我们使用内存RAM磁盘文件缓存来进行快 ...

  2. 您的JVM是否泄漏文件描述符-像我的一样?

    前言:此处描述的两个问题是在一年前发现并修复的. 本文仅用作历史证明,也是有关解决Java中文件描述符泄漏的初学者指南. 在Ultra ESB中,我们使用内存RAM磁盘文件缓存来进行快速且无垃圾的有效 ...

  3. iofd:文件描述符_文字很重要:谈论设计时18个有意义的描述符

    iofd:文件描述符 As designers, many of us think we're just visual creatures. But creating visuals is only ...

  4. AHC(AsyncHttpClient)文件描述符泄漏

    使用AsyncHttpClient的时候如果每次使用完不调用close方法,会导致文件描述符泄漏. 但是如果每次都关闭,似乎达不到connection pooling已经thread pool的复用的 ...

  5. linux文件描述符泄漏,文件描述符(fd)泄漏排查一篇就够了

    生产多次遇到文件描述符(fd)泄露相关的问题, 文件描述符泄漏一般引起 的现象是文件句柄数(封面图)/tcp alloc(上图)增长.文章分为两部分介绍文件描述符相关内容,第一部分介绍文件描述基础知识 ...

  6. jvm优化_使用Java流和In-JVM-Memory的超低延迟查询

    jvm优化 自然界的基本规则(例如光速和通用信息论)对我们可以从传统系统体系结构中获得的最大性能设置了明显的限制. 了解您作为Java开发人员如何使用JVM技术和Java流将性能提高几个数量级. 例如 ...

  7. jvm优化_镜像镜像–使用反射在运行时查看JVM内部

    jvm优化 开发人员:Takipi会告诉您何时新代码在生产中中断–了解更多 我们都习惯于在我们的日常工作中直接或通过利用反射的框架来运用反射. 它是Java和Scala编程的主要方面,它使我们使用的库 ...

  8. jvm优化_在JVM中记录世界停顿

    jvm优化 不同的事件可能导致JVM暂停所有应用程序线程. 这种暂停称为世界停止(STW)暂停. 触发STW暂停的最常见原因是垃圾回收( 例如github中的示例),但是不同的JIT操作( 示例),偏 ...

  9. java8的jvm优化_基于JDK8 版本的SpringBoot 启动参数优化(建议收藏)

    Linux端运行项目命令 java -jar -XX:MetaspaceSize=128m-XX:MaxMetaspaceSize=128m-Xms1024m -Xmx1024m-Xmn256m-Xs ...

最新文章

  1. MySQL基础篇:用户和权限管理
  2. ASM3.0学习(二)
  3. 安卓mysql导出excel_Android开发实现的导出数据库到Excel表格功能【附源码下载】...
  4. R语言:常用函数总结
  5. c语言题目及答案1037,PAT Basic 1037. 在霍格沃茨找零钱(20)(C语言实现)
  6. libsvm 训练后,模型参数详解
  7. 脚本安装mysql数据库_Linux使用脚本安装MySQL数据库
  8. 【移植驱动到Linux3.4.2内核之二】LCD,触摸屏,按键,USB等驱动程序的移植心得总结
  9. python如何把一张图像的所有像素点的值都显示出来_情人节,教你用 Python 向女神表白...
  10. 【每日算法Day 65】你能顺利救出地下城里的公主吗?
  11. Bellman-Ford算法 - 有向图单源最短路径
  12. 【BZOJ】3576: [Hnoi2014]江南乐
  13. [Asp.Net web api]基于自定义Filter的安全认证
  14. 精灵五笔 优化指南【原】
  15. Mac和Windows中常见中文字体的英文名称
  16. automake manul
  17. 利用html编辑信息轰炸机,scratch模拟轰炸机投弹【参考答案】
  18. double函数和int函数
  19. 智力题、推理判断题、数量关系题(三)
  20. 微信公众平台开发教程第20篇-新手解惑40则

热门文章

  1. 无感FOC电机参数测量方法
  2. 服务器网络机柜的保养维护,保养维护|服务器机柜保养维护有哪些注意细节?...
  3. 片内Flash的认识
  4. 那些警示良言——鲁迅
  5. mq4气体传感器流程图_气体传感器Word版
  6. SpringMVC项目添加日志
  7. muduo多线程异步日志分析
  8. MFC菜单各功能设置
  9. NOJ 1111 保险箱的密码 【大红】 [区间dp]
  10. 200个年轻人的薪资观:真讨厌赚钱,耽误我开心