`
yuehan
  • 浏览: 8027 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

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

阅读更多

最近使用第三方开源库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  确实进程被操作系统干掉了

 




 

  • 大小: 17.8 KB
  • 大小: 15.7 KB
  • 大小: 11.8 KB
  • 大小: 14.5 KB
  • 大小: 6.2 KB
分享到:
评论

相关推荐

    用java.util.zip包现数据压缩与解压

    ### 使用 Java.util.zip 包实现数据压缩与解压 在计算机科学领域,数据压缩技术是一项重要的功能,它能够帮助减少存储空间的需求以及提高网络传输效率。本文将通过一系列的示例来详细介绍如何利用 Java 中的 `java....

    java.util.Date与java.sql.Date互转及字符串转换为日期时间格式.docx

    ### Java.util.Date与Java.sql.Date互转及字符串转换为日期时间格式 #### 一、Java.util.Date与Java.sql.Date的基本概念 在Java编程语言中,处理日期和时间时经常使用到`java.util.Date`和`java.sql.Date`这两个类...

    Exception in thread “main“ java.util.InputMismatchException.pdf

    在Java编程语言中,`java.util.InputMismatchException`是一个常见的运行时异常,它通常发生在尝试从数据源(如控制台、文件或数据库)读取数据时,遇到的数据类型与预期的不匹配。在这个特定的场景中,问题出在主线...

    java.util.zip 解压缩文件,ZIP格式压缩文件.rar

    在Java编程语言中,`java.util.zip` 是一个非常重要的包,它提供了处理各种压缩格式(如ZIP和GZ)的工具。在这个场景中,我们将深入探讨如何使用这个包来解压缩和压缩ZIP格式的文件。`java.util.zip` 包包含几个关键...

    java.util.Date与java.sql.Date相互转换

    ### Java.util.Date与Java.sql.Date相互转换 #### 知识点概述 在Java开发中,经常需要处理日期和时间相关的操作。Java标准库提供了两个重要的日期类:`java.util.Date` 和 `java.sql.Date`。虽然它们名字相似,但...

    Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException)

    "java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError" 是一个典型的错误提示,它表明在并发执行过程中遇到了内存不足的问题。下面我们将深入探讨这个问题的原因、影响以及如何解决。 内存溢出...

    java并发工具包 java.util.concurrent中文版用户指南pdf

    1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    根据java.util.zip源码修改zip支持中文

    标题"根据java.util.zip源码修改zip支持中文"指的是开发者可能遇到了Java标准库在处理包含中文字符的ZIP文件时的问题,并尝试通过修改`java.util.zip`的源代码来解决这个问题。这通常涉及到对ZIP文件结构的理解以及...

    java.util.logging.Logger使用详解

    ### Java.util.logging.Logger 使用详解 #### 一、创建Logger对象 在Java中,`java.util.logging.Logger` 是标准的日志框架之一,它提供了基础的日志记录功能。为了使用这一功能,首先需要获得 `java.util.logging...

    java.util包

    Java提供日期(Data)类、日历(Calendar)类,随机数(Random)类,堆栈(Stack)、向量(Vector) 、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构

    tomcat启动报错:java.util.zip.ZipException的解决方法

    在使用Apache Tomcat服务器时,有时会遇到启动异常的情况,其中一种常见的错误是`java.util.zip.ZipException`。这个异常通常表明在处理ZIP或JAR文件时遇到了问题,可能是因为文件损坏、格式不正确或者无法打开。在...

    java+apache完成zip压缩源码(包括修改后的java.util.zip下的源码)

    `java.util.zip`包提供了基础的压缩功能,但默认情况下,它可能无法正确处理包含中文文件名的情况。为了解决这个问题,开发者有时需要对原始源码进行修改,以确保中文文件名在压缩和解压缩过程中能被正确编码和解析...

    java.sql.与java.util

    创建`java.sql.Date`时,可以使用`java.util.Date`的时间戳来初始化,如`new java.sql.Date(new java.util.Date().getTime())`。 两者之间的转换是通过共享的时间戳实现的。要从`java.util.Date`转换为`java.sql....

    java.sql.date与java.util.date.pdf

    Java.sql.Date与Java.util.Date的区别和转换 Java.util.Date和Java.sql.Date是Java中两种不同的日期和时间表示方式,虽然它们都是表示日期和时间,但是它们之间存在着一些重要的区别。 首先,Java.util.Date是Java...

    zipper.zip_java zipper_java.util包_zip_遗传算法

    在Java编程语言中,`java.util.zip`包提供了一系列类和接口,用于处理ZIP文件格式。这个包的主要目的是为了方便地进行文件的压缩和解压缩操作。`Zipper`类是一个自定义的类,它利用了`java.util.zip`包中的功能来...

    java.util.Date与java.sql.Date互转及字符串转换为日期时间格式[文].pdf

    Java.util.Date与java.sql.Date的互转及字符串转换为日期时间格式 java.util.Date和java.sql.Date是Java中两个常用的日期时间类,分别属于不同的包。java.util.Date是Java标准库中的日期时间类,而java.sql.Date是...

    java.util.concurrent 学习ppt

    Java.util.concurrent的引入是为了解决传统并发原语如wait()、notify()、synchronized和volatile的使用难度大、容易出错以及性能问题。 在并发编程中,我们经常会遇到需要管理多个线程执行任务的情况。传统的做法是...

Global site tag (gtag.js) - Google Analytics