2012-01-02 108 views
7

基本上我試圖保持內存在我的Nginx服務器下使用一定的數量,都因爲我瘋了(根據我的朋友)&我想省錢。不過,我擔心ImageMagick可能會把它推到邊緣。限制ImageMagick內存使用

我使用-limit area 20MiB,我也試着-limit memory 15MiB -limit map 15MiB但檢查過程中(因爲它運行)通過top -c (with Shift-M)ps aux當它顯示它使用,有時,相當多的內存比我的極限已設置。要給出數字,它可能使用35MB或40MB,而不是我期望的20MB/30MB。我不會爲2MB或3MB而煩惱,但這是相當大的抵消。

我被告知額外的內存可能是ImageMagick的開銷,因爲它加載瞭解釋器等,但我對Unix程序並不是很熟悉,所以在該部門中沒有任何線索。

如果任何人都可以解釋爲什麼會發生這種情況,那會很好。如果這是正常的事情,太好了。我只是調整一些事情,考慮到它可能會使用我的限制加上一定數量的事實,但如果不是這樣並且-limit參數不會將內存限制到一定數量,那麼究竟是什麼點ImageMagick中的那個參數?

再次感謝您的幫助提前,這是非常感謝,一如既往。

+0

沒有想法的人?這不是一個大問題,但如果有人能夠對此有所瞭解,我很樂意。 – Vunus 2012-01-04 15:19:31

回答

2

根據ImageMagick的移動所有內存操作mmaped文件,因此它會開始掉,如果你有足夠的磁盤空間的文檔,請參閱手冊:從手動-limit SNIP:

的文件的值是文件數量。磁盤限制爲 Gigabutes,其他資源的值以兆字節爲單位。通過 默認的限制是768個文件,1024MB內存,4096MB映射和 無限磁盤,但這些在啓動時在平臺 上進行調整,以提供有關可用資源的信息。當達到限制 時,ImageMagick將以某種方式失敗,或者在可能的情況下采取補償措施 。例如,限制內存32限制 映射64限制內存當像素高速緩存達到內存限制時,它會使用內存映射 。達到該限制時,它將轉到磁盤。如果 磁盤有硬限制,則該程序將失敗。

+0

我肯定有足夠的磁盤空間(50GB +),但它似乎仍在使用超過通過-limit參數設置的數量。抱歉,評論的延遲時間太長,我忘記了我問過這個問題,因爲ImageMagick似乎在表現自己,儘管這仍然是一個問題。 – Vunus 2013-04-24 12:58:35

+0

試試從svn安裝,也許你的版本是越野車? – Arman 2013-04-25 15:12:22

+0

我認爲這與我的主機使用的系統有關。自從我搬到了不同的主機,我可以自己安裝ImageMagik,並且一直沒有問題。 – Vunus 2014-04-19 13:11:33

2

限制僅影響ImageMagick的像素緩存。程序代碼以及庫/代表可能會用來加載或處理圖像的任何內容都不受這些設置的影響。

你不指定你在頂部看什麼,正確的列顯然是RES或RSIZE。有了20MiB這樣的小限制,程序和圖書館代碼將佔據居民組規模的很大一部分。

要驗證您的環境變量是否使用了正確的單位,請使用identify -list resource。如果內存像素高速緩存(MAGICK_MEMORY_LIMIT)的大小對於映像不足,則將使用mmap-ed文件(MAGICK_MAP_LIMIT),如果該限制太低,則使用常規磁盤文件(MAGICK_DISK_LIMIT)。如果所有限制都太低,ImageMagick將立即失敗並出現錯誤,如cache resources exhausted,Memory allocation failedcorrupt image

+0

所以額外的內存可能確實是庫本身被加載到內存中,額外的10MB會是正確的嗎?我正在查看RES,它通常會在我設置的限制之上增加額外的8-10MB,所以我只是假定它是程序開銷並調整了我的服務器內存以適應它。感謝你的回答。 – Vunus 2013-04-24 12:59:39