近日来,用Jmeter做压力测试。发现,每台客户机使用800个线程组压力倍增。昨天的测试,到了今天下午都没有跑完。
仔细观察了下Jboss的错误日志,发现,jboss已经宕机了。

本身后台的环境是使用LVS作的负载均衡。目前apache负载均衡器方面,已经没有什么问题了。修改的线程组达到1000。据资料显示,apache默认的线程数是60,最高能达到1000
在http.conf中,加入下面模块:

  1. <IfModule mpm_winnt.c>
  2. ThreadsPerChild 150
  3. MaxRequestsPerChild 1000
  4. Win32DisableAcceptEx
  5. </IfModule>

根据 http://www.asymt.com/servers/windows/350.html 这篇文章所说,线程数超过170可能会导致内存不断的增加。这个没试过。我直接ThreadsPerChild 1000 MaxReqestPerChild 4000 暂时解决掉自己前面apache负载分配的压力。

后端的Jboss服务器线程数设置比较麻烦。

  1. <Connector port="80" address="${jboss.bind.address}"
  2. maxThreads="250" maxHttpHeaderSize="8192"
  3. emptySessionPath="true" protocol="HTTP/1.1"
  4. enableLookups="false" redirectPort="443" acceptCount="100"
  5. connectionTimeout="20000" disableUploadTimeout="true"
  6. compression="on" compressionMinSize="10"
  7. compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
  8. />

这里面原始的maxThreads分配为250. 这个值最好设置成平时最大的并行线程数多25%.
acceptCount 是指超过maxThreads可接受的排队数目

修改以上两个线程数目后,继续测试..



测试发现,原本正常运行的测试计划。这次基本都跑死。控制台报出 java.lang.outMemoryError:java heap space错误。在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。所以调整jvm的参数。

  1. set HEAP=-Xms1024m -Xmx1024m #堆内存池的大小值
  2. set NEW=-XX:NewSize=256m -XX:MaxNewSize=256m #新对象产生时,分配的内存。最好为最大对内存的四分之一
  3. set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50% #新对象内存比例
  4. set TENURING=-XX:MaxTenuringThreshold=2
  5. set RMIGC=-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000
  6. set PERM=-XX:PermSize=64m -XX:MaxPermSize=64m

调整适合的内存参数。

关于jboss的线程问题+java.lang.outofmemoryError的更多相关文章

  1. JVM内存越多,能创建的线程越少,越容易发生java.lang.OutOfMemoryError: unable to create new native thread。

    一.认识问题: 首先我们通过下面这个 测试程序 来认识这个问题:运行的环境 (有必要说明一下,不同环境会有不同的结果):32位 Windows XP,Sun JDK 1.6.0_18, eclipse ...

  2. 在Eclipse中运行Jboss时出现java.lang.OutOfMemoryError:PermGen space及其解决方法

    在Eclipse中运行Jboss时出现java.lang.OutOfMemoryError:PermGen space及其解决方法 在Eclipse中运行Jboss时,时间太长可能有时候会出现java ...

  3. 剥下“java.lang.OutOfMemoryError: unable to create new native thread”的外衣 创建线程数公式(MaxProcessMemory - JVMMemory – ReservedOsMemory)

    剥下“java.lang.OutOfMemoryError: unable to create new native thread”的外衣 星期一早上到了公司,据称产品环境抛出了最可爱的异常—OutO ...

  4. eclipse:Tomcat设置jvm,解决java.lang.OutOfMemoryError: Java heap space 堆内存溢出

    eclipse 有启动参数里设置jvm大小,因为eclipse运行时自己也需要jvm,所以eclipse.ini里设置的jvm大小不是具体某个程序运行时所用jvm的大小,这和具体程序运行的jvm大小无 ...

  5. Web项目java.lang.OutOfMemoryError: PermGen space异常解决

    接手一个新的Web项目,编译运行(Tomcat版本为7),运行的时候报出了java.lang.OutOfMemoryError: PermGen space的异常,搜了一下这样解释:   PermGe ...

  6. java.lang.OutOfMemoryError: PermGen space及其解决方法

    PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决 ...

  7. java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决方法

    1 BitmapFactory.decodeFile(imageFile); 用BitmapFactory解码一张图片时,有时会遇到该错误.这往往是由于图片过大造成的.要想正常使用,则需要分配更少的内 ...

  8. 应用jacob组件造成的内存溢出解决方案(java.lang.OutOfMemoryError: Java heap space)

    http://www.educity.cn/wenda/351088.html 使用jacob组件造成的内存溢出解决方案(java.lang.OutOfMemoryError: Java heap s ...

  9. java.lang.OutOfMemoryError处理错误

    内存详解 原因: 常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据: 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收: 3.代码中存在死循环或循环产生过多 ...

随机推荐

  1. java的IO流初探

    DEMO代码: /* * 文件IO流的简单演示 */ package com.IO; import java.io.*; public class Demo_IO_1 { /** * @param a ...

  2. 把jpg文件读取到内存char* 再转换成CImage

    网络上找到大神写的转换方法,不过就记下来,学习学习: 当然转成CImage之后就可以从CImage转换成HBITMAP 了 void DrawPic(CDC *pDC,char *buf,int le ...

  3. [luogu3369/bzoj3224]普通平衡树(splay模板、平衡树初探)

    解题关键:splay模板题整理. 如何不加入极大极小值?(待思考) #include<cstdio> #include<cstring> #include<algorit ...

  4. 【bzoj1056】排名系统

    1056: [HAOI2008]排名系统 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2195  Solved: 623[Submit][Statu ...

  5. BootstrapValidator:表单验证神器

    前言:做Web开发的我们,表单验证是再常见不过的需求了.友好的错误提示能增加用户体验.博主搜索bootstrap表单验证,搜到的结果大部分都是文中的主题:bootstrapvalidator.今天就来 ...

  6. 读excle

    1.OleDbConnection读取Excel ///<summary>///上传文件到临时目录中 ///</ummary>private void Upload(){ Ht ...

  7. jQuery 给class附点击事件获取对应的索引

    有一类div标签,class为pointbox,数量不等,有多个.我需要在点击某一个标签的时候实时获取该标签在这类标签中索引值,以便进行其他操作. 代码很简单: $(".pointbox&q ...

  8. 12-在eclipse上安装lxml

    1.可用easy_install安装方式,也可以用pip的方式: pip install lxml 2.安装完毕:写代码导包时提示错误,这是需要配置一下eclipse,是因为它没有更新导入的包,所以需 ...

  9. 面试题:SpringMVC的工作流程

    SpringMVC是当今最主流的Web MVC框架,没有之一,要做一名合格的JavaWeb工程师,学好它势在必行! 与Struts2原理不同,SpringMVC是通过最基础最传统的servlet来实现 ...

  10. 设置MongoDB课程环境

    Setting Up Your Course Environment This course is designed to be very hands on. Virtually all of the ...