在设置jboss的参数中,maxThreads(最大线程数)和acceptCount(最大等待线程数)是两个非常重要的指标,直接影响到程序的QPS。本文讲解jboss连接的运行原理,以及如何设置这两个参数。

     最佳线程数:
     在做压力测试时,刚开始,随着并发量的增加,QPS也会随之增大,但当并发量超过一个阀值之后,QPS就不会再增大,甚至很多时候还会降低,类似于下图。而这个阀值就是我们所说的最佳线程数,他也是设置jboss时的maxThreads参数时的重要指标。
       
     
     jboss连接的原理
     jboss连接的基本原理如下图,一般情况下,当用户访问jboss服务器时,会先进入等待队列,然后再到运行区被执行。运行区中连接的线程数量是固定的,也就是说cpu在同一时间内处理的用户访问数量也是固定的。
     而那些已经建立连接,但暂时还不能被cpu处理的,就在等待列队中等待,直到运行区中有空闲时,才进入运行区被cpu执行的。而如果等待队列也满了,再有用户申请连接,jboss就会直接直接拒绝掉。
     这样做的目的是为了更好地利用系统资源(cpu,内存等)。试想,每个连接都是要占用系统资源的,假如jboss不做这样的设置,一有连接请求,jboss马上建立连接,内存消耗非常大,更加致命的是,随着连接数量的增多,cpu用于调度的时间增大,用于计算的时间相对减少,这样系统的性能就被活活拖垮了。
           
    
     在jboss中,acceptCount和maxThreads,这两个参数就是用于设置分别对待队列长度和运行区线程数。具体操作,进入JbOSS_HOME/server/default/deploy/jbossweb.sar/ 文件夹下,找到server.xml文件,修改这连个参数如下:
  1. <Connector protocol="HTTP/1.1" port="9999" address="${jboss.bind.address}"
  2. connectionTimeout="20000" redirectPort="${jboss.web.https.port}"
  3. maxThreads="150" acceptCount="8000"
  4. />

<Connector protocol="HTTP/1.1" port="9999" address="${jboss.bind.address}"
connectionTimeout="20000" redirectPort="${jboss.web.https.port}"
maxThreads="150" acceptCount="8000"
/>

 
      如何找到最佳连接数
      1. 根据公式计算: 最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量
      2. 通过用户慢慢递增来进行性能压测,观察QPS,响应时间。
      这里重点讲讲第二种方法。
      首先在jboss的设置上,maxThreads值要设置得尽量大,以便压力都能压到cpu上。这同时也要注意,线程连接是占用内存资源的,假如maxThreads太大了,可能会消耗完所有内存,最终造成程序崩溃。
      具体步骤。我以自己最近做的压力测试,并从中找到最佳线程数为例进行进行说明
      我先设置的maxThreads=2000,acceptCount=4000。测试结果如下,横轴表示并发量,纵轴表示QPS
      
         跟据上图,我们就可以大致知道这个系统的最佳线程数是在红色区间范围内。
 
      真实的maxThreads的设置
      但在真实环境中,maxThreads的值要略大于压力测试时得到的最佳线程数。这是因为系统依靠的资源是可能发生变化的,比如原先系统在压力测试得到的最佳线程数是30,我们设置maxThreads也是30的话,但在真实运行时,可能突然有段时间,IO的响应变慢,这样造成的就是是最佳线程数可能变成35,这样cpu资源就白白被浪费了,QPS降低.所以在设置maxThreads时,留下一切缓冲余地还是很有必要的。

Jboss调优——最佳线程数的更多相关文章

  1. 【面试虐菜】—— Jboss调优

    吐血整理了以前Jboss以及JVM在生产环境下的调优参数,各种不同的案例,都是来自网友杜撰.整合后,希望对广大使用jboss作为生产应用服务器的朋友有所帮助. JBOSS参数调优 配置deploy/j ...

  2. Tomcat设置最佳线程数总结

    最佳线程数: 性能压测的情况下,起初随着用户数的增加,QPS会上升,当到了一定的阀值之后,用户数量增加QPS并不会增加,或者增加不明显,同时请求的响应时间却大幅增加.这个阀值我们认为是最佳线程数. 为 ...

  3. Tomcat最佳线程数

    什么是最佳线程数? 为满足更多用户访问需求,可以调整Tomcat线程数,但是不能太大,否则导致线程切换开销,随着用户递增(线程数也随之调整),系统QPS逐渐增加,当用户量达到某个值,QPS并不会增加, ...

  4. MySQL参数调优最佳实践

    前言很多时候,RDS用户经常会问如何调优RDS MySQL的参数,为了回答这个问题,写一篇blog来进行解释: 哪一些参数不能修改,那一些参数可以修改:这些提供修改的参数是不是已经是最佳设置,如何才能 ...

  5. Java并发(八)计算线程池最佳线程数

    目录 一.理论分析 二.实际应用 为了加快程序处理速度,我们会将问题分解成若干个并发执行的任务.并且创建线程池,将任务委派给线程池中的线程,以便使它们可以并发地执行.在高并发的情况下采用线程池,可以有 ...

  6. [svc]centos6系统安装(分区)及其18处调优调优最佳实战

    系统下载 在阿里云下载 可以使用最小化的,也可以使用dvd版(CentOS-6.7-x86_64-bin-DVD1.iso),其中dvd版方便安装过程中选包. 一. 系统安装 1,时区选择 2,磁盘分 ...

  7. SAP专家培训之Netweaver ABAP内存管理和内存调优最佳实践

    培训者:SAP成都研究院开发人员Jerry Wang 1. Understanding Memory Objects in ABAP Note1: DATA itab WITH HEADER LINE ...

  8. JVM调优-Jstack线程分析

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...

  9. 硬菜点播台 | MySQL阿里实践经典案例之参数调优最佳实践

    http://mp.weixin.qq.com/s?__biz=MzA4NjI4MzM4MQ%3D%3D&mid=512708319&idx=1&sn=6af5f424d7cd ...

随机推荐

  1. 团队项目——NABC

    N:根据自身遇到的问题,应对铁大环境——查询图书时只能登录网页进行查询,对于我们铁大莘莘学子着实是不方便的.所以此项目诞生. A:对于实现方法,首先我们随移动设备的潮流,做一个Android应用,对于 ...

  2. maven安装报错

    今天在安装maven时安照说明配置环境变量,通过命令检查: mvn -v 竟然出现以下错误,很郁闷的是我明明配置了JAVA_HOME,并且别的依赖java的东西都能用,通过java -version也 ...

  3. 【Count and Say】cpp

    题目: The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111 ...

  4. 转载—“Cache-control”常见的取值有private、no-cache、max-age、must-revalidate等

    转载自http://www.cnblogs.com/igin/archive/2008/05/04/1181056.html 网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常 ...

  5. ZOJ 3941 Kpop Music Party 贪心

    题目链接: http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=3941 题解: 先吧所给的区间合并,得到若干个独立的区间. 然后从左 ...

  6. NYOJ-655 光棍的YY AC 分类: NYOJ 2013-12-29 19:24 224人阅读 评论(0) 收藏

    #include<stdio.h> #include<string.h> char str[210]; int max[210][52]={0}; int sum(int n, ...

  7. Load hlsl

    这个函数和sample差不多 不过没有samplestate和filter http://msdn.microsoft.com/zh-cn/library/windows/desktop/bb5096 ...

  8. AngularJs学习笔记--Guide教程系列文章索引

    在很久很久以前,一位前辈向我推荐AngularJs.但当时我没有好好学习,仅仅是讲文档浏览了一次.后来觉醒了……于是下定决心好好理解这系列的文档,并意译出来(英文水平不足……不能说是翻译,有些实在是看 ...

  9. YARN的 AM与RM通信,申请资源分配过程

    AppMaster向RM请求资源 MRAppMaster :serviceinit // service to allocate containers from RM (if non-uber) or ...

  10. rpc 小例子

    RpcFramework /* * Copyright 2011 Alibaba.com All right reserved. This software is the * confidential ...