我從遠程服務器獲取圖像對象,然後嘗試使用它們的API將它們上載到Rackspace的雲文件。想知道a)如何讓這個過程更高效,b)假設我需要購買更多的內存,那麼完成這項任務的RAM數量是多少(目前的開發服務器只有512MB)。Linux內存管理和大文件
在執行腳本我:
- 查詢我的本地數據庫的集ID(約1萬)
- 每個ID,查詢遠程服務器,其中10〜20之間返回圖像對象,每個圖像是25-30k
- 基於我的分區ID創建一個雲文件容器
- 對於從遠程服務器返回的每個圖像對象,在我的容器中創建一個圖像對象,並寫入圖像數據到那個對象 在本地數據庫添加了圖像的日期時間210
- 更新行
此執行相對較快的一個小集ID,但是100(所以700-1k圖像)可以採取5-10分鐘,和什麼比這更顯得無限期地運行。曾嘗試以下,但收效甚微:使用PHP的set_timeout殺幾分鐘後腳本,盤算,會清除內存分配給執行,讓我拿起我離開,並通過工作
- 設置較小的部分。然而,這個錯誤永遠不會拋出
- 取消設置上傳後包含圖像對象的數組鍵(不是just the reference inside the loop)。
PHP的memory_limit設置爲128MB,並運行'tops'命令我看到用戶'www-data'消耗了16%的內存資源。但是,不再出現在用戶列表中,但我仍然看到:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2400 mysql 20 0 161m 8220 2808 S 0 1.6 11:12.69 mysqld
...但時間+從不改變。我看到,仍然有1下任務運行,但這些值不會改變:
Mem: 508272k total, 250616k used, 257656k free, 4340k buffers
道歉冗長的後 - 不完全知道什麼(如果有的話那)是有用的。這不是我的專業領域,所以一點點抓住吸管。在此先感謝您的幫助。
你不能一個接一個地處理一個圖像嗎? – rik 2011-01-25 00:46:32
這聽起來像是你不小心將代碼寫成某種N^2算法 - 發佈一些代碼。 – caf 2011-01-25 04:19:17