8 votes

Pourquoi une application fonctionne-t-elle si lentement lorsqu'elle est lancée avec launchctl ?

J'ai écrit une application en C++, utilisant OpenGL et Cendres . Lorsque je lance l'application à partir du Finder, elle fonctionne correctement à 60FPS. Cependant, lorsque je le lance en utilisant launchctl load les performances sont terribles, l'interface utilisateur est lente et en général il fonctionne à environ la moitié du FPS désiré.

J'aimerais utiliser launchctl pour maintenir l'application en vie au cas où elle tomberait en panne ou devrait être redémarrée pour des mises à jour de contenu. J'ai lu ce tutoriel : http://www.launchd.info/ et j'ai trouvé quelques paramètres de configuration qui pourraient être utiles, à savoir Data, MemoryLock, NumberOfProcesses, ResidentSetSize & Stack, mais je ne sais pas à quelles valeurs les fixer, ni même si elles sont utiles.

J'ai remarqué dans le moniteur d'activité que l'utilisation du processeur est beaucoup plus faible lorsque l'on utilise la fonction launchctl .

Voici mon fichier plist actuel.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

  <key>Label</key>
  <string>PROCESS_ID</string>

  <key>RunAtLoad</key>
  <true/>

  <key>KeepAlive</key>
  <true/>

  <key>ThrottleInterval</key>
  <integer>30</integer>

  <key>Program</key>
  <string>PATH_TO_EXECUTABLE</string>

</dict>
</plist>

Mise à jour : J'ai trouvé une solution à ce problème. Plutôt que de pointer vers l'exécutable, nous pouvons utiliser open et indiquer le chemin d'accès au fichier de l'application. Je n'ai pas encore compris quelle était la différence entre le lancement direct de l'exécutable, mais cela semble remédier au problème.

En voici un exemple :

<key>ProgramArguments</key>
  <array>
  <string>/usr/bin/open</string>
  <string>-W</string>
  <string>/Applications/Safari.app</string>
</array>

12voto

CodeGroover Points 1425

J'ai eu le même problème et il a été résolu en ajoutant la balise ProcessType.

    <key>ProcessType</key>
    <string>Interactive</string>

J'ai examiné ce problème sous toutes sortes d'angles, en comparant l'utilisation du processeur et de l'unité centrale, en attribuant des ressources au système, etc. (comme vous l'avez sûrement fait aussi) et je n'arrivais pas à voir quelle était la différence, c'est-à-dire pourquoi les performances baissaient. Dans le page de manuel Il y est dit que

T travail. Le système appliquera des limites de ressources en fonction du type de travail dont il s'agit. d'emploi. S'il n'est pas spécifié, le système appliquera des limites de ressources légères au travail, en réduisant son utilisation du processeur et de la bande passante d'entrée/sortie. de ressources légères, en limitant l'utilisation de l'unité centrale et de la bande passante d'E/S.

Vous avez également dû constater que ce ralentissement n'était pas très visible lorsque l'on examinait les propriétés du processus.

J'ai obtenu cette solution en envoyant un courriel aux excellents responsables de launchd.info à ce sujet, bravo à eux. J'espère que cela vous aidera.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X