这两天一个项目在做压力测试的时候,发现只要并发数超过250个,连续测试两轮就会有连接异常出现,测试轮数越多出现越频繁,异常日志如下:

  1. Caused by: com.caucho.hessian.client.HessianConnectionException: 500: java.io.IOException: Error writing to server
  2. at com.caucho.hessian.client.HessianURLConnection.sendRequest(HessianURLConnection.java:142)
  3. at com.caucho.hessian.client.HessianProxy.sendRequest(HessianProxy.java:283)
  4. at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:170)
  5. at $Proxy168.sendOpenAcctInfo(Unknown Source)
  6. at sun.reflect.GeneratedMethodAccessor750.invoke(Unknown Source)
  7. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  8. at java.lang.reflect.Method.invoke(Method.java:597)
  9. at org.springframework.remoting.caucho.HessianClientInterceptor.invoke(HessianClientInterceptor.java:219)
  10. at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
  11. at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
  12. at $Proxy169.sendOpenAcctInfo(Unknown Source)
  13. at com.shine.web.bean.OpenAcctBeanImpl.sendOpenAcctInfo(OpenAcctBeanImpl.java:62)
  14. ... 32 more
  15. Caused by: java.io.IOException: Error writing to server
  16. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  17. at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
  18. at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
  19. at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
  20. at sun.net.www.protocol.http.HttpURLConnection$6.run(HttpURLConnection.java:1345)
  21. at java.security.AccessController.doPrivileged(Native Method)
  22. at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1339)
  23. at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:993)
  24. at com.caucho.hessian.client.HessianURLConnection.sendRequest(HessianURLConnection.java:122)
  25. ... 43 more
  26. Caused by: java.io.IOException: Error writing to server
  27. at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:453)
  28. at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:465)
  29. at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1047)
  30. at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:373)
  31. at com.caucho.hessian.client.HessianURLConnection.sendRequest(HessianURLConnection.java:109)
  32. ... 43 more

一开始使用Error writing to server去网络上查找原因,发现基本都无关。

后来搜索hessian和spring兼容问题,发现spring2.5.6和hessian4.0.7不兼容。将hessian版本号降低到3.1.3,情况有好转,但测试10轮之后,异常又出现了。

通过内存监控,先排除虚拟机内存问题。虚拟机内存配置为-Xms1024m -Xmx1024m,监控下来发现实际占用内存不到一半。

然后通过netstat -na监控操作系统端口占用情况,发现端口占用高峰不到500个,这个原因也排除了。(测试服务器已经修改注册表将TIME_WAIT时间降低到30秒,所以基本不会出现端口占用问题)。

通过CPU监控,确认并发高峰时,CPU占用也不到50%。

种种迹象表明,这些都不是造成连接断开的原因,那到底瓶颈出现在哪里呢?

于是我们将目光转向JBoss的配置。

首先确认数据库的连接池配置,最大连接数设置为50,从前几轮都可以正常运行来看,数据库连接应该够用;

然后确认JBoss的线程池配置,发现默认配置如下:

  1. <mbean code="org.jboss.util.threadpool.BasicThreadPool"
  2. name="jboss.system:service=ThreadPool">
  3. <attribute name="Name">JBoss System Threads</attribute>
  4. <attribute name="ThreadGroupName">System Threads</attribute>
  5. <!-- How long a thread will live without any tasks in MS -->
  6. <attribute name="KeepAliveTime">60000</attribute>
  7. <!-- The max number of threads in the pool -->
  8. <attribute name="MaximumPoolSize">10</attribute>
  9. <!-- The max number of tasks before the queue is full -->
  10. <attribute name="MaximumQueueSize">1000</attribute>
  11. <!-- The behavior of the pool when a task is added and the queue is full.
  12. abort - a RuntimeException is thrown
  13. run - the calling thread executes the task
  14. wait - the calling thread blocks until the queue has room
  15. discard - the task is silently discarded without being run
  16. discardOldest - check to see if a task is about to complete and enque
  17. the new task if possible, else run the task in the calling thread
  18. -->
  19. <attribute name="BlockingMode">run</attribute>
  20. </mbean>

搜索了一下相关配置的说明,在进行高并发的时候,建议修改MaximumPoolSize的大小为并发数的125%。

由于我们测试的不是持续的并发,因此将线程池大小修改成200先测试了一下,发现并发数在300的时候可以正常运行,又将并发数修改到500,持续测试了6个小时,均没有发现异常。

现在比较好奇的是,为什么250个并发的时候就能一直不出错,超过250个并发,就会频繁出错,这个值和MaximumPoolSize的参数到底有什么联系呢?

http://blog.csdn.net/nicholas_lin/article/details/20639481

http://wenku.baidu.com/link?url=eUQiTt73bQN_XBHVNpAhDnSMYfLdfqQXK1AF5Pp2dhTgBrO4nHaws7rEm8WZY5WVIiOEUaX5UQuuQTNCM9DrsNMjetboto1NnikLSEtzH6S

JBoss配置解决高并发连接异常问题(转)的更多相关文章

  1. JMS之——ActiveMQ时抛出的错误Could not connect to broker URL-使用线程池解决高并发连接

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/69046395 解决使用activemq时抛出的异常:javax.j ms.JMSE ...

  2. Linux配置支持高并发TCP连接(socket最大连接数)

    Linux配置支持高并发TCP连接(socket最大连接数) Linux配置支持高并发TCP连接(socket最大连接数)及优化内核参数 2011-08-09 15:20:58|  分类:LNMP&a ...

  3. 转发:php解决高并发

    php解决高并发(转发:https://www.cnblogs.com/walblog/articles/8476579.html) 我们通常衡量一个Web系统的吞吐率的指标是QPS(Query Pe ...

  4. 每一个程序员都应该知道的高并发处理技巧、创业公司如何解决高并发问题、互联网高并发问题解决思路、caoz大神多年经验总结分享

    本文来源于caoz梦呓公众号高并发专辑,以图形化.松耦合的方式,对互联网高并发问题做了详细解读与分析,"技术在短期内被高估,而在长期中又被低估",而不同的场景和人员成本又导致了巨头 ...

  5. 用CAS方案解决高并发一致性问题

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt395 缘起:在高并发的分布式环境下,对于数据的查询与修改容易引发一致性问题, ...

  6. Apache Tomcat 8.5 安全配置与高并发优化

    通常我们在生产环境中,Tomcat的默认配置显然不能满足我们的产品需求,所以很多时候都需要对Tomcat的配置进行调优,以下综合我自己的经验来配置 Tomcat 安全与优化情况,如果你有更好的方案,请 ...

  7. asp.net解决高并发的方案.

    asp.net解决高并发的方案. Posted on 2012-11-27 22:31 75077027 阅读(3964) 评论(1) 编辑 收藏 最近几天一直在读代震军的博客,他是 Discuz!N ...

  8. Nginx和Tengine解决高并发和高可用,而非推荐Apache

    什么是Nginx  什么是Tengine 看看国内大公司在用Nginx和Tengine吗? 步骤一:进入 https://www.taobao.com/,按F12.可看到 有很多APP对淘宝进行请求. ...

  9. 使用数据库乐观锁解决高并发秒杀问题,以及如何模拟高并发的场景,CyclicBarrier和CountDownLatch类的用法

    数据库:mysql 数据库的乐观锁:一般通过数据表加version来实现,相对于悲观锁的话,更能省数据库性能,废话不多说,直接看代码 第一步: 建立数据库表: CREATE TABLE `skill_ ...

随机推荐

  1. 关于MySQL与SQLLite的Group By排序原理的差别

    当我们对一个表的记录进行group by的时候,在未明白使用sum.min.max等聚合函数的时候,group by 的排序规则,例如以下对照了MYSQL和SQLLite 大家都知道,group by ...

  2. [WPF] 使用Grid与GridSplitter排版布局

    原文:[WPF] 使用Grid与GridSplitter排版布局 前言 在開發應用程式時,一個很重要的工作項目就是設計使用者介面的排版布局.WPF中所提供的Grid控制項,讓開發人員擁有將版面分割為欄 ...

  3. 动态接口服务 webservice

    private void GetDll() { WebClient client = new WebClient(); string url = "http://xxxx/services/ ...

  4. python : 批量下载R语言库包

    soupR.py 代码例如以下 # -*- coding: cp936 -*- import urllib import urllib2 import os, re from BeautifulSou ...

  5. uva:10700 - Camel trading(贪婪)

    题目:10700 - Camel trading 题目大意:给出一些表达式,表达式由数字和加号乘号组成,数字范围[1,20].这些表达式可能缺少了括号,问这种表达式加上括号后能得到的最大值和最小值. ...

  6. iOS Dev (55) 获得本年度、月、日本和其他信息

    iOS Dev (55) 获得本年度.月.日本和其他信息 作者:大锐哥 博客:http://prevention.iteye.com - NSDate *now = [NSDate date]; NS ...

  7. ORA-00020的思考

    今天,历史的图书馆例行检查DB,发现alert.log有一"ORA-00020: maximum number of processes (150) exceeded",这是一个常 ...

  8. sql server 远程

    资讯 |  安全 |  论坛 |  下载 |  读书 |  程序开发 |  数据库 |  系统 |  网络 |  电子书 |  站长学院 |  源码 |  QQ |  专栏 |  考试 |  手册 | ...

  9. Eclipse 在线安装fat jar插件

    在线安装步骤: eclipse菜单栏 help >software updates >Search for new features to install>new update si ...

  10. NET 项目结构搭建

    NET 项目结构搭建 我们头开始,从简单的单项目解决方案,逐步添加业务逻辑的约束,从应用逻辑和领域逻辑两方面考虑,从简单的单个项目逐步搭建一个多项目的解决方案.主要内容:(1)搭建应用逻辑和领域逻辑都 ...