Concurrency 关于(类似工具的)LoadRunner的概念问题

Concurrency 关于(类似工具的)LoadRunner的概念问题,concurrency,parallel-processing,conceptual,loadrunner,Concurrency,Parallel Processing,Conceptual,Loadrunner,我正在使用LoadRunner对J2EE应用程序进行压力测试 我有:1台MySQL数据库服务器,1台JBoss应用服务器。每个都是一个16芯(1.8GHz)/8GB RAM盒 连接池:数据库服务器正在my.cnf中使用max\u connections=100。应用服务器也在mysql-ds.xml和mysql-ro-ds.xml中使用min-pool-size和max-pool-size=100 我正在模拟一台“普通”单核PC上100个虚拟用户的负载。这是一个1.8GHz/1GB的RAM盒 该

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

我有:1台MySQL数据库服务器,1台JBoss应用服务器。每个都是一个16芯(1.8GHz)/8GB RAM盒

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

我正在模拟一台“普通”单核PC上100个虚拟用户的负载。这是一个1.8GHz/1GB的RAM盒

该应用程序部署并在100 Mbps以太网LAN上使用

我在压力测试脚本的部分中使用了集合点来模拟现实世界中的并行(而不是并发)使用

问题:

这台产生负载的PC上的CPU利用率永远不会达到100%,我相信,内存也是可用的。因此,我可以尝试在这台电脑上添加更多的虚拟用户。但在此之前,我想了解关于并发性/并行性和硬件的1到2个基本知识:

  • 如果只有一个单芯负载生成器,我真的可以模拟100个用户的并行负载吗(每个用户在现实生活中使用专用PC操作)?我可能不正确的理解是,单核PC上的100个线程将并发运行(即交错运行),但不会并行运行。。。这意味着,我无法从一台单核PC上模拟100个并行用户(在100台PC上)的真实负载!对吗

  • 网络带宽对用户并行性的限制:即使假设我有一台100核的负载生成PC(或者,假设我的局域网上有100台单核PC),以太网的工作方式不会只允许用户在连接负载生成PC和服务器的以太网线上并发,而不允许用户并行。事实上,这一问题(缺乏用户并行性)甚至在实际应用程序使用中(每个用户1台PC)也会持续存在,因为通过多核机箱到达应用程序服务器的用户请求只能交错到达。也就是说,如果每个用户在多核服务器和服务器之间都有自己的专用物理层连接,那么多核服务器能够并行处理用户请求的唯一时间就是

  • 假设并行性是不可实现的(由于上述“问题”),并且只有次优的并发性是可能的,那么我将如何选择硬件和网络规范来使用我的模拟呢。例如,(a)我的负载生成PC应该有多强大?(b) 每个PC要创建多少虚拟用户?(c) LAN上的每台PC是否必须通过交换机连接到服务器(以避免)广播流量,如果使用集线器而不是交换机,则会发生广播流量

  • 提前感谢,


    /对我来说,你似乎有点想得太多了。您的服务器速度快且新颖,非常适合处理大量客户端。你的瓶颈(如果你有)要么是你的应用程序本身,要么是你的100m网络

    一,二。您正在测试服务器,而不是客户端。在这种情况下,客户机所做的一切就是发送和接收数据——客户机处理没有任何开销(呈现HTML、解码图像、执行javascript等等)。最近的unicore机器很容易使千兆链路饱和;应安装100 mbit管道

    此外,较新/更高级的以太网卡中的处理器从CPU上卸下了大量工作,因此您不必期望CPU受到影响


    三,。不要使用集线器。你可以在craigslist上花5美元买到一个1亿美元的集线器,这是有原因的

    如果不更好地了解您的应用程序,很难回答其中的一些问题,但一般来说,您是正确的,要实现服务器的“真正”压力测试,最好有100个内核(使用100个并发用户的目标),即100台PC。然而,各种各样的问题可能会表明这是一个不需要动脑筋的问题

    我有一个几年前构建的通信引擎(.NET/C#),它使用异步套接字-需要尽可能快的速度,所以我们不得不忘记在套接字上添加任何附加层,如HTTP或任何其他更高的抽象。该服务器运行在具有4GB内存的四核3.0GHz计算机上,可轻松处理约2200个并发连接的流量。有一个Gb交换机,所有PC都有Gb NIC。即使所有PC机同时通信,在该服务器上也很少看到处理器负载超过30%。我认为这是因为“整个系统”中固有的所有延迟

    我们有一个新的需求,即支持50000个并发用户,我目前正在实现这个需求。该服务器具有双四核2.8GHz处理器、64位操作系统和12GB内存。我们的模型显示,这台计算机足以处理5万用户

    我提到的网络延迟(别忘了CAT 3 vs.CAT 5 vs.CAT 6问题)、数据库连接、存储的数据类型和平均记录大小、参考问题、背板和总线速度、硬盘驱动器速度和大小等问题在“总体上”降低平台速度方面起着与任何事情一样的作用我猜你的系统可能有500、750、1000甚至更多的用户

    过去的目标是永远不要让线程阻塞太久。。。新的目标是让所有内核保持忙碌

    我有另一个应用程序可以下载和分析每天约7800个URL的内容。在双四核3.0GHz(Windows Ultimate 7 64位版)上运行,具有24GB的RAM,该过程通常需要约28分钟才能完成。只需将循环切换到Parallel.ForEach()即可,整个过程现在只需<5分钟。我们所看到的处理器负载始终小于20%,最大网络负载仅为14%(Gb上的第5类)