Votre matériel semble être assez bon pour traiter ça.
1) Vérifiez si vous avez déjà des processus suspendus. En utilisant le ps auxf
(voir la réponse de tcurvelo), vérifiez si vous avez un ou plusieurs processus qui prennent trop de ressources. Peut-être n'avez-vous pas assez de ressources pour exécuter votre cronjob.
2) Vérifiez vos connexions réseau : Si vos bases de données et votre cronjob sont sur un serveur différent, vous devez vérifier le temps de réponse entre ces deux machines. Peut-être avez-vous des problèmes de réseau qui font que le cronjob attend que le réseau renvoie le paquet.
Vous pouvez utiliser : Netcat , Iperf , mtr o ttcp
3) Configuration du serveur Votre serveur est-il correctement configuré ? Votre OS, MySQL sont correctement configurés ? Je vous recommande de lire ces articles :
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) Vérifiez votre base de données : Assurez-vous que votre base de données possède les bons index et que vos requêtes sont optimisées. Lisez cet article sur le expliquer la commande
Si une requête avec quelques centaines de milliers d'enregistrements prend du temps à s'exécuter, cela affectera le reste de votre cronjob, si vous avez une requête dans une boucle, c'est encore pire.
Lisez ces articles :
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) Tracer et optimiser le code PHP ? Assurez-vous que votre code PHP s'exécute aussi rapidement que possible.
Lisez ces articles :
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
Une bonne technique pour valider votre cronjob est de tracer votre cronjob script : Sur la base du processus de votre cronjob, mettez une trace de débogage incluant combien de mémoire, combien de temps il a fallu pour exécuter le dernier processus. ex :
<?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";
En faisant cela, vous pouvez facilement trouver quel processus prend combien de mémoire et combien de temps il faut pour l'exécuter.
6) Appels de serveurs externes/services web Votre cronjob fait-il appel à des serveurs externes ou à des services web ? Si c'est le cas, assurez-vous que ceux-ci sont chargés aussi rapidement que possible. Si vous demandez des données à un serveur tiers et que ce serveur met quelques secondes à vous répondre, cela affectera la vitesse de votre cronjob, surtout si ces appels sont en boucle.
Essayez cela et faites-moi savoir ce que vous trouvez.