Is er een oplossing voor de "Te veel open bestanden in het systeem" fout op OS X 10.7.1?
Ik moet af van de vervelende “Te veel open bestanden in het systeem” limiet op OS X 10.7.1.
Is er een manier?
Ik moet af van de vervelende “Te veel open bestanden in het systeem” limiet op OS X 10.7.1.
Is er een manier?
Volgens dit nuttige artikel (dat ik aanraad te lezen):
Standaard is het maximum aantal bestanden dat Mac OS X kan openen ingesteld op 12.288 en het maximum aantal bestanden dat een bepaald proces kan openen is 10.240.
U kunt deze controleren met:
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
U kunt de limieten (op eigen risico) verhogen met:
sysctl -w kern.maxfiles=20480
(of welk nummer u ook kiest) sysctl -w kern.maxfilesperproc=18000
(of welk nummer u ook kiest) Om de wijziging permanent te maken, gebruikt u sudo
om uw instellingen in /etc/sysctl.conf
(die u misschien moet maken) te zetten, zoals dit:
kern.maxfiles=20480
kern.maxfilesperproc=18000
Opmerking: In OS X 10. 10 of lager, kun je een instelling in /etc/launchd.conf
toevoegen zoals limit maxfiles
en het zal alles wat je hier zet overschrijven.
Nogmaals, uit het artikel:
Als je dit gedaan hebt, zal de kernel zelf een maximum aantal bestanden hebben, maar de commandoregel kan dat niet zijn. En aangezien de meeste processen die zo veel bestanden in beslag nemen, zullen worden geïnitieerd door de shell, zul je dat willen verhogen.
Het commando daarvoor is:
ulimit -S -n 2048 # or whatever number you choose
Die verandering is ook tijdelijk; het duurt alleen maar voor de huidige shell-sessie. Je kunt het toevoegen aan je shell configuratiebestand (.bashrc
, .zshrc
of wat dan ook) als je wilt dat het elke keer dat je een shell opent wordt uitgevoerd.
Het lijkt erop dat er een heel andere methode is om de limiet voor open bestanden te wijzigen voor elke versie van OS X!
Voor OS X Sierra (10.12.X) moet je:
1. Maak een bestand aan op /Library/LaunchDaemons/limit.maxfiles.plist
en plak het volgende in (voel je vrij om de twee getallen (die de zachte en harde grenzen zijn, respectievelijk) te wijzigen:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>limit.maxfiles</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>64000</string>
<string>524288</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
*2. * Verander de eigenaar van uw nieuwe bestand:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
3. Laad deze nieuwe instellingen:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4. Controleer tot slot of de limieten kloppen:
launchctl limit maxfiles
``` &001
Je moet je ulimit-instellingen verhogen - het is vrij laag op OS X deze dagen - 256 standaard. Voeg ulimit -n 4096
of vergelijkbaar met uw ~/.profiel of gelijkwaardig toe en dat zal het oplossen in uw lokale omgeving. Voer ulimit -a
uit om je huidige niveaus te controleren
Om de systeeminstellingen te zien, voer je dit uit:
launchctl limit maxfiles
Het is nogal wat hoger ingesteld in Lion (10240) op basis van het proces dan het vroeger was. Maar als je het daar nog steeds raakt dan kun je het hoger instellen met hetzelfde commando met de gewenste niveaus. Om de wijzigingen permanent te maken is /etc/launchd.conf de plaats waar je de relevante regels moet toevoegen.
Andere optie kan zijn het vinden van de dader:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
Voor de laatste zou je kunnen zien welke bestanden open zijn:
sudo lsof -n | grep socketfil
en het proces desgewenst doden
kill $pid
Uit de commentaren:
Voor wat het waard is, kun je ook een lijst krijgen van de proces-ID’s met de meest openstaande bestanden met behulp van
lsof -n | sed -E 's/^[^]+[]+([^]+).*$//' | uniq -c | sort | tail
Mensen, op Mavericks 10.9.4
ulimit -n 2048
werkt het prima. Het kan zijn dat u een nieuwe inlogsessie moet starten.
Voor de laatste macOS (op het moment van schrijven: 10.14.1) kunt u sudo launchctl limit maxfiles 64000 524288
gebruiken (standaard was dat 256), maar het werkt alleen binnen de huidige sessie. Gebruik launchctl
job van @ninjaPixel https://superuser.com/a/1171028/760235 ) voor een permanente oplossing.
Je kunt
lsof -n
uitvoeren die te veel bestanden openen.
dan doden.
of
sysctl -w kern.maxfiles=20480
veranderen in een grotere.
Na alle veranderingen boven mijn java hebben we niet meer dan 10000 bestanden gemaakt. Oplossing was deze jvm-vlag -XX:-MaxFDLimit
Vergelijkbaar met https://superuser.com/a/1171028/367819
Om de huidige limieten op uw Mac OS X-systeem te controleren, voert u:
launchctl limit maxfiles
De laatste twee kolommen zijn respectievelijk de zachte en de harde limieten.
Om de limieten voor open bestanden op een systeembrede basis in Mac OS X Yosemite aan te passen, moet u twee configuratiebestanden aanmaken. De eerste is een property list (ook wel plist genoemd) bestand in /Library/LaunchDaemons/limit.maxfiles.plist dat de volgende XML-configuratie bevat:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>limit.maxfiles</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
Dit stelt de limiet voor open bestanden in op 200000. Het tweede plist configuratiebestand moet worden opgeslagen in /Library/LaunchDaemons/limit.maxproc.plist met de volgende inhoud:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple/DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>limit.maxproc</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxproc</string>
<string>2048</string>
<string>2048</string>
</array>
<key>RunAtLoad</key>
<true />
<key>ServiceIPC</key>
<false />
</dict>
</plist>
Beide plist bestanden moeten eigendom zijn van root:wheel en hebben de rechten -rw-r–r—. Deze rechten zouden standaard aanwezig moeten zijn, maar u kunt ervoor zorgen dat ze aanwezig zijn door sudo chmod 644 uit te voeren. Terwijl de stappen die hierboven uitgelegd zijn ervoor zorgen dat systeembrede open bestandslimieten correct ingesteld worden bij het herstarten, kunt u ze handmatig toepassen door launchctl limit uit te voeren.
Naast het instellen van deze limieten op systeemniveau, raden we aan om de limieten ook op sessie-niveau in te stellen door de volgende regels toe te voegen aan uw bashrc, bashprofile of analoog bestand:
ulimit -n 200000
ulimit -u 2048
Net als de plist-bestanden, zou uw bashrc- of gelijkaardig bestand -rw-r–r— rechten moeten hebben. Op dit punt kunt u uw computer herstarten en ulimit -n in uw terminal invoeren. Als uw systeem correct is geconfigureerd, zou u moeten zien dat maxfiles zijn ingesteld op 200000.
U kunt dit artikel volgen voor meer details. https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Vergeet niet uw Mac te herstarten om de waarden effectief te hebben.