Похоже, ваше оборудование достаточно для его обработки.
1) Проверьте, есть ли у вас процессы зависания. Используя ps auxf
(см. Ответ tcurvelo), проверьте, есть ли у вас один или несколько процессов, которые занимают слишком много ресурсов. Может быть, у вас недостаточно ресурсов для запуска cronjob.
2) Проверьте сетевые подключения:
Если ваши базы данных и ваш cronjob находятся на разных серверах, вы должны проверить, каково время отклика между этими двумя машинами. Возможно, у вас есть проблемы с сетью, из-за которых cronjob ждет, пока сеть отправит пакет обратно.
Вы можете использовать: Netcat , Iperf , mtr или ttcp
3) Конфигурация сервера
Ваш сервер настроен правильно? Ваша ОС, MySQL настроены правильно? Я бы порекомендовал прочитать эти статьи:
http://www3.wiredgorilla.com/content/view/220/53/
http://www.vr.org/knowledgebase/1002/Optimize-and-disable-default-CentOS-services.html
http://dev.mysql.com/doc/refman/5.1/en/starting-server.html
http://www.linux -mag.com / ID / 7473 /
4) Проверьте свою базу данных:
Убедитесь, что ваша база данных имеет правильные индексы и убедитесь, что ваши запросы оптимизированы. Прочтите эту статью о объясните команду
Если для выполнения запроса с несколькими сотнями тысяч записей требуется время, которое повлияет на остальную часть вашего cronjob, если у вас запрос внутри цикла, еще хуже.
Прочитайте эти статьи:
http://dev.mysql.com/doc/refman/5.0/en/optimization.html
http://20bits.com/articles/10-tips-for-optimizing-mysql-queries-that-dont-suck/
http://blog.fedecarg.com/2008/06/12/10-great-articles-for-optimizing-mysql-queries/
5) Трассировка и оптимизированный код PHP?
Убедитесь, что ваш PHP-код работает как можно быстрее.
Прочитайте эти статьи:
http://phplens.com/lens/php-book/optimizing-debugging-php.php
http://code.google.com/speed/articles/optimizing-php.html
http://ilia.ws/archives/12-PHP-Optimization-Tricks.html
Хорошая техника для проверки вашего cronjob - это отслеживать ваш скрипт cronjob:
Основываясь на вашем процессе cronjob, поместите некоторую трассировку отладки, включая количество памяти, сколько времени потребовалось для выполнения последнего процесса. например:
<?php
echo "\n-------------- DEBUG --------------\n";
echo "memory (start): " . memory_get_usage(TRUE) . "\n";
$startTime = microtime(TRUE);
// some process
$end = microtime(TRUE);
echo "\n-------------- DEBUG --------------\n";
echo "memory after some process: " . memory_get_usage(TRUE) . "\n";
echo "executed time: " . ($end-$start) . "\n";
Таким образом вы можете легко определить, какой процесс занимает сколько памяти и сколько времени требуется для его выполнения.
6) Внешние серверы / вызовы веб-сервисов
Ваш cronjob вызывает внешние серверы или веб-сервис? если это так, убедитесь, что они загружены как можно быстрее. Если вы запрашиваете данные со стороннего сервера, и этот сервер занимает несколько секунд, чтобы вернуть ответ, который повлияет на скорость вашего cronjob, особенно если эти вызовы зациклены.
Попробуйте и дайте мне знать, что вы найдете.