8 votos

¿Por qué una aplicación se ejecuta tan lentamente cuando se inicia con launchctl?

He escrito una aplicación en C++, utilizando OpenGL y Cinder . Cuando lanzo el archivo de la aplicación desde el Finder, se ejecuta bien y sin problemas a 60FPS. Sin embargo, cuando la ejecuto usando launchctl load el rendimiento es terrible, la interfaz de usuario es lenta y en general funciona a la mitad de los FPS deseados.

Me gustaría utilizar launchctl para mantener la aplicación viva en caso de que se cuelgue o tenga que reiniciarse para actualizar el contenido. He leído este tutorial: http://www.launchd.info/ y encontré algunos ajustes de configuración que podrían ser útiles, a saber, Data, MemoryLock, NumberOfProcesses, ResidentSetSize y Stack, pero no estoy seguro de qué valores establecer, o si son siquiera útiles.

Una nota interesante, es que he notado que en el Monitor de Actividad, que el uso de la CPU es mucho menor cuando se utiliza launchctl .

Aquí está mi archivo plist actual.

<?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>

Actualización: He encontrado una solución a este problema. En lugar de apuntar al ejecutable, podemos utilizar open y proporcionar una ruta de acceso al archivo de la aplicación. No he averiguado cuál es la diferencia entre lanzar el ejecutable directamente, pero parece remediar el problema.

He aquí un ejemplo:

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

12voto

CodeGroover Puntos 1425

Yo tenía el mismo problema y se solucionó añadiendo la etiqueta ProcessType.

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

He estado analizando este problema desde todo tipo de ángulos, comparando el uso de la cpu/gpu, los recursos del sistema atribuidos, etc. (como tú también debes haber hecho) y simplemente no era evidente CUÁL ES LA DIFERENCIA, es decir, por qué el rendimiento se ve afectado. En el página de manual dice:

Esta clave opcional describe, a un alto nivel, el propósito del trabajo. El sistema aplicará los límites de recursos en función del tipo de trabajo que sea es. Si se deja sin especificar, el sistema aplicará límites de recursos ligeros a el trabajo, limitando el uso de la CPU y el ancho de banda de E/S.

Seguro que tú también has experimentado que esta ralentización no era muy evidente al mirar las propiedades del proceso.

Obtuve esta solución cuando envié un correo electrónico a la excelente gente de launchd.info sobre esto, hurra por ellos. Espero que esto te ayude.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X