Bonjour à tous. Je rencontre un problème avec une application. Celle-ci consomme anormalement beaucoup de CPU (quasiement 50%), meme quand elle ne "fait rien". Elle comporte en fait une boucle principale contenant un "while" (comprenant meme "au cas ou" un "usleep" à la fin).Il y a peu de temps, cette application ne consommait que 0.1 de cpu, taux normal pour un petit processus de ce type (c'est un bot IRC). Apres une mise a jour de ma distribution (je ne sais pas si ce vient du kernel, de la libc, ou d'autre chose),cette application consomme 50% CPU.
Je constate que quand je l'heberge sur une ancienne distrib (avec noyau 2.4), pas de souci, elle est bien à 0.1%. Sur ma fedora (kernel 2.6.23 et glibc 2.7), elle consomme 50%.
Histoire de faire un test, j'ai fait un programme ne contenant que cela :
De la meme facon, sur mon pc ce code consomme presque 45% CPU alors que sur une distrib plus vieille, il ne consomme rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #include <unistd.h> int main() { while (1) usleep(5); }
Pourriez vous donc me dire s'il y a des précautions à prendre (outre un usleep tres long) lorsque l'on a un programme comportant une boucle permanante (cas d'un service tel un bot IRC) ? (ou meme dans l'exemple que je donne) pour ne pas avoir de consommation CPU (en tout cas pas autant).
Merci par avance
Partager