当前位置: 首页 > jvm
  • Java OOM的种类有:java.lang.OutOfMemoryError: unable to create new native thread;java.lang.OutOfMemoryError: request bytes for . Out of swap space?;java.lang.OutOfMemoryError: Java heap space;java.lang.OutOfMemoryError: GC overhead limit execeeded;java.lang.OutOfMemoryError: PermGen space。

    阅读全文
    Java 1,187 人阅读 抢沙发 , , ,
  • 采用Parallel GC的情况下,当YGC触发时,会有两个检查:1、在YGC执行前,min(目前新生代已使用的大小,之前平均晋升到old的大小中的较小值) > 旧生代剩余空间大小 ? 不执行YGC,直接执行Full GC : 执行YGC;2、在YGC执行后,平均晋升到old的大小 > 旧生代剩余空间大小 ? 触发Full GC : 什么都不做。

    阅读全文
    Java 562 人阅读 抢沙发 , , , , ,
  • 《Oracle JRockit: The Definitive Guide》一书是由Oracle JRockit的两位资深开发人员写的,其中的Marcus Hirt更是JRockit Mission Control的leader,这本书详细的对Oracle JRockit进行了介绍,最突出的特点非常系统化的介绍了一个JVM通常是如何实现的,而JRockit这样一个极为优秀的JVM又是做了哪些优化,为什么做这些 ...

    阅读全文
    Java 473 人阅读 抢沙发 , , ,
  • 根据多次排查Java Heap外内存泄露的问题,目前的经验为:先查查看有没有错误使用Inflater和Deflater,如有则基本就搞定了;多执行几次jmap -histo:live,看看内存会不会下降,如果会的话,多数和GC的bug有关;perftools,对调用次数的那列进行排序(pprof –text … | sort -n -r -k4),如果看到是Unsafe_Allocate比较多,且为server端应用,则通常说明是哪个地方分配了Direct ByteBuffer,但来不及释放引用,然后嘛,就是用btrace跟踪下看看谁干的,分析原因。

    阅读全文
    Java 558 人阅读 抢沙发 , , , ,
  • 某java应用一直没响应原因:代码只处理了输出流,但没处理错误流,并且在处理输出流时只处理了10000行,超过10000的时候就没再去读了,对于这种未将console重定向到外部文件的场景,linux会将其写到一个缓冲区,缓冲区写满后就会导致应用程序阻塞住。在Java中启动外部程序时一定要注意正确处理输出流和错误流。

    阅读全文
    Java 492 人阅读 抢沙发 , , ,
  • 某应用GC频繁的问题原因:由于平均晋升的大小一直 > 旧生代的剩余空间(因为每次FGC后旧生代都只有300多M是空余的,这个在这个应用中是正常的),导致每次YGC的时候悲观策略一直触发,于是看到的就是频繁Full GC了。从这个Case来看,对于需要Cache比较多内容的场景而言(尤其是启动时既要加载的),还是要给old留有一定的空间,否则悲观策略就要发威了.

    阅读全文
    Java 579 人阅读 抢沙发 , , , , , , , ,
  • 这个应用是期待在内存不够的情况下快速抛出OOM的,但在执行中却发现执行了4个多小时的Full GC,就是没有抛OOM,导致应用出现了问题,从GC代码来看,目前要比较快的触发OOM,只能是调整GCTimeLimit和GCHeapFreeLimit,不过都不好调,后来暂时是靠调整了GCHeapFreeLimit来帮助快速抛出OOM。

    阅读全文
    Java 558 人阅读 抢沙发 , , , ,
  • 某应用出现启动后集群中部分node成功,部分node失败原因为File.listFiles最后会调用到readdir函数,而这个函数返回的文件列表是按inode number排序的,因此在每台linux机器上确实有可能不同,当一个目录下有两个jar中有相同名字但不同内容的class时,就悲催了,一个保护做法是在实现classloader时,最好是先对listFiles排下序,避免集群中node出现表现不一致的问题。

    阅读全文
    Java 394 人阅读 抢沙发 , , ,