长时间运行的进程调试Strace,brk

时间:2014-11-21 10:59:19

标签: php debugging cron strace brk

我有Magento网店,它运行cron作业来执行预定的流程。其中之一是产品进口。它负责导入产品并将其分配到类别。根据sql状态,我可以看到这部分已经完成。尝试使缓存无效后。对于缓存,我试图在tcp上使用memcache或在socket上使用redis。对于这两个选项,我都有相同的结果。我使用strace命令查看它试图做的事情。

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 个答案:

答案 0 :(得分:2)

问题出在array_merge函数,270000个实体有循环,并且所有这些实体都在该循环内合并,这就是脚本分配如此大量内存的原因。而不是它我使用了关联数组,这要快得多。