A diferença é o escopo e como ele é aplicado. Os limites de arquivos abertos definidos por meio de sysctls aplicam-se a todo o sistema, enquanto os limites definidos por meio de /etc/security/limits.conf
se aplicam somente a itens que atendem aos critérios especificados lá. A outra diferença principal é que /etc/security/limits.conf
limites são aplicados via ulimit e, portanto, podem ser alterados mais facilmente, enquanto o limite de sysctl está essencialmente configurando um limite de alocação de memória no próprio kernel.
Como regra geral, você quase sempre deseja usar /etc/security/limits.conf
, mesmo que esteja definindo limites globais com a correspondência de curinga, pois é um pouco mais confiável e as coisas geralmente falham mais facilmente quando atingidas com ulimit restrições que atingir os limites de alocação de memória do kernel.