Chinaunix首页 | 论坛 | 博客
  • 博客访问: 264439
  • 博文数量: 757
  • 博客积分: 40040
  • 博客等级: 大将
  • 技术积分: 4935
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-09 12:37
文章分类

全部博文(757)

文章存档

2011年(1)

2008年(756)

我的朋友

分类:

2008-09-09 12:39:02

  一台后端server,OS为Slackware 8.1,装了tomcat 4.1.30,近期在繁忙时期经常会死机,死状就是"java.lang.OutOfMemoryError: unable to create new native thread".是tomcat创建不了新的线程来应答请求了。于是我搭了一个环境专门来测试这个问题。内存为2G,CPU为四颗2.8G,tomcat 4.1.30,写一个最简单的JSP页面,如下:

  代码

  <%

  try

  {

  Thread.sleep(30000);

  out.println("fuck");

  } catch (InterruptedException e) {

  e.printStackTrace();

  } %>

  然后开Jmetor来压,同时开jconsole来监测tomcat的情况,并不断调整XMX,XMS,XSS这三个参数,得出下表:

  XMX XMS XSS down时的tomcat thread数

  500M 500M 128K 642

  800M 800M 64K 485

  1024M 1024M 64K 374

  1024M 1024M 128K 374

  1024M 1024M 512K 371

  根据该表,可以看出,随XMX,即是分配给JVM的内存数越大,tomcat所能开的thread数就越小,而Xss这个参数几乎不影响任何测试结果。我猜想tomcat开线程是使用的内存,而不是JVM的内存。当分配给JVM的内存越大,操作系统所能用于分配的内存就越小,于是所能开的线程数就越小。

  大家有什么解决方案吗?难道大家都没遇过这个问题?我的设想是可能初始每个进程(也就是tomcat开的线程)有一个初始大小,这应该是一个内核参数来的,应该把它调小就可以了,但我不知道怎样去调。

【责编:John】

--------------------next---------------------

阅读(177) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~