2016-02-15 24 views
-1

我在Heroku上部署Python應用程序,它必須加載一個〜40 MB的JSON文件。即使Heroku告訴我它應該有512 MB的RAM,該應用程序崩潰時內存不足錯誤。爲什麼會發生這種情況,我可以修復它嗎?錯誤日誌(來自heroku日誌)如下:Python Heroku應用程序崩潰,即使它不在內存極限

2016-02-15T01:10:3​​9.367715 + 00:00 heroku [web.1]:進程退出狀態137 2016-02-15T01:10:52.785020 +00:00 heroku [web.1]:進程運行mem = 731M(142.6%) 2016-02-15T01:10:52.785020 + 00:00 heroku [web.1]:錯誤R14(超出內存配額)

回答

0

如果它陷入遞歸循環,它會給你一個內存不足的錯誤。

0

變量或結構的內存中表示遠大於文件表示。例如,

import sys 

sys.getsizeof({})  # => 288 bytes 
sys.getsizeof([])  # => 64 bytes 
sys.getsizeof("abc") # => 52 bytes 
sys.getsizeof(12)  # => 28 bytes 

(請注意,使用在Windows 10用Cython 3.4 64位獲得這些值。您的值可能會因您的操作系統和Python版本而異)

我做了一個快速測試:一個33 KB的.json文件在內存中變成了188 KB。根據數據的深度嵌套情況,很可能40 MB的文件可能需要350 MB的內存才能解包,而且這不包括程序/操作系統等使用的其他內存。