Python – OSError 24 (demasiados archivos abiertos) y memoria compartida

Enfrenté el problema, había una excepción OSError 24 (“Demasiados archivos abiertos”) planteada en mi Mac OS X en el script de Python.

No tenía idea de lo que podría causar ese problema. lsof -p mostró aproximadamente 40-50 líneas, y mi ulimit fue 1200 (verifico que usando

resource.getrlimit(resource.RLIMIT_NOFILE) 

), que devolvió la tupla (1200, 1200). Así que no me excedí del límite ni de cerca.

Que mi script generó varios subprocesos y también asignó segmentos de memoria compartida. Se produjo una excepción al asignar segmentos de memoria compartida. Yo uso el módulo sysv_ipc .

También sabía que el número total permitido de segmentos de memoria compartida es suficientemente grande (128 segmentos), y comando

     ipcs -b -m 

    Dio definitivamente menos número (no más de 40 segmentos).

    El problema estaba en la configuración del sistema de memoria compartida ( memoria compartida – wiki ).

    Hay un parámetro kern.sysv.shmseg en el archivo /etc/sysctl.conf que representa el número máximo de segmentos de memoria compartida que cada proceso puede adjuntar. Así que tenía un valor de 32 que no era suficiente para mi guión.

    Para ver los parámetros, use:

     sysctl -A | grep shm 

    Para actualizar esos parámetros, edite el archivo:

     sudo vim /etc/sysctl.conf 

    Mi apariencia ahora es así:

     kern.sysv.shmmax=564777216 kern.sysv.shmmin=1 kern.sysv.shmmni=700 kern.sysv.shmseg=128 kern.sysv.shmall=131072 

    Aviso, necesita reiniciar el sistema para aplicar la configuración.

    Para ver los segmentos de memoria compartida asignados actualmente, escriba:

     ipcs -m -b 

    Para eliminar todos los segmentos de memoria compartida:

     for n in `ipcs -b -m | egrep ^m | awk '{ print $2; }'`; do ipcrm -m $n; done 

    Aviso, solo los segmentos que no están vinculados a ningún proceso serán realmente eliminados.

    Más información sobre la configuración de memoria compartida: http://techjournal.318.com/general-technology/shared-memory-settings-explain/ , http://www.spy-hill.com/help/apple/SharedMemory.html , http : //support.apple.com/kb/HT4022