【发布时间】:2009-05-06 10:19:36
【问题描述】:
我有一个以不同方式处理客户端请求的服务器应用程序。
我想知道可以以最小的延迟为多少用户提供服务,所以我制作了一个模拟用户请求的小型压力测试应用程序;同时另一个应用程序监视内存/CPU 利用率。
压力测试工具每秒创建一个线程,每个线程都代表一个用户。 如果压力测试由于资源不足而无法创建新线程,则会启动压力测试工具的新实例。
问题是,每个线程都会将每个请求的延迟和当前运行的线程数写入文件,因此这会导致 I/O 问题,因为几分钟后您还有很多线程需要写入磁盘这种行为在真实场景中不会存在,因为客户端只请求数据。
当我想测量每个用户的最大延迟时,如何解决这个问题?
PS:
有些答案说要在不同的机器上运行以考虑网络延迟,这将是我的最后一次压力测试,目前我正在同一台服务器上进行此测试,以找出以最小延迟支持多少用户。
【问题讨论】:
-
在同一台机器上运行测试,你不会发现最大用户数和最小延迟,因为测试程序带走了时间片和核心(线程化它可能分布在所有核心上),从而给你一个较低的数字,然后实际上是正确的。
-
这意味着它给了我下限而不是上限?
-
它会给您一些任意数字,该数字将低于理论上可能的数字,因为测试程序会从服务器应用程序中夺走电源。再一次,其他限制因素,例如网络上可能的连接数或网络延迟都没有计算。在第二步中执行此操作很好,但请考虑在另一台 PC 上启动测试程序。
标签: .net benchmarking stress-testing