8

我想以这种方式对我的应用程序进行压力测试,因为它似乎在一些非常旧的客户端机器上失败了。

起初我阅读了一些关于 QEmu 的内容并考虑了硬件仿真,但这似乎是一个漫长的过程。我问了superuser,但没有得到太多反馈(还)。

所以我转向你们......你们如何进行这种测试?

4

9 回答 9

7

我不确定是否会降低 CPU 的速度,但如果您使用虚拟机(如 VMWare),则可以控制实际使用的 RAM 量。我在家里用 8GB 的​​ MBP 运行它,我的 WinXP VM 的内存上限为 1.5GB。

编辑:我刚刚检查了我的 VMWare 版本,我可以控制它可以使用的内核数量。它绝对与较慢的 CPU 不同,但它可能会为您突出一些问题。

由于不完全清楚您的应用程序是否由于旧硬件或旧操作系统而失败,VM 客户端应该允许您相当快速地测试各种版本的操作系统。几年前,当我试图让一个 .Net 2.0 应用程序在 Win98 上运行时,它派上了用场(虽然我不记得我是如何让它工作的,但它可以完成......)。

于 2011-07-22T19:48:56.623 回答
3

Virtual Box 是一个类似于 VMWare 的免费虚拟机。它还具有减少可用内存的能力。它可以限制可用的 CPU 数量,但不能限制这些 CPU 的速度。

于 2011-07-30T04:13:37.360 回答
3

试试cpulimit,大多数发行版都包含它(Ubuntu 有)http://www.digipedia.pl/man/doc/view/cpulimit.1

于 2011-08-01T12:10:55.397 回答
2

如果你想降低你的 CPU 的速度,你可以通过修改一个 fork 炸弹程序来轻松地做到这一点

int main(){
     int x=0;
     int limit = 10

     while( x < limit ){

         int pid = fork();
         if( pid == 0 )
                 while( 1 ){}
         else
             x++;
    }

}

这将很快降低您的计算机速度,您可能希望将限制变量更改为更高的数字。尽管这可能很危险,但我必须警告您,因为如果实施错误,您可能会分叉炸弹您的系统,使其无用,除非您重新启动它。如果您不了解此代码的作用,请先阅读此内容。

于 2011-07-27T02:27:17.207 回答
2

在 POSIX (Unix) 系统上,您可以将运行限制应用于进程(即程序的执行)。执行此操作的系统调用称为setrlimit(),并且大多数 shell 允许您使用ulimit内置命令从命令行设置它们(普通的 POSIXulimit不是很有用)。使用这些,您可以运行具有低限制的程序来模拟较小的计算机。

POSIX 系统还提供了nice以较低 CPU 优先级运行程序的命令,如果您还确保同时运行另一个 CPU 密集型程序,则可以模拟较慢的 CPU。

于 2011-07-29T12:26:01.407 回答
1

我认为 cpu速度不太可能会出现很多错误。另一方面,不同的 cpu功能更可能很重要。许多 VM 实现提供了打开和关闭某些 cpu 功能的方法;qemu 尤其允许对 CPU 可用的内容进行高级别的控制。

于 2011-07-31T16:03:23.623 回答
1

创造性思考。您经常使用的应用程序中的哪个应用程序可以做到这一点?当然是调试器!但是,你如何实现这样的行为来模拟低 CPU 呢?

你的问题的秘密是asm _int 3。这是从附加调试器发送到您正在调试的应用程序的程序集“暂停我”命令。

更多关于这个问题的 int 3 。

您可以使用工具中的代码来连续暂停/恢复您的流程。您可以添加一个间隔并让该工具暂停您的应用程序一段时间。

由于信号和其他进程在您的机器上运行,仿真 CPU 速度将是:(YourCPU/Interval) -0.00001%,但它应该可以解决问题。

关于低内存模拟:您可以创建一个为应用程序分配内存的包装类,并将每个分配替换为对该类的调用。在应用程序无法分配更多内存之前,您将能够准确设置应用程序可以使用的内存量。

例如:MyClass* foo = AllocWrapper(new MyClass(arguments or whatever)); 然后你可以让 AllocWrapper 为你分配/释放内存。

于 2011-07-31T23:25:15.257 回答
0

在 Linux 上,你可以ulimit像 Raedwald 所说的那样使用。在 Windows 上,您可以使用SetProcessWorkingSetSize系统调用。但是这些只是在每个进程的基础上设置了一个限制。实际上,系统的某些部分将在压力环境中开始出现故障。我建议使用 Sysinternals 的testlimit工具来给整台机器施加压力。

于 2011-07-31T21:37:45.803 回答
0

请参阅https://serverfault.com/questions/36309/throttle-down-cpu-speed-of-vmware-image 是否声称免费 VMware vSphere Hypervisor™ (ESXi) 允许您选择虚拟设置虚拟机内存大小的 CPU 速度。

于 2011-08-01T12:45:43.437 回答