2010-08-13 66 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