(转)websphere线程池 连接池设置
原文:http://www.talkwithtrend.com/Article/207511
池(Pool)是WebSphere中最常涉及的概念之一。从网络、Web 服务器、Web 容器、EJB 容器,一直到数据源,每一个环节都线程池、连接池的影子。要想恰当配置这些池的大小,首先要了解漏斗模型。
通常,WebSphere应用中的一个请求到达服务器,到真正开始处理,要经过一系列的连接池。广域网上可能有大量的并发用户同时访问Web服务器,Web服务器上同时活动(Active)的连接可能高达10000个。但Web服务器到应用服务器(Web容器)的连接池大小可能只有200。Web容器到EJB容器的连接池更小,可能是80。然后,经过数据源(Data source)到数据库的连接最大可能只有25个。从Web服务器的连接池到数据库的连接池尺寸逐渐变小,像一个漏斗(funnel),所以称为漏斗模型。
IBM 000-253中有这么一道题:
According to the Upstream Queuing model for performance tuning, what reflets the correct application of recommended settings for maximum concurrent clients?
A Web Server=75, Web container=75, Datasource =25
B Web Server=75, Web container=50, Datasource =25
C Web Server=50, Web container=50, Datasource =50
D Web Server=25, Web container=50, Datasource =75
根据漏斗模型,那么很显然应该选B。
那么实际生产环境中就如此依样画葫芦就可以了么?后面的池一定比前面的小么?如果当前性能不行,增大池的大小就能提高么?
绝没有那么简单。后面的池小于前者,比如数据库连接池小于web线程池,默认的假定是:并非每个JSP和Servlet都需要访问数据库。如果你的应用是数据库密集型的应用,基本上每个JSP和Servlet都需要访问一次或多次数据库,而且系统中还有一些不经过jsp或Servlet的后台进程。那么数据源的连接池就必须大于web容器线程池,否则会报无法得到连接的错。
下面按照我的经验讲述一下每层池大小设置值
对于Web服务器
IBM HTTP Server的优化就是对Apache的优化。一般需要调整httpd.conf中如下参数:
MaxClients:用来定义Web服务器可以同时支持的最大并发连接数或并发用户数,默认值是600。这个值需要根据你所希望的同时支持的并发用户数来设置,一般是峰值的120%。当然这个值不能设的太大,毕竟Apache吃内存也是很厉害。我遇到的项目一般是不用调整的,大家可以根据实际负载动态的调整MaxClients。
将 IBM HTTP Server 配置为显示状态页面:
- 编辑 IBM HTTP Server 的 httpd.conf 文件,从此文件的下列各行中注释注释字符(#):
#LoadModule status_module, modules/ApacheModuleStatus.dll,#<Location/server-status>#SetHandler server-status#</Location>- 保存更改,然后重新启动 IBM HTTP Server。
- 在 Web 浏览器中,转至 http://yourhost/server-status。并且,单击重新装入以更新状态。
- (可选)如果浏览器支持刷新,那么转至 http://your_host/server-status?refresh=5 以便每 5 秒钟刷新一次。
上图给出了一些其它参数的推荐值。注意Windows平台和其它平台的不同(ThreadsPerChild相当于Maxclients)。关于MinSpareServers
,MaxSpareServers
, 和StartServers
等的设置,以及MPM使用prefork或worker模块时的不同,可以阅读Apache Performance Tuning。
如果你的应用访问量很大,那么也许你需要优化一下操作系统的tcp/ip相关参数。 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/tprf_tuneopsys.html
并修改“负载均衡”选项和“重试时间间隔”Web 服务器插件属性设置以提高性能http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/tprf_tunewebserv.html
Web容器线程池
要点就是:“通常,对于每个服务器 CPU,5 至 10 个线程将会提供最佳吞吐量”(现在的一个cpu可以用核来代替)。比如你的Pc Server有2块CPU,每块CPU都是4核,那么你一个Application Server可以设置的最小值和最大值可以分别为40、80。但是一般考虑到能充分利用CPU和Memory,或者为不同的应用启用不同的application server,一台Pc Server上并不仅有这么一个appserver,而且还有别的进程在占用着CPU,所以默认的10到50(Linux 系统上 25 个)是一个比较合适的值,当然更准确的值需要通过性能测试来确定。
在进行性能测试的时候,如果吞吐率不是很满意,或者在TPV中看到线程池占用一直是最大值,不要立刻就调大线程池的设置——往往吞吐率会更一步下降。这时候要注意CPU占用率的情况、vmstat的r列值,特别是System状态占用率的情况,如果接近10%,甚至超过10%,那么可以肯定系统在进程切换上面消耗的资源太多了。下调线程池的大小反而会提升吞吐率,而且会由于吞吐率的提升降低页面平均响应时间。
这篇文章也许会使你对线程池大小对性能的影响有个感性的认识。
设置的地方大家应该都晓得,单击服务器 > 应用程序服务器 >server_name > 线程池。
数据库连接池
连接池的最小值,应该和性能测试时TPV观察到的jdbc平均大小一样,最大值根据实际需要设置,每次增长可以设置成大于1,增长一次到位。总之尽量避免连接池频繁的增长和收缩,减少wait的情况发生。
可以使用 Tivoli Performance Viewer 查找池中最优连接数。如果并发等待者的数目大于 0,但是 CPU 负载未接近 100%,那么考虑增加连接池大小。如果使用百分比值一直低于正常工作负载,那么考虑减少池中的连接数。
Application Server 将在使用该数据源的每个应用程序服务器中创建连接池的单独实例。例如:
- 如果运行包含三个服务器的集群,这三个服务器都使用myDataSource,并且 myDataSource 的“最大连接数”设置为 10,那么可生成多达 30 个连接(3 个服务器乘以 10 个连接)
这是需要考虑的,别数据库端的连接大小不够了。此外,inactive timeout和timeout的时间应该大于收集时间。
总结
这篇文章参考了IBM的inforcenter和developworks,给出了优化WebSphere池大小的一些经验值,但是真正合适的大小还要参考实际的情况,总之调优是个循序渐进的过程。
(转)websphere线程池 连接池设置的更多相关文章
- WebSphere中数据源连接池太小导致的连接超时错误记录
WebSphere中数据源连接池太小导致的连接超时错误记录. 应用连接超时错误信息: [// ::: CST] webapp E com.ibm.ws.webcontainer.webapp.WebA ...
- 线程池-连接池-JDBC实例-JDBC连接池技术
线程池和连接池 线程池的原理: 来看一下线程池究竟是怎么一回事?其实线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,当客 ...
- MySQL 线程池&连接池&长连接&短连接
线程池 简介 1.mysql每连接每线程,mysql都分配一个单独的线程,该线程处理客户端发来的所有命令 2.每个线程会占用一定的系统资源,线程数越多消耗的系统资源也越多 3.线程的创建和销毁有一定的 ...
- common-pool2对象池(连接池)的介绍及使用
我们在服务器开发的过程中,往往会有一些对象,它的创建和初始化需要的时间比较长,比如数据库连接,网络IO,大数据对象等.在大量使用这些对象时,如果不采用一些技术优化,就会造成一些不可忽略的性能影响.一种 ...
- 杂项之pymysql连接池
杂项之pymysql连接池 本节内容 本文的诞生 连接池及单例模式 多线程提升 协程提升 后记 1.本文的诞生 由于前几天接触了pymysql,在测试数据过程中,使用普通的pymysql插入100W条 ...
- 第一篇:杂项之pymysql连接池
杂项之pymysql连接池 杂项之pymysql连接池 本节内容 本文的诞生 连接池及单例模式 多线程提升 协程提升 后记 1.本文的诞生 由于前几天接触了pymysql,在测试数据过程中,使用普 ...
- HttpClient 4.3连接池参数配置及源码解读
目前所在公司使用HttpClient 4.3.3版本发送Rest请求,调用接口.最近出现了调用查询接口服务慢的生产问题,在排查整个调用链可能存在的问题时(从客户端发起Http请求->ESB-&g ...
- DataSnap 连接池
二. DataSnap连接池 连接池 http://docwiki.embarcadero.com/Libraries/XE8/en/Datasnap.DSSession.TDSSessionMana ...
- http连接池存在的问题
连接的有效性检测是所有连接池都面临的一个通用问题,大部分HTTP服务器为了控制资源开销,并不会 永久的维护一个长连接,而是一段时间就会关闭该连接.放回连接池的连接,如果在服务器端已经关闭,客 户端是无 ...
随机推荐
- python基础(二)列表与字典
列表list-数组stus=['苹果','香蕉','橘子','红枣',111.122,]# 下标 0 1 2 3 4#下标,索引,角标#print(stus[4]) #st=[]#空list#st=l ...
- Linux-目录结构及文件系统
1.Linux 系统的顶层目录结构 / 根目录 ├── bin 存放用户二进制文件 ├── boot 存放内核引导配置文件 ├── dev 存放设备文件 ...
- Python开发——数据结构【深浅拷贝】
浅拷贝 # 浅拷贝只copy一层 s = [3,'Lucy',4,[1,2]] s1 = s.copy() 深拷贝 # 深拷贝——克隆一分 import copy s = [3,'Lucy',4,[1 ...
- c#Dapper 批量插入Mysql
<connectionStrings> <add name="sqlconnectionString" connectionString="server ...
- python基础之Day8
一.什么是文件 文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位 文件的操作核心就:读.写 即我们只需要对于进行读写操作,就是对操作系统发起请求,然后由操作系统将用户或者应用程序对文件的读写 ...
- python之高阶函数
1.函数的参数能接收变量 def calc(x): return x*x n = 10 print(calc(n)) #输出为100 2.变量指向函数 def calc(x): return x*x ...
- linux 系统管理学习
Linux系统管理一.进程管理1.进程管理的作用1)判断服务器健康状态2)查看系统中所有进程3)杀死进程2.进程的查看1)查看所有进程ps aux 查看系统中所有进程ps -le 查看系统中所有进程- ...
- python模块:hmac
"""HMAC (Keyed-Hashing for Message Authentication) Python module. Implements the HMAC ...
- 20155326刘美岑 Exp6 信息收集与漏洞扫描
20155326刘美岑 Exp6 信息收集与漏洞扫描 实验后回答的问题 (1)哪些组织负责DNS,IP的管理. 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和IP地 ...
- Python之旅Day2 元组 字符串 字典 集合
元组(tuple) 元组其实跟列表差不多,也是存一组数,与列表相比,元组一旦创建,便不能再修改,所以又叫只读列表. 语法: names = ("Wuchunwei","Y ...