java.util.zip.Deflater使用不当引发jvm crash及问题排查

标签: java util zip | 发表时间:2014-07-28 15:56 | 作者:yuehan
出处:http://www.iteye.com

最近使用第三方开源库jflvlib录制flv格式视频,测试过程发现,视频录制进程经常挂掉;
java启动参数中已经配置内存溢出时导出日志文件-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Logs/xxx.dump和jvm crash的日志输出路径-XX:ErrorFile=/export/Logs/xxx.log,但是进程挂掉后没有找到任何日志输出;

1. 启动视频录制,使用top命令查看进程cpu、内存消耗情况,内存暂用:83.1%≈1.5G

 
2. 使用jvisualvm查看Heap、PermGen内存暂用正常,heap使用:≈50M

 
  由于两种方式看到的内存相差很大;只有一种可能代码中使用了直接内存(Direct Memory),
  下载直接内存查看工具google-perftools:http://code.google.com/p/google-perftools/downloads/list

3. 使用perftools查看java.util.zip.Deflater占用绝大多数,代码中有使用开源项目jflvlib来生成视频,其中有一段使用java.util.zip.Deflater的视频压缩代码

 
  参考网上ibm一篇文章:http://www-01.ibm.com/support/docview.wss?uid=swg21227106,deflater必须要调用end方法,不然可能导致oom或者jvm crash。
If a deflater object is not explicitly closed and ended, a native memory leak occurs. This leak can result in OutOfMemoryError's and/or Java™ Virtual Machine (JVM) crashes.
修改后代码如下:

4. 根据配置jvm崩溃会有错误日志,jvm内存溢出也有会有二进制日志文件;由于崩溃现场没任何日志,一种可能操作系统直接干掉了该进程。
linux oom_killer是一种自我保护机制,当系统分配不出内存时(触发条件)会触发这个机制
查询操作系统日志:egrep -i 'killed process' /var/log/messages  确实进程被操作系统干掉了

 




 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [java util zip] 推荐:

Hamster ZIP Archiver – 基于7-zip的华丽压缩软件 | 小众软件 > 实用工具

- 林彪 - 小众软件
我从没有想过要找另一款解压软件,因为我以为没有比 7z 更好用的免费解压软件了,只是我非常不满意 7z 的界面. 就在此时Hamster ZIP Archiver 打动了我, Hamster ZIP Archiver 基于 7z 开发,意味着不会差 7z 太多;界面比 7z 漂亮友好多了; Hamster ZIP Archiver 最大的特色就是很好的利用了多核 CPU 的性能,加快解压速度; @Appinn.

Google Docs 可以为你解开 ZIP 或 RAR 压缩包了

- llpazxj - 谷奥——探寻谷歌的奥秘
有时候由于文件太大或太碎太多,别人会打一个压缩包发到你的邮箱. 此时你不得不下载下来,解压缩,一个一个的观看,如果你的电脑不支持ZIP或RAR还得找个解压缩软件(这年头这样的电脑估计不多了). 如果你习惯于使用Google Docs协作编辑,那你也必须下载下来解压缩再一个一个传到Google Docs里.

[旧文更新] 善用7-Zip,代替收费的Winrar和Winzip

- 任意 - 善用佳软
更新(2010-11-30): 7-Zip 9.20 (2010-11-18) 发布. 这是 7-Zip 版本号由 v4.x 改为 v9 [1] 以来,历经近20个beta版,而推出的第一个正式版本. 尽管我主用 Total Commander 处理压缩文件,但 7-Zip 也是必备软件. 中文官网 http://sparanoid.com/lab/7z/.

[来自异次元] Archive Searcher – 无需解压快速搜索ZIP、RAR等压缩包里的文件与文件夹的小工具

- 完全自由风格 - 异次元软件世界
        我们在异次元上多次推荐过一款文件搜索神器 Everything,它能瞬间搜索你硬盘上的所有文件,速度快到让你震惊. 然而,它并不能搜索压缩包里面的内容,依然略显坑爹. 因此我多次收到读者的求助邮件,因为某些工作需求,他们希望能快速地在一堆压缩包里寻找指定的文件.         一般来说,用户需要把一个个压缩包打开人工需找,费时且容易让人烦躁.

Java中的锁(Locks in Java)

- - 并发编程网 - ifeve.com
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一. 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂. 因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 译者注:这说的是Java 5之前的情况).

Java PaaS 对决

- 呆瓜 - IBM developerWorks 中国 : 文档库
本文为 Java 开发人员比较了三种主要的 Platform as a Service (PaaS) 产品:Google App Engine for Java、Amazon Elastic Beanstalk 和 CloudBees RUN@Cloud. 它分析了每种服务独特的技术方法、优点以及缺点,而且还讨论了常见的解决方法.

Java浮点数

- d0ngd0ng - 译言-电脑/网络/数码科技
Thomas Wang, 2000年3月. Java浮点数的定义大体上遵守了二进制浮点运算标准(即IEEE 754标准). IEEE 754标准提供了浮点数无穷,负无穷,负零和非数字(Not a number,简称NaN)的定义. 在Java开发方面,这些东西经常被多数程序员混淆. 在本文中,我们将讨论计算这些特殊的浮点数相关的结果.

Qt——转战Java?

- - 博客 - 伯乐在线
编者按:事实上,在跨平台开发方面,Qt仍是最好的工具之一,无可厚非,但Qt目前没有得到任何主流移动操作系统的正式支持. 诺基亚的未来计划,定位非常模糊,这也是令很多第三方开发者感到失望,因此将导致诺基亚屡遭失败的原因. Qt的主要开发者之一Mirko Boehm在博客上强烈讽刺Nokia裁了Qt部门的决定,称其为“绝望之举”,而非“策略变更”.

java 验证码

- - ITeye博客
// 创建字体,字体的大小应该根据图片的高度来定. // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到. // randomCode用于保存随机产生的验证码,以便用户登录后进行验证. // 随机产生codeCount数字的验证码. // 得到随机产生的验证码数字. // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同.