Java OutOfMemory Error引发的JVM参数实测--线程堆栈参数篇

最近在Tomcat的环境中调整了JVM的线程堆栈参数Xss,结果服务器运行一段时间后出现OutOfMemory的错误,导致Tomcat进程异常挂起。于是乎在网上找了大量的资料,并在环境中实际进行测试,终于搞清了这个问题。下面将详细的信息和过程罗列如下,供大家查看和参考。在这篇文章中会重点测试不同的Xss参数对生成的线程数量的影响。以后会再写一篇文章重点测试不同的Xms和Xmx参数对生成的线程数量的影响。得意

先说一下我遇到问题的环境信息。服务器操作系统为Linux RHEL 32位,Tomcat配置的Java为Java 1.6.0_20 32位。以前采用的默认的Xss参数设置,服务器运行正常。从网上看到一些文章说Java 1.5之后的版本的默认线程堆栈大小为1M,于是就把我的环境中的Xss设置为512K,这样就可以生成更多的Java线程,提高Tomcat的处理能力。结果调整完之后就出现Tomcat运行一段时间后异常挂起的情况抓狂。以下是JVM的报错信息:

# java.lang.OutOfMemoryError: requested 1059528 bytes for Chunk::new. Out of swap space?
#
#  Internal Error (allocation.cpp:215), pid=11588, tid=212859792
#  Error: Chunk::new
#
# JRE version: 6.0_20-b02
# Java VM: Java HotSpot(TM) Server VM (16.3-b01 mixed mode linux-x86 )

开始以为是Tomcat的线程池分配过大引起过量的内存消耗引起的,但是将线程池缩小后仍然出现同样的问题。遂开始怀疑是不是Xss的调整引起的问题,如果我的环境中Java版本的默认线程堆栈不是1M,而是小于512K的某个值,那么当我把Xss设置为512K后,则同样的线程数量会消耗更多的内存,从而引起内存溢出的问题。于是在网上开搜,找了很多资料,终于在Oracle的网站上发现这么一段话:( http://www.oracle.com/technetwork/java/hotspotfaq-138619.html )

------------------------------------------------------------------------------------------------------

My application has a lot of threads and is running out of memory, why?

You may be running into a problem with the default stack size for threads. In Java SE 6, the default on Sparc is 512k in the 32-bit VM, and 1024k in the 64-bit VM. On x86 Solaris/Linux it is 320k in the 32-bit VM and 1024k in the 64-bit VM.

On Windows, the default thread stack size is read from the binary (java.exe). As of Java SE 6, this value is 320k in the 32-bit VM and 1024k in the 64-bit VM.

You can reduce your stack size by running with the -Xss option

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值