weblogic OutOfMemoryError GetNewTLA

本文转自:http://fm928.blog.163.com/blog/static/748135201391483112785/

OutOfMemoryError的大家庭里,我通常遇到的类型比较普遍,如

java.lang.StackOverflowError:(很少)

java.lang.StackOverflowError:(很少)
java.lang.OutOfMemoryError
heap space(比较常见)
java.lang.OutOfMemoryError: PermGen space (
经常出现)

java.lang.OutOfMemoryError: GC overhead limit exceeded(某项操作使用大量内存时发生)

java.lang.OutOfMemoryError unable to create new native thread

其实还有一种是:

java.lang.OutOfMemoryError: nativeGetNewTLA.

java.lang.OutOfMemoryError: mmAllocArray - Object size: 272, Num elements: 32.

java.lang.OutOfMemoryError: allocLargeObjectOrArray - Object size: 65552, Num elements: 16384

对这个问题的解决其实是对JVM内存分配的性能调优。

在实际的环境中,这个3个错误往往是伴随着发生的。首先简单说明一下3个错误:第一个,是线程申请新的TLA时发生的;第二个,是给Array类型的对象分配一般内存时发生的;第三个,是在分配大对象的Array对象时发生的。

本文主要就是针对nativeGetNewTLAl错误的分析。

这个错误经常是发生JRockitJVM上的,如果都用hotspot或者J9JVM可能不会遇到这个问题。

针对这个问题在查找的时候一定要看清楚你使用的JRockit的版本,不是看大版本(如果1.6.01.5.0等),要看Releases,如下:

Releases

R26.4 and older

 

R27.1 - R27.2

 

R27.3 and later

 

R27.3 and later

 

R27.3 and later

 

R27.3 and later

 

R27.3 and later

 

首先了解一下TLA:

TLA 全称是thread local area,它是在heap或者nursery中分配的一个块空间,是thread在执行的时候自己说占用的,具体的配置参数有:

-XXtlaSize:min=<size>,preferred=<size> -XXlargeObjectLimit:<size> -XXminBlockSize:<size>


在weblogic server中,找到》服务器启动》》参数》》-XXtlaSize:min=128k,preferred=512k,wasteLimit=128k

一个thread可以将一下小的对象分配在TLA区,这些对象是不需要和其他thread进行同步的,然后TLA里分配的对象也可以是非thead本地,它可以被其他任何thread所访问,而且也会被GC.如果当前的TLA占满了,就会继续申请新TLA区空间。

TLA的大小会影响其使用和分配的效率和速度,同时会影响GC的发生频率。更大一点的TLA区会让thead可以分配更大的对象在TLA而减少申请新TLA的频率。

R27.2以后的版本是运行thread将非常大的对象保存在TLA的。也就是说,增加TLA的大小可以预防分配对象时内存不够的问题,但是会增加发生内存碎片的问题。在R27.1以后的版本中,TLA的大小是动态的依赖当前的空闲空间大型,变化范围在minimumpreferred大小之间。

 

增加TLA的大小对thread分配大对象的是有一定的好处。

增加TLA的最小值minimum可能会提高GC的次数。

减少preferred大小对应用程序中,thread对一些对象在消失之前分配内存是有好处的。

 

一个通用的设置规则是,minimum 2-4k, preferred 16-256k 比如:

de>java -XXtlaSize:min=1k,preferred=512k MyApplicationde>

解决java.lang.OutOfMemoryError: nativeGetNewTLA.就可以对这些相关参数进行调优。

-XXtlaSize  默认大小是2kB, minimum不能小于large object limit

其他一些经验:

-XXlargeObjectLimit <= -XXtlaSize:min <= -XXminBlockSize

-XXtlaSize:min <= -XXtlaSize:preferred

Preferrred的默认参数:

JRockit TLA问题分析和调优 - 踏雪无痕 - 踏雪无痕--helloweblogic
 

参考链接:

http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionXX.html#wp1020097

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值