Als ik mijn applicatie draai krijg ik soms een foutmelding over te veel bestanden open
.
Het uitvoeren van ulimit -a
rapporteert dat de limiet 1024 is. Hoe kan ik de limiet verhogen tot boven 1024?
Edit
ulimit -n 2048
resulteert in een toestemmingsfout.
Je kunt altijd proberen om een ulimit -n 2048
te doen. Dit zal alleen de limiet voor uw huidige shell resetten en het aantal dat u opgeeft mag niet hoger zijn dan de harde limiet
Elk besturingssysteem heeft een andere harde limiet ingesteld in een configuratiebestand. Bijvoorbeeld, de harde limiet voor open bestanden op Solaris kan worden ingesteld bij het opstarten vanuit /etc/system.
set rlim_fd_max = 166384
set rlim_fd_cur = 8192
Op OS X, moeten dezelfde gegevens ingesteld worden in /etc/sysctl.conf.
kern.maxfilesperproc=166384
kern.maxfiles=8192
Onder Linux, staan deze instellingen vaak in /etc/security/limits.conf.
Er zijn twee soorten limieten:
Zachte limieten kunnen door iedere gebruiker worden ingesteld, terwijl harde limieten alleen door root kunnen worden gewijzigd. Limieten zijn een eigenschap van een proces. Ze worden geërfd wanneer een kindproces wordt aangemaakt, dus systeemwijde limieten zouden moeten worden ingesteld tijdens de systeeminitialisatie in init-scripts en gebruikerslimieten zouden moeten worden ingesteld tijdens het inloggen van gebruikers, bijvoorbeeld door pam_limits te gebruiken.
Er zijn vaak standaardwaarden ingesteld wanneer de machine opstart. Dus, ook al kunt u uw ulimit in een individuele shell resetten, het kan zijn dat deze bij het herstarten weer op de vorige waarde wordt ingesteld. U kan misschien uw boot scripts doorzoeken voor de bestaande ulimit commando's als u de standaard wil veranderen.
Als je Linux gebruikt en je krijgt de toestemmingsfout, dan moet je de toegestane limiet verhogen in het /etc/limits.conf
of /etc/security/limits.conf
bestand (waar het bestand zich bevindt hangt af van je specifieke Linux distributie).
Bijvoorbeeld om iedereen op de machine toe te staan om het aantal open bestanden te verhogen tot 10000, voeg de regel toe aan het limits.conf
bestand.
* hard nofile 10000
Log dan uit en log opnieuw in op uw systeem en u zou in staat moeten zijn om te doen:
ulimit -n 10000
zonder een toestemmingsfout.
/etc/security/limits.conf
webuser hard nofile 64000
log dan in als webuser
su - webuser
voeg .bashrc en .bash_profile bestand toe door
echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile
$ ulimit -a | grep open
open files (-n) 64000
Dat is het en ze boem, boem, boem.