2012-04-16 149 views
0

我用python編寫了一個爬蟲編碼,但它經常導致oom殺手,oom殺手使得linux凍結,並且我無法通過ssh連接到os。我還寫了一個腳本來保護內存,如果內存使用率超過80%[memusage =(MemTotal - MeMFree - 緩衝區 - 緩存)/ MeMTotal],重新啓動爬蟲。但它似乎不起作用。所以我的問題是,如何避免殺手鐗,即使殺人兇手發生,是否有某種方法可以避免凍結整個操作系統?如何避免使用python編碼的oom殺手

當兇手發生時,屏幕上會打印下面的信息,誰可以向我解釋這些信息?

ve:okB present:16256kB Pages_scanned:173280531 all_unreclaimable? yes 
[9132.468227] lowmem_reserve[]: 0 829 829 829 
[9132.468403]Normal free:3628kB min:3648kB low:4568kB high:5472kB active:614280kB inactive:22508kB present:849376kB pages_scanned:1415839762 all_unreclaimable? yes 
[9132.468713] lowmem_reserve[]: 0 0 0 0 
[9132.468883]DMA: 0.4kB 1.8kB 1*16kB 1,32kB 0*64kB 0*128kB 1*256kB 0*512kB 1*1024kB 1*2048kB 0*4096kB = 3384kB 
[9132.469286]Normal:7.4kB 5*8kB 0*16kB 1*32kB 1*64kB 1*128kB 1*256kB 0*512kB 1*1024kB 1*2048kB 0*4096kB = 3620kB 
[9132.469674]Swap cache:add 0, delete 0, find 0/0, race 0+0 
[9132.469825]Frees swap = 0kB 
[9132.469905]Total swap = 0kB 
[9132.469986]Free swap:  0kB 
[9132.472289]218112 pages of RAM 
[9132.472386]0 pages of HIGHMEM 
[9132.472469]44668 reserved pages 
[9132.472553]5732 pages shared 
[9132.472634]0 pages swap cached 
[9132.472760]0 pages dirty 
[9132.472837]0 pages writeback 
[9132.472919]874 pages mapped 
[9132.472999]3343 pages slab 
[9132.473082]392 pages pagetables 
+1

您的機器內存非常低或者您的程序中必須有內存泄漏。解決這個問題,你不需要問這個問題。 – Dikei 2012-04-16 11:36:32

回答

2

OOM殺手是unix對我來說最奇怪的部分之一,似乎從來沒有像所有的內存一樣追蹤進程。

解決方法是不要讓你的python進程消耗太多內存。您可以通過安裝更多內存來暫時緩解問題。

但是,長期的解決方案是編寫您的抓取工具,以便它不會佔用您的所有內存。

沒有看到你的代碼,我們只能猜測所有的內存在哪裏。

+0

只有當你真的*吸吮內存時,OOM殺手纔會進入。你確定你需要在你的應用程序? – 2012-04-16 09:49:57

3

據我所知你沒有交換分區或禁用它,請嘗試添加交換。 沒有交換,它無法從內存中驅逐髒頁面,系統可能會凍結。