2012-06-07 08:52:49 +0000 2012-06-07 08:52:49 +0000
202
202

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?

Antwoorden (10)

234
234
234
2012-06-29 20:23:19 +0000

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.

63
63
63
2017-01-24 14:56:37 +0000

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
34
34
34
2012-06-07 11:09:52 +0000

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.

34
34
34
2017-02-18 00:42:52 +0000

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
10
10
10
2014-09-04 16:19:11 +0000

Mensen, op Mavericks 10.9.4 ulimit -n 2048 werkt het prima. Het kan zijn dat u een nieuwe inlogsessie moet starten.

5
5
5
2018-11-23 16:59:24 +0000

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.

1
1
1
2017-05-18 02:52:29 +0000

Je kunt

lsof -n

uitvoeren die te veel bestanden openen.

dan doden.

of

sysctl -w kern.maxfiles=20480

veranderen in een grotere.

1
1
1
2019-01-25 13:15:52 +0000

Na alle veranderingen boven mijn java hebben we niet meer dan 10000 bestanden gemaakt. Oplossing was deze jvm-vlag -XX:-MaxFDLimit

0
0
0
2019-05-29 17:55:40 +0000

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.

0
0
0
2016-12-14 18:50:26 +0000

Ik kwam het tegen tijdens het doen van een chmod -R dus ik kreeg het rond door het nemen van kleinere stappen, bijvoorbeeld

# for each directory
find . -type d -exec chmod 755 {} \;