java lang outofmemoryerror unable to create new native thread内存泄漏分析

java lang outofmemoryerror unable to create new native thread内存泄漏分析

ID:6074947

大小:81.50 KB

页数:10页

时间:2018-01-02

java lang outofmemoryerror unable to create new native thread内存泄漏分析_第1页
java lang outofmemoryerror unable to create new native thread内存泄漏分析_第2页
java lang outofmemoryerror unable to create new native thread内存泄漏分析_第3页
java lang outofmemoryerror unable to create new native thread内存泄漏分析_第4页
java lang outofmemoryerror unable to create new native thread内存泄漏分析_第5页
资源描述:

《java lang outofmemoryerror unable to create new native thread内存泄漏分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、【问题现象】:自动化用例跑了约三个多小时后,界面响应时间长,界面出现500错误。之后再点击时,页面重定向至首页。查看jboss下的server.log文件发现内存溢出的OutOfMemory异常。【出现的问题日志】:java.lang.OutOfMemoryErroratjava.util.zip.ZipFile.open(NativeMethod)atjava.util.zip.ZipFile.(ZipFile.java:203)atjava.util.jar.JarFile.(JarFile.java:132)atjava.util.jar.JarFile

2、.(JarFile.java:97)2010-11-2415:32:48,377ERROR[STDERR]Exceptioninthread"Thread-5271" 2010-11-2415:32:48,377ERROR[STDERR]java.lang.OutOfMemoryError:unabletocreatenewnativethread【问题定位】:对于一般的内存泄漏导致的堆栈溢出,通常的错误信息主要有以下几种。1.java.lang.OutOfMemoryError:Javaheapspace2.java.lang.OutOfMemoryError:Perm

3、Genspace3.java.lang.OutOfMemoryError:RequestedarraysizeexceedsVMlimit4.java.lang.OutOfMemoryError:(Nativemethod)回复次数:1··luozhangwen·(我不懒--押宝党实习生)·等 级:·#1楼得分:0回复于:2010-12-2716:06:51而在出现内存泄露的机器上,其日志显示是无法创建本地线程的原因所引起的。这里的异常信息是:java.lang.OutOfMemoryError:unabletocreatenewnativet

4、hread,对应上述内存溢出的第4种场景。尽管可以初步怀疑是虚拟机参数的设置导致的问题,但实际上还是需要确认系统在自动化场景下有没有其他内存泄露问题。重新跑自动化,并中间使用“jstat–gcutil进程ID10003>>jstat.txt”命令,每隔3秒查看一下虚拟机堆空间的回收情况。在运行了三个多小时后,发行server.log种已经出现了该OutOfMemory的异常信息。此时查看了jstat.txt文件,发现从自动化开始运行一直到堆栈溢出,内存回收都很正常。全部垃圾回收时间花费了5秒左右,且未有fullgc,全为younggc的时间。持久区(Perm)、年老区(Old),分别

5、占用了25%、19%左右的空间。且使用“top”命令监测中间CPU和内存占用都比较稳定,没有激增的现象。使用“jmap–hito进程ID”查看内存对象统计,发现没有业务逻辑相关的类导致的泄露问题。系统中创建最多的就是与Sting相关的char数组对象。这个也是正常情况,排除程序级别的内存泄漏问题。也就是说堆栈溢出不是1和2的两种情况。此时再分析server.log种的日志信息,得知是无法创建本地线程所致的问题。也就是说在压力环境下拥有大量的线程,或者本地内存耗尽时,企图创建新的线程时抛出。而系统能创建的线程数的计算公式如下: (MaxProcessMemory-JVMMemory-R

6、eservedOsMemory)/(ThreadStackSize)=Numberofthreads MaxProcessMemory指的是一个进程的最大内存JVMMemoryJVM内存ReservedOsMemory保留的操作系统内存ThreadStackSize线程栈的大小【解决方法】:针对无法创建更多本地线程的情况,调整线程栈的大小,添加-Xss选项,设置为256k后再跑自动化,发现问题解决。 JAVA_OPTS="-Xms2048M-Xmx2048M-Xmn512M-Xss256k-XX:PermSize=512M….”星期一早上到了公司,据称产品环境抛出了最可爱的异常—Ou

7、tOfMemory,它是这样来描述他自己的:java.lang.OutOfMemoryError:unabletocreatenewnativethread而且这位仁兄竟然还堂而皇之地同时出现在了3个application里面,所有应用全部遭殃。那可爱的OOM是如何产生的呢?直接原因是创建的线程太多了,根本原因是某个地方的内存限制了。搜罗了一下在网上找到了一个计算公式:(MaxProcessMemory-JVMMemory–ReservedOsMemory

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。