【问题标题】:Long running process debug. Strace, brk长时间运行的进程调试。 Strace, brk
【发布时间】:2015-01-19 12:05:38
【问题描述】:

我有 Magento 网上商店,它运行 cron 作业来执行预定进程。其中之一是产品进口。它负责导入产品并将它们分配给类别。根据 sql state 我可以看到这部分已经完成。在它尝试使缓存无效之后。对于缓存,我尝试在 tcp 上使用 memcache 或在套接字上使用 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 是用来分配内存的。

其他输出可能意味着什么?这种行为的原因是什么?有什么想法吗?

【问题讨论】:

    标签: php debugging cron strace brk


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多