来自 Tom Alcott 的评论
欲言又止的 WebSphere Application Server 的相关问题 级别: 中级 Tom AlcottIT 咨询专家, IBM Software Group, Worldwide Sales2005 年 8 月 1 ..
欲言又止的 WebSphere Application Server 的相关问题
级别: 中级
Tom Alcott
IT 咨询专家, IBM Software Group, Worldwide Sales
2005 年 8 月 1 日
对有关 IBM® WebSphere® Application Server 的一些常见问题的明确(并不那么确定)的回答。
常见问题
既然您来到这里阅读这篇文章,我就得坦承我有点“挂羊头,买狗肉”之嫌。本文并不是讨论人们不敢问的有关 WebSphere Application Server 的问题(坦白地说,您不敢问的问题没有那么多),而是我想抓住这个机会对可能时常被问起的一些问题进行阐述。
我向 Douglas Adams 致歉,在涉及这些问题时,我宁愿回答“42”(译者注:在 Douglas Adams 所著《银河系漫游指南》中,42 是关于生命、宇宙以及所有一切的答案),或者是除“视情况而定”之外的几乎任何内容,但您即将明白,对这些问题最准确的回答通常是:视情况而定(应用程序、基础结构、性能或可伸缩性要求等)。不过,这表明我确实是在尽力向您提供一些指导,以帮助您确定符合您具体情况的最佳回答,此外,我还对一些常见问题进行了明确的回答。好了,我们开始吧。
问:运行应用程序所需 CPU 的最小数量和最大数量是多少?
答:从我作为 IBM 红皮书 WebSphere Scalability: WLM and Clustering Using WebSphere Application Server Advanced Edition 的合著小组成员到现在,已有 5 年了。在该书中,我撰写了一个标题为“How Many Clones”(克隆的数量)的讨论,其中,我试图解决运行我的应用程序需要多少应用服务器?这一问题。CPU 问题就是我现在经常遇到的这一类问题,实际上,这个问题也是采用视情况而定 的方式进行回答的典型问题之一,因此我们先了解一下它取决于哪些因素。
现代操作系统通常在进程调度方面表现得很出色,从而最大程度减少了上下文切换。上下文切换是在操作系统调度程序用另一个进程替换 CPU 上正在运行的一个进程时发生的,而且是各种因素作用的结果,例如作业(或进程)优先级、是否等待其他资源(如 I/O)、进程是否将用完所有分配给它的 CPU 周期(时间片)等。但是,在执行上下文切换时,虽然现代操作系统表现很“出色”,却并非“完美无缺”,因为进程在每次进行上下文切换时,它都将停止运行——这将导致吞吐量出现延迟(和性能下降)。如果我们确实不希望出现任何上下文切换,则系统中的 CPU 数要大于该系统中运行的进程数。而这完全不切合实际,因为在一个系统中安装这么多的 CPU,几乎没有任何组织能负担得起,而且也没有必要,因为大多数进程都不要求对 CPU 进行持续访问。因此,我们应该转而研究一些最重要的进程,这些进程在本文中即指系统中应用服务器运行时所使用的JVM。
起初,我们假定每个应用服务器 JVM 应该采用至少一个 CPU;这样就有可能最大程度减少发生上下文切换的次数——至少就将用完时间片这一因素而言是如此(如上所述,导致上下文切换还有其他因素)。但是除非您在运行所有服务器时占用了全部 CPU 资源,否则,在应用程序请求(该请求随即被转换为对操作系统资源的请求)到达应用服务器时,很可能存在可用的 CPU 周期。因此,运行的应用服务器数量有可能大于 CPU 数量。
不过,如果要获得可以在环境中运行的服务器的准确数量,则还得采用视情况而定 之类的方式进行回答。这是因为该数量实际上取决于负荷、应用程序、吞吐量和响应时间要求等,确定这个准确数量的唯一方法是在环境中运行测试。
在开发环境(其中负荷可能是每个应用服务器只有一个用户)中,您会期望每个 CPU 运行的应用服务器实例数量是生产环境中的应用服务器数量的数倍,这种想法很合理。尽管如此,也很难确定具体的应用服务器数量,虽然为所有应用服务器添加足够的内存也是个相当重要的因素。根据经验,所有 WebSphere Application Server JVM 进程加在一起的大小不应超过服务器上未使用物理内存的 80%。在计算该数字可以达到的最大数目时,您必须考虑的不仅有最大堆大小,而且还有除最大堆大小之外的 Java™ 字节码解释器的进程大小(这个大小在操作系统进程表中列出)。字节码解释器向进程表大约添加 65MB(除了最大堆大小 128MB 之外),并随最大堆大小的增加而增加。
在解决了 CPU 的最小数量后,您可能要问,最大 CPU 数量是多少? 如果您了解到回答也是视情况而定,那不必感到惊讶。一个非常高效且经过精心编写的应用程序只通过一个应用服务器进程即可使用多个 CPU。事实上,WebSphere Performance Lab 在运行涉及 Trade 性能基准时,使用了 12 个 CPU(有时更多)。而期望大多数应用程序具有这种伸缩性可能是不合理的,但大多数经过精心编写的应用程序都应能通过应用服务器使用多个 CPU(实际上,只使用一个 CPU 通常表示存在应用程序瓶颈)。在任何情况下,我 5 年前执笔的 WebSphere Scalability 一书讲述的确定最佳克隆(或应用服务器实例)数的指导原则仍然适用:
一般情况下,您应调整一个应用服务器的实例来观察吞吐量和性能,然后逐步增加克隆数量,在添加每个克隆时,对性能和吞吐量进行测试。通过这种方式,可以确定为环境提供最佳吞吐量和性能所需的克隆数。通常,在 CPU 利用率达到稍微低于 75% 时,可以通过另添加克隆来提高吞吐量。
[1] [2] [3] 下一页
|