我有Magento网上商店,它运行cron作业来执行计划的进程。其中之一是产品进口。它负责导入产品并将其分配到类别。根据sql状态,我可以看到这部分已经完成。在它尝试使缓存失效之后。对于缓存,我正在尝试在 tcp 上使用内存缓存或在套接字上使用 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 用于分配内存。
其他输出可能意味着什么?这种行为的原因可能是什么?有什么想法吗?
问题出在array_merge
函数上,有 270000 个实体的循环,所有这些实体都合并在该循环中,这就是脚本分配如此大量内存的原因。取而代之的是,我使用了关联数组,它要快得多。