У меня есть интернет-магазин Magento, он запускает задания cron для выполнения запланированных процессов. Одним из них является импорт продукции. Он отвечает за импорт товаров и их распределение по категориям. В соответствии с состоянием sql я вижу, что эта часть была закончена. После того, как он пытается аннулировать кэш. Для кеша я пытаюсь использовать memcache на 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 объектов, и все они были объединены в этом цикле, поэтому сценарий выделял такой большой объем памяти. Вместо этого я использовал ассоциативный массив, который намного быстрее.
Других решений пока нет …