如何定义程序的需求

7
有没有一种简单、便宜(不需要在多个硬件配置上测试程序)且无痛苦的方法来定义运行自己程序所需的硬件要求(如CPU、RAM内存等)?应该怎么做?
我编写了一个相当耗资源的Java程序,不知道如何定义足够流畅地运行此应用程序的硬件规格。

它是一个运行多个任务的JVM,还是几个不同的JVM?它们是否一直在运行,还是由操作系统触发(例如cron),并在完成后停止运行? - Thierry
在这种特定情况下,我有一个在单个JVM上具有多个任务的程序,它应该永久工作,但实际上我正在寻找一些通用解决方案,甚至不仅适用于Java程序。 - Marcon
1个回答

4
不,我认为没有任何一种通用方法可以确定最低要求,而不涉及在某些指定的参考硬件上进行测试。您可能可以通过使用某种虚拟机来找到一些限制 - 修改某些VM的参数比修改硬件更容易。但是主机和VM之间的交互会产生影响你的结果的制品。此外,在不了解许多用例的情况下,很难普遍定义“可接受性能”的标准。许多程序将使用更多资源(如果可用),但也可以使用更少的资源。例如,考虑使用基于CPU核心数的大小的线程池的程序。在使用更多内核的CPU上运行时,可以并行处理更多工作,但同时由于线程创建、同步和聚合结果的开销增加,产生的开销也会增加。这些效果在CPU数量方面是非线性的,并且很大程度上取决于实际的程序和数据。同样,减少可用内存的影响范围从可能为某些输入引发OutOfMemory-Errors(但对于其他输入可能不是如此)到只是更频繁地运行GC(而的影响取决于GC策略,范围从可见的冻结到稍微多一点的CPU负载)。所有这些都没有考虑到程序通常不会孤立地存在 - 它们在与其他消耗资源的任务并行运行的操作系统上运行。

我正在寻找一些通用的解决方案。有一些方法可以定义程序使用多少处理器计算能力和内存。因此,应该有一种方法可以基于它们来定义最小(或推荐)的硬件规格,我正在寻找一些示例。甚至不必基于Java。 - Marcon
许多程序会利用更多的资源,如果它们可用的话,但也可以使用较少的资源。此外,所需的资源很大程度上取决于负载 - 很多时候它会随着输入的大小和频率或其他输入数据的某些质量而按某种方式(通常是非线性地)进行缩放。 - Hulk
2
基本上,你只能测试和测量 - 你不能轻易地预测在不同硬件上的性能。 - Hulk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接