我正在使用 LoadRunner 对 J2EE 应用程序进行压力测试。
我有:1 个 MySQL DB 服务器和 1 个 JBoss App 服务器。每个都是 16 核 (1.8GHz) / 8GB RAM 盒。
连接池:数据库服务器正在使用max_connections = 100
. my.cnf
App Server 也在使用min-pool-size
and max-pool-size
= 100 in mysql-ds.xml
and mysql-ro-ds.xml
。
我正在模拟来自“常规”单核 PC 的 100 个虚拟用户的负载。这是一个 1.8GHz / 1GB 内存盒。
该应用程序在 100 Mbps 以太网 LAN 上部署和使用。
我在我的压力测试脚本的部分中使用集合点来模拟现实世界的并行(而不是并发)使用。
问题:
这台产生负载的 PC 上的 CPU 利用率永远不会达到 100%,而且我相信内存也是可用的。因此,我可以尝试在这台 PC 上添加更多虚拟用户。但在此之前,我想了解一两个关于并发/并行性和硬件的基础知识:
只有一个单核负载生成器,我真的可以模拟 100 个用户的并行负载(每个用户在现实生活中使用专用 PC 操作)吗?我可能不正确的理解是,单核 PC 上的 100 个线程将同时运行(即交错)但不是并行运行......这意味着,我无法真正模拟 100 个并行用户的实际负载(在 100 台 PC 上) ) 只需一台单核 PC!那是对的吗?
用户并行性的网络带宽限制:即使假设我有一台 100 核负载生成 PC(或者,假设我的 LAN 上有 100 台单核 PC),以太网的工作方式也不会只允许并发和不是用户在将负载生成 PC 连接到服务器的以太网线上的并行性。事实上,这个问题(缺乏用户并行性)似乎即使在实际应用程序使用(每个用户 1 台 PC)中也会持续存在,因为用户请求到达多核机器上的应用程序服务器只能交错到达. 也就是说,多核服务器唯一可以并行处理用户请求的情况是每个用户在它和服务器之间都有自己的专用物理层连接!
假设无法实现并行性(由于上述“问题”)并且只有称为并发的下一个最好的事情是可能的,我将如何选择硬件和网络规范来使用我的模拟。例如,(a) 我的负载生成 PC 应该有多强大?(b) 每台 PC 需要创建多少虚拟用户?(c) LAN 上的每台 PC 是否必须通过交换机连接到服务器(以避免)如果使用集线器而不是交换机会发生广播流量?
提前致谢,
/HS