2010-08-13 33 views
0

我有一个脚本,当运行消耗17mb的内存(记录使用memory_get_peak_usage())。我的记忆使用假设:它是否正确?

脚本每天运行100万次。 每日总内存消耗:17百万MB

每天86400秒。

八万六千四分之一千七万= 196.76

假设:运行该脚本将100万次,每天至少需要196.76专用内存。

我的假设是否正确?

+3

你知道,我的假设是,如果我的脚本每分钟运行16次,这意味着自16盎司= 1品脱,60 * 1品脱= 7.5加仑/小时。 7.5/3.14159265 = 2.3873。因此,每分钟运行我的脚本16次会使我消耗2.38杯牛奶。 JK,我是个恶作剧。 – mattbasta 2010-08-13 06:26:44

+0

17MB是一个PHP脚本恕我直言。 apache for php的默认内存限制为每个进程8mb。显然,人们可以改变它,但它会告诉你关于你的17mb的东西,不是吗? – naugtur 2010-08-13 06:36:21

+0

@naugtur:在将文件提供给用户之前压缩文件时可能可以达到它? – Im0rtality 2010-08-13 06:39:59

回答

2

如果脚本运行在同一时间 100万张,那么你会得到1700万MB,但它释放的内存来完成后,你不添加使用量总和。

您需要知道同时运行多少副本并将该数目乘以17 MB。这将是最大的内存使用量。

+0

是有意义的!我一直在看这个问题完全是错误的。它真的只关乎有多少人正在同时下载。我会记住这一点,谢谢! – reefine 2010-08-13 06:41:49

0

是的,但如果它被同时调用多次呢?你有多个线程同时运行。

编辑:另外,为什么该脚本运行一百万次/天? (除非你有一个巨大的网站)

0

我不认为这种计算将给出正确的结果,因为你还需要考虑其他因素,如 -

  1. 脚本运行多久。
  2. 一次运行的脚本数量是多少。
  3. 在整个时间内分配脚本的调用。

而在你的计算什么是除以86400秒?为什么不是几小时或几毫秒?对我来说,这个计算似乎毫无意义。

+0

回应你的问题我试图计算在任何给定的时间段内,我需要什么类型的资源(内存)来提供非常大量的请求(因此我使用秒的原因) – reefine 2010-08-13 06:30:41

1

不完全正确;你的脚本的第一百次被执行,它可能会适合所有的内存。所以,前两分钟左右的时间可能会按预期进行。但是,一旦将计算机推入交换位置,计算机将花费太多时间来处理交换,以致接下来的999,800次执行可能会大大低于您的预期。而且,由于它们都开始争夺磁盘带宽,它运行的时间越长,情况就会越糟糕。

我也不确定使用php memory_get_peak_usage()函数;它是程序所需内存的“内部”视图,而不是从操作系统的角度来看。这可能会更糟糕。 (也许解释者需要20兆RSS才能运行一个hello-world。也许不是)

我不确定什么是最适合您的应用程序的方式:也许它可能是一个单一的长寿命进程,它处理发布的事件并返回结果。这可能能够在更少的内存空间下运行。也许结果实际上并不会每0.0005秒改变一次,而且您可以将结果缓存一秒钟,并且每天只运行86400次。或者,也许你需要购买更多的机器。:)

+0

很好说,并感谢您的信息。我将在云基础架构上托管应用程序,因此可伸缩性不会成为问题,但提前知道这些变量并不会造成什么影响:P – reefine 2010-08-13 06:37:05