10 octobre 2012

Limiter l'usage du CPU d'une application sous Mac OsX (et empécher le ventilateur de souffler !)

Je désespérais un peu avec mon Macbook Pro du début 2011 qui a toujours soufflé à fond (ventilateur) pour un oui pour un non. En fait pas vraiment pour un oui ou pour un non mais pour 2 applications qui prennent souvent 100% du CPU : Dropbox et Flash sous Firefox comme sur Chrome (pas sur Safari par contre). Cette discussion résume bien le problème et le relatif manque de solution. Celle là donne d'autres solutions que la mienne.

Pour regarder une vidéo sur Youtube, cela fait longtemps que j'ai pris l'habitude de passer sur Safari. Par contre je ne peux pas grand chose contre Dropbox quand il lance une synchronisation de mes fichiers de temps en temps. Seule façon de faire, mettre la synchronisation en pause et la remettre en marche quand je ne suis plus devant l'ordi (pas souvent car dans ce cas je le ferme...).

J'ai enfin trouvé une solution que j'essaye depuis aujourd'hui : limiter le CPU utilisable par Dropbox (ou toute autre application). En cherchant un peu on trouve CpuThrottle et différents Cpulimit (comme celui là par exemple).

J'ai testé Cpulimit et pour l'instant, cela résoud totalement mon problème de chauffe : Dropbox est bien limité à 10% au lieu de 100% (j'ai 200% puisque j'ai un double coeur sur mon Macbook).

Voila comment je m'y suis pris :



> Mon installation (expliquée par son auteur ici) :

  • J'ai récupéré le zip (bouton ZIP, en haut) sur la page de Cpulimit et je l'ai dézippé directement dans mon  dossier Downloads (en cliquant sur le zip). 
  • J'ai lancé un terminal (applications>utilitaires>terminal) et je suis allé dans le dossier créé en ligne de commande (cd Downloads/cpulimit). 
  • J'ai ensuite tapé make (toujours dans le terminal). Attention Xcode doit être installé !
  • Je suis retourné dans le finder pour copier le fichier créé (par le make) nommé cpulimit (dans le dossier Downloads/cpulimit/src) dans le dossier /usr/bin ou /usr/local/bin sous OSX El Capitan ou suppérieur (faire CMD + C sur cpulimit, puis dans le finder, menu aller>aller à, taper /usr/bin). On peut aussi le faire en ligne de commande bien sur ! > sudo cp src/cpulimit /usr/bin
> Utilisation :

  • il suffit ensuite d'ouvrir un terminal et de limiter l'usage du process (et de ses enfants) que l'on souhaite. Dans mon cas par exemple, j'ai limité le process de Dropbox à 10% en tapant la ligne suivante :
    • cpulimit -p 431 -l 10 (p pour process, l pour limit)
    • pour obtenir le numéro du process, personnellement j'utilise le moniteur d'activité (applications>utilitaires>moniteur d'activités) car c'est lui qui me montre quelles applications consomment tout mon CPU (je trie les applications qui consomment le plus en cliquant sur la colonne "%processeur")
Résultat :
AVANT
Dropbox en train de synchroniser
100% du CPU pris par cette tâche (vu dans le Moniteur d'activité)

APRES (cpulimit lancé)
10% du CPU pour la même tâche (qui prendra peut être 10 fois plus de temps, mais ça m'est égal)

  • si on veut automatiser tout ça, on peut même faire un petit script (lalala.command) contenant
pid_dropbox=$(fuser leCheminDeLApplication)
cpulimit -l 10 -p $pid_dropbox &
  • dans mon exemple avec Dropbox, cela fait :
pid_dropbox =$(fuser /Applications/Dropbox.app/Contents/MacOS/Dropbox)
cpulimit -l 10 -p $pid_dropbox &
  • Petit détail : il faut que ce fichier (lalala.command) ait les droits d'execution pour vous. Il faut faire
> chmod 774 lalala.command
  • Il ne reste plus qu'à executer ce script en cliquant dessus quand le besoin s'en fait sentir ou bien au démarrage de MacOS.
Le script sur mon bureau
La fenêtre qui s'ouvre quand on lance le script. On peut la fermer juste après sans problème.


Tout ça peut sembler un peu geek, mais je vous assure que c'est très simple et que je savoure le silence depuis que le ventilo de mon Macbook s'est enfin tu !

14 commentaires:

  1. J'hésitais beaucoup à employer ce type de méthode, je préfère les applications toute prêtes en générale. Mais grâce à ta traduction et présentation pas à pas, je me suis laissé convaincre, merci! Dans mon cas, c'est plus pour limiter la chauffe et donc le vieillissement de mon processeur durant de longues heures de conversion vidéos. Dès que j'aurai installé le module de ligne de commandes de XCode, je pourrais utiliser la commande make et vérifier que ça marche sous MOuntain Lion.

    RépondreSupprimer
  2. C'est encore moi avec mes conevrsions vidéos! Je confirme, ça marche parfaitement sous Mountain Lion! Et c'est somme toute assez amusant de taper ses commandes dans le terminal au lieu de passer par une interface graphique, finalement. Encore merci!

    RépondreSupprimer
  3. Oui, moi aussi j'ai mis du temps à me décider à employer cette méthode, mais maintenant je ne peux plus m'en passer !

    RépondreSupprimer
  4. Bonjour,
    J'essaye votre technique mais lors de l'étape de la cmd "make" j'ai un message me disant :

    -bash: make: command not found

    J'essaye de regarder sur les forums et autres (bien que aucun autre site ne parle de cpulimit sur osx ...), mais je ne comprend pas pourquoi je n'y arrive pas.

    Savez vous pourquoi svp ? Merci.

    RépondreSupprimer
  5. Ce commentaire a été supprimé par un administrateur du blog.

    RépondreSupprimer
  6. Hi, can you send me instal instruction in english?

    fazolejh@gmail.com

    Thank you very much.

    RépondreSupprimer
  7. The install instruction can be found in english here : http://cpulimit.sourceforge.net/.

    Enjoy !

    RépondreSupprimer
  8. Thank you for the tutorial, the program works very well.

    RépondreSupprimer
  9. Bonjour Monsieur, votre tutoriel m'intéresse beaucoup, mais j'ai des problèmes de mise en œuvre. Sur le site auquel vous renvoyez, faut il télécharger cpulimit master, ou cpulimit multiplatform ? ou encore autre chose ? Je n'ai pas réussi à obtenir, dans mon dossier downloads, le dossier cpulimit tout court dont vous parlez.

    RépondreSupprimer
  10. @anonyme : Le zip s'appelle cpulimit-master.zip (obtenu en cliquant sur le bouton ZIP).

    C'est quand on fait le make, qu'un programme nommé cpulimit tout court apparait

    RépondreSupprimer
  11. Merci pour votre réponse d'hier. Je ne sais pas si vous accepterez d'aider quelqu'un qui ne connaît pas Linux. Je ne dois quand même pas être le seul dans ce cas à vouloir limiter les ardeurs de Handbrake par exemple. Voici ce que j'obtiens avec les premières lignes de programmation :

    new-host-3:~ macbookpro$ cd Downloads/cpulimit-master
    new-host-3:cpulimit-master macbookpro$ # make
    new-host-3:cpulimit-master macbookpro$

    Est-ce correct ? Sachez que cela ne me crée pas un fichier cpulimit dans le dossier src ...

    Merci d'avance pour votre aide.

    RépondreSupprimer
  12. C'est encore moi. J'ai réussi ce dont votre premier interlocuteur aux conversions vidéo parlait brièvement et avait déjà réussi, ainsi que d'autres personnes d'ailleurs : appliquer votre procédure à Mountain Lion.
    J'ai téléchargé Xcode (très long), puis Xcode une fois ouvert, j'ai suivi Préférences>Downloads>Components>Command Line Tools INSTALL
    Après l'installation des outils de la line de commande, on peut quitter Xcode, qui a joué son rôle, et suivre votre tutoriel dans Terminal, la commande make étant devenue active (ne rien taper devant le mot make, par contre à ce que je croyais).
    Bien entendu, comme vous le disiez précédemment, votre opsengine/cpulimit est maintenant à remplacer par cpulimit-master
    Merci beaucoup pour cette page de tutoriel et de blog.

    RépondreSupprimer
  13. C'est parfait, merci beaucoup pour ce tuto qui fonctionne à merveille au cas par cas !

    Par contre, je n'arrive pas à faire fonctionner le script décrit en fin d'article.

    J'ai adapté le votre au mien:

    pid_outlook =$(fuser /Applications/Microsoft Outlook.app/Contents/MacOS/Microsoft Outlook)
    cpulimit -l 20 -p $pid_outlook&

    Mais ça ne fonctionne pas...

    Est-ce que le code est bon ? Pour créer un script, j'ai simplement fait un fichier texte que j'ai ensuite renommé lalala.command, est-ce la bonne méthode ?

    Merci d'avance pour votre réponse !

    RépondreSupprimer
  14. Je pense avoir réussi en tapant dans mon fichier command:

    #! /bin/bash

    pid_outlook=$(fuser /Applications/Microsoft\ Outlook.app/Contents/MacOS/Microsoft\ Outlook)

    cpulimit -p $pid_outlook -l 30

    RépondreSupprimer