我想以这种方式对我的应用程序进行压力测试,因为它似乎在一些非常老的客户机中失败了。
起初我读了一些关于QEmu的内容并考虑了硬件仿真,但这似乎是一个很长的镜头。我在superuser询问,但是还没有得到太多反馈。
所以我转向你们......你们这种测试怎么样?
答案 0 :(得分:7)
我不确定是否会降低CPU速度,但如果使用虚拟机(如VMWare),则可以控制实际使用的RAM数量。我在家里的MBP上以8GB运行它,而我的WinXP VM上限为1.5 GB RAM。
编辑:我刚检查了我的版本的VMWare,我可以控制它可以使用的核心数量。它绝对不是一个较慢的CPU,但它可能会突出一些问题。
由于旧硬件或旧操作系统导致您的应用程序失败并不完全清楚,因此VM客户端应该允许您相当快速地测试各种版本的操作系统。几年前,当我试图让一个.Net 2.0应用程序在Win98上运行时它对我来说很方便(它可以可以完成虽然我不记得我是如何工作的... )。
答案 1 :(得分:3)
Virtual Box是一个类似于VMWare的免费虚拟机。它还具有减少可用内存的能力。它可以限制可用的CPU数量,但不能限制这些CPU的速度。
答案 2 :(得分:2)
在POSIX(Unix)系统上,您可以对进程应用运行限制(即执行程序)。执行此操作的系统调用称为setrlimit()
,大多数shell允许您使用ulimit
内置命令从命令行设置它们(普通POSIX ulimit
不是很有用)。使用这些可以运行具有低限制的程序来模拟较小的计算机。
POSIX系统还提供nice
命令,用于以较低的CPU优先级运行程序,如果您还确保同时运行另一个CPU密集型程序,则可以模拟较慢的CPU。
答案 3 :(得分:2)
尝试 cpulimit ,大多数发行版都包含它(Ubuntu)http://www.digipedia.pl/man/doc/view/cpulimit.1
答案 4 :(得分:1)
如果你想降低cpu的速度,可以通过修改fork炸弹程序轻松完成这项工作
int main(){
int x=0;
int limit = 10
while( x < limit ){
int pid = fork();
if( pid == 0 )
while( 1 ){}
else
x++;
}
}
这会很快降低您的计算机速度,您可能希望将限制变量更改为更高的数字。我必须警告你,虽然这可能是危险的,因为如果实施错误你可能会炸毁你的系统,除非你重新启动它,否则它会无用。如果您不理解此代码将执行的操作,请先阅读this。
答案 5 :(得分:1)
我认为cpu speed 不太可能会出现很多错误;另一方面,不同cpu 功能的可能性更大。许多VM实现提供了切换某些cpu功能的方法; qemu特别允许对CPU可用的内容进行高级控制。
答案 6 :(得分:1)
在盒子外面思考。你经常使用的那个应用程序是做什么的? 当然是调试器!但是,你怎么能实现这样的行为,模仿一个低CPU呢?
您的问题的秘密是asm _int 3
。这是程序集“暂停我”命令,它从附加的调试器发送到您正在调试的应用程序。
有关此question的int 3的更多信息。
您可以使用this工具中的代码连续暂停/恢复您的流程。您可以添加间隔并使该工具暂停您的应用程序一段时间。
模拟cpu速度将是:( YourCPU / Interval)-0.00001%,因为你的机器上正在运行信令和其他进程,但它应该可以解决问题。
关于低内存仿真: 您可以创建一个包装器类,为应用程序分配内存,并通过调用此类来替换每个分配。您可以准确设置应用程序在无法分配更多内存之前可以使用的内存量。
例如:MyClass* foo = AllocWrapper(new MyClass(arguments or whatever));
然后你可以让AllocWrapper为你分配/释放内存。
答案 7 :(得分:0)
在Linux上,你可以使用ulimit
,如Raedwald所说。在Windows上,您可以使用SetProcessWorkingSetSize
系统调用。但这些仅限于每个过程的基础。实际上,系统的某些部分将在压力环境中开始失败。我建议使用Sysinternals的testlimit
工具来强调整个机器。
答案 8 :(得分:0)
参见https://serverfault.com/questions/36309/throttle-down-cpu-speed-of-vmware-image 如果它被声称是免费的啤酒VMware vSphere Hypervisor™(ESXi)允许您在设置虚拟机的内存大小之上选择虚拟CPU速度。