El uso del comando ulimit sólo cambia los límites de recursos para el shell actual y sus hijos, y sudo ulimit crea un shell raíz, ajusta sus límites y luego sale (por lo que no tiene, hasta donde yo puedo ver, ningún efecto real).
Para exceder el 12288, necesita ajustar los parámetros kern.maxfiles y kern.maxfilesperproc del kernel, y también (al menos de acuerdo con esta entrada del blog , que es un resumen de esta discusión ) un límite de launchd. Puede usar launchctl limit para ajustar todo esto a la vez:
sudo launchctl limit maxfiles 1000000 1000000
Para hacer esto permanente (es decir, que no se reinicie cuando se reinicie), cree /etc/launchd.conf que contenga:
limit maxfiles 1000000 1000000
Entonces puede usar ulimit (pero sin el sudo) para ajustar su límite de proceso.
Si esto no lo hace, es posible que te encuentres con límites de tamaño en el kernel. Si su modelo lo soporta , arrancar el kernel en modo de 64 bits puede ayudar.