java/lang/OutOfMemoryError":"Failed to fork OS thread请教

时间:2022-03-17 14:03:45

> my platform
> Server version: Apache Tomcat/5.5.23
> Server built:   Mar 5 2007 08:25:04
> Server number:  5.5.23.0
> OS Name:        AIX
> OS Version:     5.3
> Architecture:   ppc
> JVM Version:    pap32dev-20070511(SR5)
> JVM Vendor:     IBM Corporation
  JAVA_OPTS : "-Xms800M -Xmx1200M -Xss128k"

在运行一天左右,就会出现java/lang/OutOfMemoryError":"Failed to fork OS thread的异常,jvm打出一个core文件。这时,大部分线程将进入wait状态,导致很多业务不能运行,请教各位大侠是否遇到过同样的情况。

注:内存大小为8G.

谢谢!

5 个解决方案

#1


把-Xmx1200M 再设大些看,再outofmemory的话,此程序可能有内存泄漏

#2


以前-Xmx 是设置为1500的,由于出现这个异常,导致没有内存建本地线程,所以才调小到1200的。 但是仍然会出现。望各位帮忙!

#3


检查下是否存在死锁。

#4


程序的rs,stm,conn 没有依次关闭,把-Xmx1200M   再设大些一般不会起做用。

在运行一天左右,就会出现java/lang/OutOfMemoryError

表明你有部分程序的rs,stm,conn没有关闭,并不是所有的程序用完连接都没有关闭,当程序运行到那个没有关闭的连接时,内存就会出现泄漏,但服务器不会吗上死掉,因为服务器有一定的负载能力,当内存泄漏到一定的程度tomcat就会死掉,
jdk1.5以上的版本可以用jconsole.exe 查看一下线程使用情况,内存出现泄漏时会提示相关java类,然后检查一下那个java类中的代码是否有问题。

#5


第一:

xms 的值最好是 xmx 的 4 分之一

第二

xmx 的值最大不要超过可用物理内存的 5 分之 4

第三:

你最好再加一个参数 -XX:MaxPermSize= 【2分之一 xms】

然后呢,使用这个 jvm 参数,来做垃圾回收的检查,看下测试结果

#1


把-Xmx1200M 再设大些看,再outofmemory的话,此程序可能有内存泄漏

#2


以前-Xmx 是设置为1500的,由于出现这个异常,导致没有内存建本地线程,所以才调小到1200的。 但是仍然会出现。望各位帮忙!

#3


检查下是否存在死锁。

#4


程序的rs,stm,conn 没有依次关闭,把-Xmx1200M   再设大些一般不会起做用。

在运行一天左右,就会出现java/lang/OutOfMemoryError

表明你有部分程序的rs,stm,conn没有关闭,并不是所有的程序用完连接都没有关闭,当程序运行到那个没有关闭的连接时,内存就会出现泄漏,但服务器不会吗上死掉,因为服务器有一定的负载能力,当内存泄漏到一定的程度tomcat就会死掉,
jdk1.5以上的版本可以用jconsole.exe 查看一下线程使用情况,内存出现泄漏时会提示相关java类,然后检查一下那个java类中的代码是否有问题。

#5


第一:

xms 的值最好是 xmx 的 4 分之一

第二

xmx 的值最大不要超过可用物理内存的 5 分之 4

第三:

你最好再加一个参数 -XX:MaxPermSize= 【2分之一 xms】

然后呢,使用这个 jvm 参数,来做垃圾回收的检查,看下测试结果