2014-11-21 86 views
1

我有Magento網店,它運行cron作業來執行預定進程。其中之一是產品導入。它負責導入產品並將其分類。根據sql狀態,我可以看到這部分已經完成。它嘗試使緩存無效後。對於緩存,我試圖在socket上使用tcp或redis上的memcache。對於這兩個選項我都有相同的結果。我使用strace命令來查看它想要做什麼。長時間運行的進程調試。 Strace,brk

sudo strace -e trace=all -f -d -p 10319 

它是最後2小時輸出是:

[wait(0x57f) = 10319] 
pid 10319 stopped, [SIGTRAP] 
brk(0x236ec000 [wait(0x57f) = 10319] 
pid 10319 stopped, [SIGTRAP] 
)       = 0x236ec000 
[wait(0x57f) = 10319] 
pid 10319 stopped, [SIGTRAP] 
brk(0x2372c000 [wait(0x57f) = 10319] 
pid 10319 stopped, [SIGTRAP] 
)       = 0x2372c000 
[wait(0x57f) = 10319] 
pid 10319 stopped, [SIGTRAP] 
brk(0x2376c000 [wait(0x57f) = 10319] 
pid 10319 stopped, [SIGTRAP] 
)       = 0x2376c000 

我知道BRK用來分配內存。

其他輸出可以表示什麼?什麼可能是這種行爲的原因?有任何想法嗎?

回答

1

問題出在array_merge函數中,有270000個實體的循環,並且它們都在該循環內被合併,這就是爲什麼腳本分配如此大量的內存的原因。取而代之的是我使用了聯合數組,速度更快。