我正在使用 LoadRunner 对 J2EE 应用程序进行压力测试。
我有:1 台 MySQL 数据库服务器和 1 台 JBoss 应用程序服务器。每个都是一个 16 核 (1.8GHz)/8GB 内存盒。
连接池:数据库服务器在 my.cnf
中使用 max_connections = 100
。应用服务器也在 mysql-ds.xml
和 中使用
.min-pool-size
和 max-pool-size
= 100 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
最佳答案
您不仅在使用以太网,假设您正在编写 Web 服务,您正在通过位于 TCP 套接字之上的 HTTP(S) 进行通信,这是一种可靠、有序的协议(protocol),具有可靠协议(protocol)固有的内置往返。套接字位于 IP 之上,如果您的 IP 数据包与您的以太网帧不一致,您将永远无法充分利用您的网络。即使您使用 UDP,调整数据报以适合您的以太网帧,在您的服务器上有 100 个负载生成器和 100 个 1Gbit 以太网卡,它们仍然会在中断上运行,并且您可以进一步进行时间多路复用堆栈。
这里的每一层都可以从交易的角度来思考,但是一下子把每一层都思考起来是没有意义的。如果您正在编写在 OSI model 的第 7 级运行的 SOAP 应用程序,那么这是您的域。就您而言,您的事务是 SOAP HTTP(S) 请求,它们是并行的并且需要不同的时间才能完成。
现在,真正开始回答您的问题:这取决于您的测试脚本、它们使用的内存量,甚至是您的应用程序响应的速度。 200 个或更多的虚拟用户应该没问题,但找到你的瓶颈是一个科学探究的问题。做实验,找到它们,扩大它们,重复直到你满意为止。从您的负载生成器和被测系统收集系统指标,并与操作系统提供商的建议进行比较,查看垂死系统和工作系统之间的区别,寻找达到稳定状态的图表等。
关于concurrency - 关于(类似工具)LoadRunner 的概念性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4813750/