concurrency - 关于(类似工具)LoadRunner 的概念性问题

标签 concurrency parallel-processing conceptual loadrunner

我正在使用 LoadRunner 对 J2EE 应用程序进行压力测试。

我有:1 台 MySQL 数据库服务器和 1 台 JBoss 应用程序服务器。每个都是一个 16 核 (1.8GHz)/8GB 内存盒。

连接池:数据库服务器在 my.cnf 中使用 max_connections = 100。应用服务器也在 mysql-ds.xml 中使用 min-pool-sizemax-pool-size = 100 mysql-ro-ds.xml.

我正在模拟来自“常规”单核 PC 的 100 个虚拟用户的负载。这是一个 1.8GHz/1GB 内存盒。

应用程序在 100 Mbps 以太网 LAN 上部署和使用。

我在我的压力测试脚本的部分使用会合点来模拟真实世界的并行(并且不是并发)使用。

问题:

这台产生负载的 PC 上的 CPU 利用率从未达到 100%,我相信内存也可用。所以,我可以尝试在这台 PC 上添加更多虚拟用户。但在我这样做之前,我想了解一两个关于并发/并行和硬件的基础知识:

  1. 只有像这个这样的单核负载生成器,我能否真正模拟 100 个用户的并行负载(每个用户在现实生活中使用专用 PC 操作) ?我可能不正确的理解是,单核 PC 上的 100 个线程将同时运行(即交错)但不是并行...这意味着,我无法真正模拟真实世界的负载100 个并行用户(在 100 台 PC 上)来自一台单核 PC!对吗?

  2. 用户并行度的网络带宽限制:即使假设我有一台 100 核负载生成 PC(或者,假设我的 LAN 上有 100 台单核 PC),也不会这样以太网工作只允许并发,而不是用户在连接负载生成 PC 和服务器的以太网线上的并行性。事实上,这个问题(缺乏用户并行性)似乎甚至在现实世界的应用程序使用中(每个用户 1 台 PC)仍然存在,因为用户请求到达多核盒子上的应用程序服务器只能交错到达.也就是说,多核服务器唯一可以并行处理用户请求的情况是,如果每个用户在它和服务器之间都有自己的专用物理层连接!!

  3. 假设无法实现并行性(由于上述“问题”)并且只有次优的并发性是可能的,我将如何选择硬件和网络规范来使用我的模拟。例如,(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/

相关文章:

api - 休息 API : Is it a really bad practice to create custom HTTP response codes?

python - python `with`语句用法的其他内置或实际示例?

java - java中的ManagedExecutorService和ExecutorService有什么区别

java synchronized on 方法不工作?

r - 使用并行包将具有不同参数的函数调用发送到 R 中的不同处理器

history - 为什么要在 servlet、applet、cmdlet 中添加单词?

java - 寻找多线程死锁的原因?

java - 延迟对对象的调用而不强制当前线程 hibernate

javascript - 优化用 TypeScript 编写的文件内容解析器类

python - 多个 PyTorch 网络在不同 CPU 上并行运行