4 votos

¿Cómo hacer que el cambio de ''sudo launchctl limit' sea permanente?

Tengo un trabajo en segundo plano que falló debido al error de demasiados archivos abiertos.

Para solucionarlo, tengo que matar el trabajo y luego ejecutar lo siguiente

sudo launchctl limit maxfiles 10240 10240

antes de reiniciarlo.

¿Hay alguna forma de hacer que el cambio de launchctl limit maxfiles sea permanente?

7voto

siva Puntos 23

Puede crear un demonio de inicio para ejecutar ese comando en cada arranque. Cree /Library/LaunchDaemons/private.maxfiles.plist con el siguiente contenido:

        Label
        private.maxfiles
        ProgramArguments

            launchctl
            limit
            maxfiles
            10240
            10240

        RunAtLoad

1 votos

Solo una nota para mí mismo: el cambio surtirá efecto después de que la máquina se reinicie.

1voto

Ted Wrigley Puntos 101

Lanzamiento tiene dos claves — HardResourceLimits y SoftResourceLimits — que se pueden utilizar para colocar límites en los recursos de los trabajos. Toman un diccionario de enteros, por lo que puedes agregar algo como lo siguiente a tu archivo launchd plist para obtener una solución permanente:

HardResourceLimits

    NumberOfFiles
    500

Esto debería limitar la cantidad de archivos que el proceso tiene abiertos a 500.

No estoy realmente seguro de cuál es la diferencia entre los límites 'suave' y 'duro', aunque la página del manual para launchd.plist dice (de forma críptica):

NumberOfFiles

El número máximo de archivos abiertos para este proceso. Establecer este valor en un demonio de sistema establecerá el valor sysctl(3) kern.maxfiles (SoftResourceLimits) o kern.maxfilesperproc (HardResourceLimits) en adición a los valores setrlimit(2).

sysctl(3) no tiene una página de manual en mi máquina, y es muy temprano en la mañana para que yo haga una búsqueda en Google. Sin embargo, sugiero que lo que realmente estás viendo es un error de codificación, y deberías corregir esto en el demonio, no depender de launchd. launchd prefiere tener control flexible sobre las cosas, y preferiría que los usuarios eviten dictar demasiado.

0 votos

Hasta donde sé, sysctl(3) solo está disponible cuando Xcode está instalado: (/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX‌​.platform/Developer/‌​SDKs/MacOSX.sdk/usr/‌​share/man/man3/sysct‌​l.3) man sysctl -S 3.

0 votos

@klanomath: Tengo Xcode, pero probablemente no tengo configurado correctamente mi visor de páginas del manual para encontrar ese archivo.

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