微信号:infoqchina

介绍:有内容的技术社区媒体

线程池规模调优

2013-11-11 19:30 InfoQ

线程池应该配置成多大?


先前一位朋友通过Skype问我关于运行在64位机器JVM集群一些问题,该集群每天会运行几次30万+个线程的任务。30万+个线程运行时,核心模块花了太多时间管理它们,导致应用程序极其不稳定。很明显,该应用程序需要一个线程池,从而保证可以杀死客户端,而不是放任客户端把整个应用程序搞崩溃。


上面的示例是比较极端的情况,但它强调了我们使用线程池的原因。尽管我们合理使用了线程池,仍可能由于数据丢失或交易失败惹恼用户。若我们的线程池定义得过大或过小,都有可能让应用程序完全瘫痪。大小合适的线程池允许运行尽可能多的请求,只要硬件和软件支持合理。换句话说,我们不想在有能力处理时让请求在队列中等待,也不想让运行的请求超出我们的管理能力。究竟线程池应该设置为多大合适呢?


若我们遵从“测量不猜”典故的话,就需要看一下与问题相关的技术,问一下可用的度量方法和我们系统获取它们的方法。我们需要使用一些数学方法。我们认为线程池是由队列连接的一个或多个服务提供程序,这样就知道这是可以用利特尔法则(Little’s law)解释的系统。让我们深入地了解一下。


利特尔法则(Little’s law)


利特尔法则(Little’s law)是说,一个系统请求数等于请求的到达率与平均每个单独请求花费的时间之乘积。整个法则在我们日常生活中很常见,令人吃惊的是直到上世纪50年代才提出来,然后到60年代才被证明。下面有个例子,是实际生活中利特尔法则的一种形式。你是否曾经排队,然后试图计算要等多长时间?你可能考虑排队的人数,然后快速算一下服务队列前面的人需要花多长时间。此时,你可以将两个值相乘,产生你在队列时间的估算。若不看队列的长度,你记住新人加入队列的频率,然后乘以服务时间,照样可以知道在队列中或被服务的人平均数。


有很多其它相似的游戏,同样适用于利特尔法则(Little’s law),可以回答其它的问题,如“在队列中等待服务的一个人平均所花时间?”,诸如此类。


同样,我们可以使用利特尔法则(Little’s law)来判定线程池大小。我们只需计算请求到达率和请求处理的平均时间。然后,将上述值放到利特尔法则(Little’s law)就可以算出系统平均请求数。若请求数小于我们线程池的大小,就相应地减小线程池的大小。与之相反,如果请求数大于线程池大小,事情就有点复杂了。


当遇到有更多请求待处理的情况时,我们首先需要评估系统是否有足够的能力支持更大的线程池。准确评估的前提是,我们必须评估哪些资源会限制应用程序的扩展能力。在本文中,我们将假定是CPU,而在实际中可能是其它资源。最简单的情况是,我们有足够的空间增加线程池的大小。若没有的话,你不得不考虑其它选项,如软件调优、增加硬件,或者调优并增加硬件。


工作实例

让我们通过套接字发起和执行的请求典型工作流程来解释上述逻辑。执行过程中,需要获取数据或其他资源,直到结果从客户端返回。在我们的演示中,服务器通过执行一个标准工作单元来模拟负载,该工作单元在CPU敏感任务与解析数据库或其它外部数据源的数据来回切换。演示时,让我们通过计算无理数的小数位如Pi或2的平方根来模拟CPU密集型计算。Thread.sleep常用来模拟外部数据源的调用。 线程池将用于控制服务器上的活跃请求数。


为了监控java.util.concurrent (j.u.c)中线程池的选择情况,我们需要增加仪表盘。现实中,我们可以通过使用切面、ASM或者其它二进制检测技术检测使用j.u.c.ThreadPoolExecutor 而填加仪表盘。基于示例目的,我们没有上述技术,而是使用j.u.c.ThreadPoolExecutor 人工扩展来包含必要的监控。


更多精彩内容,点击阅读原文。

***********************************

本文来自InfoQ微信公众账号:infoqchina

1、回复“今日新闻”,查看今天更新的新闻;

2、回复“今日英文”,查看今天英文站的更新;

3、回复“文章 +关键词”,搜索关键词相关内容;

4、回复“QCon”,了解QCon大会相关信息;

5、回复“活动”,了解最近InfoQ组织的线下沙龙;

6、回复“架构师”,获取《架构师》下载地址;

7、回复“投稿”,了解投稿和加入编辑团队的流程。

***********************************

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 有一天,当我们被科技绑架 互联网产品设计师需要看什么数据? 选择北京华信智原 做高级IT人才 未来安全—探索盛会:一群顶级白帽黑客究竟听了什么? 有些大公司技术弱爆了!