Language agnostic 在模拟内存不足、CPU速度较慢的环境中运行我的应用程序

Language agnostic 在模拟内存不足、CPU速度较慢的环境中运行我的应用程序,language-agnostic,simulation,cpu-speed,low-memory,Language Agnostic,Simulation,Cpu Speed,Low Memory,我想用这种方式对我的应用程序进行压力测试,因为它在一些非常旧的客户机上似乎出现了故障 起初,我读了一些关于QEmu的书,并考虑了硬件仿真,但这似乎是一个遥远的目标。我问了一下,但没有得到太多的反馈 所以我要向你们求助。。。如何进行此类测试?我不确定是否会降低CPU的速度,但如果使用虚拟机(如VMWare),则可以控制实际使用的RAM数量。我在家里用8GB的MBP运行它,我的WinXP虚拟机的内存上限为1.5GB 编辑:我刚刚检查了我的VMWare版本,我可以控制它可以使用的内核数量。这肯定不同于

我想用这种方式对我的应用程序进行压力测试,因为它在一些非常旧的客户机上似乎出现了故障

起初,我读了一些关于QEmu的书,并考虑了硬件仿真,但这似乎是一个遥远的目标。我问了一下,但没有得到太多的反馈


所以我要向你们求助。。。如何进行此类测试?

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

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


由于不完全清楚您的应用程序是否因为旧硬件或旧操作系统而出现故障,VM客户端应该允许您快速测试各种版本的操作系统。几年前,当我试图让.Net 2.0应用程序在Win98上运行时,它对我来说很有用(虽然我不记得它是如何工作的…。

如果你想降低cpu的速度,你可以通过修改一个fork bomb程序来轻松实现这一点

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

     while( x < limit ){

         int pid = fork();
         if( pid == 0 )
                 while( 1 ){}
         else
             x++;
    }
intmain(){
int x=0;
整数极限=10
while(x
}

这会很快降低计算机的速度,您可能需要将限制变量更改为更高的数字。我必须警告你们,尽管这可能是危险的,因为若实现错误,你们可能会对你们的系统进行分叉炸弹攻击,除非你们重新启动它,否则它将毫无用处。如果您不理解此代码的作用,请先阅读。

在POSIX(Unix)系统上,您可以对进程(即程序的执行)应用运行限制。这样做的系统调用被调用,大多数shell允许您使用内置命令行设置它们(普通的POSIX
ulimit
不是很有用)。使用这些,你可以运行一个低限制的程序来模拟一台较小的计算机


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

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

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

在Linux上,正如Raedwald所说,您可以使用
ulimit
。在Windows上,您可以使用
SetProcessWorkingSetSize
系统调用。但这些只是在每个过程的基础上设置了一个限制。事实上,系统的某些部分将在压力环境中开始失效。我建议使用Sysinternals的
testlimit
工具对整个机器施加压力。

跳出框框思考。在您经常使用的应用程序中,哪一个应用程序可以做到这一点? 当然是调试器!但是,如何实现这种行为,以模拟低cpu

你问题的秘密是
asm\u int 3
。这是程序集“pause me”命令,从附加的调试器发送到正在调试的应用程序

更多关于int 3的信息

您可以使用“源代码”工具连续暂停/恢复流程。您可以添加一个间隔,并使该工具暂停应用程序一段时间

模拟的cpu速度应该是:(YourCPU/Interval)-0.00001%,因为信号和其他进程在您的机器上运行,但它应该做到这一点

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

比如:
MyClass*foo=AllocWrapper(新的MyClass(参数或其他什么))

然后,您可以让AllocRapper为您分配/释放内存。

尝试cpulimit,大多数发行版都包含它(Ubuntu有)

请参见
是否声称它与VMware vSphere虚拟机监控程序一样免费™ (ESXi)允许您在设置虚拟机内存大小的基础上选择虚拟CPU速度。

其中的一些技巧涉及降低CPU速度,RAM如何?我认为我最好的选择是自己组装一台非常糟糕的机器UNIX的大问题:看看linux中是否有一个名为cpulimit的程序通过进程限制速度-我对ulimit不太熟悉,但也许这可以让生活更轻松。。。不确定您执行了多少并发编程,但许多竞争条件完全取决于您执行它们的硬件的速度。