Um processo pode alterar seus limites por meio da chamada do sistema setrlimit(2) . Quando você executar ulimit -n , deverá ver um número. Esse é o limite atual do número de descritores de arquivos abertos (que inclui arquivos, soquetes, canais etc.) para o processo. O comando ulimit executou a chamada do sistema getrlimit(2) para descobrir qual é o valor atual.
Aqui está o ponto chave: um processo herda seu limite atual de seu processo pai. Portanto, se você executasse ulimit -n 64 , definiria o limite de descritores de arquivos abertos desse shell para 64. Qualquer processo iniciado pelo shell teria o mesmo limite, a menos que esse novo processo chamasse setrlimit() apropriadamente.
Para alterar o limite de descritor de arquivo aberto mongodb's , você executaria ulimit -n 2048 (ou qualquer número grande que seu kernel permitir) em um shell. Você usaria esse shell para iniciar mongodb . Como um processo filho, mongodb herdaria o limite (grande) dos descritores de arquivos abertos.
Para modificar o limite de arquivos abertos do sistema, que parece mais a soma de todos os processos de limite de descritores de arquivos abertos, você precisa fazer algo como modificar /etc/sysctl.conf e executar sysctl -p . Veja o valor do parâmetro fs.file-max em /etc/sysctl.conf .