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

Gibt es eine Korrektur für den Fehler "Zu viele offene Dateien im System" unter OS X 10.7.1?

Ich muss die lästige Begrenzung für “Zu viele offene Dateien im System” unter OS X 10.7.1.&nbsp loswerden;

Gibt es eine Möglichkeit?

Antworten (10)

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

Laut diesem hilfreichen Artikel (dessen Lektüre ich empfehle):

Standardmäßig ist die maximale Anzahl von Dateien, die Mac OS X öffnen kann, auf 12.288 festgelegt, und die maximale Anzahl von Dateien, die ein bestimmter Prozess öffnen kann, beträgt 10.240.

Sie können diese mit:

  • sysctl kern.maxfiles

  • sysctl kern.maxfilesperproc

Sie können die Grenzen (auf eigenes Risiko) mit erhöhen:

  • sysctl -w kern.maxfiles=20480 (oder wie auch immer Sie sich entscheiden)
  • sysctl -w kern.maxfilesperproc=18000 (oder wie auch immer Sie sich entscheiden)

Um die Änderung dauerhaft zu machen, verwenden Sie sudo, um Ihre Einstellungen in /etc/sysctl.conf (die Sie eventuell anlegen müssen) zu setzen, etwa so:

kern.maxfiles=20480
kern.maxfilesperproc=18000

Hinweis: In OS X 10. 10 oder niedriger können Sie eine Einstellung in /etc/launchd.conf wie limit maxfiles hinzufügen, und es wird alles überschreiben, was Sie hier eingeben.

Nochmals, aus dem Artikel:

Wenn Sie dies getan haben, wird der Kernel selbst eine maximale Anzahl von Dateien haben, aber die Shell möglicherweise nicht. Und da die meisten Prozesse, die so viele Dateien in Anspruch nehmen werden, von der Shell initiiert werden, werden Sie diese Zahl erhöhen wollen.

Der Befehl dafür lautet:

ulimit -S -n 2048 # or whatever number you choose

Diese Änderung ist ebenfalls temporär; sie gilt nur für die aktuelle Shell-Sitzung. Sie können ihn zu Ihrer Shell-Konfigurationsdatei (.bashrc, .zshrc oder was auch immer) hinzufügen, wenn Sie wollen, dass er jedes Mal ausgeführt wird, wenn Sie eine Shell öffnen.

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

Es scheint, als gäbe es für jede Version von OS X eine völlig andere Methode, um das Limit für offene Dateien zu ändern!

Für OS X Sierra (10.12.X) müssen Sie:

1. Bei /Library/LaunchDaemons/limit.maxfiles.plist eine Datei erstellen und Folgendes einfügen (Sie können die beiden Zahlen (die das weiche bzw. harte Limit darstellen) ändern:

<?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. * Ändern Sie den Eigentümer Ihrer neuen Datei:

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

3. Laden Sie diese neuen Einstellungen:

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

4. Prüfen Sie schließlich, ob die Grenzen korrekt sind:

launchctl limit maxfiles
34
34
34
2012-06-07 11:09:52 +0000

Sie werden Ihre Ulimit-Einstellungen erhöhen müssen - unter OS X ist es heutzutage ziemlich niedrig - standardmäßig 256. Fügen Sie ulimit -n 4096 oder ähnliches zu Ihrem ~/.profile oder einem gleichwertigen Profil hinzu und das wird es in Ihrer lokalen Umgebung lösen. Führen Sie ulimit -a aus, um Ihre aktuellen Werte zu überprüfen

Um die Systemeinstellungen zu sehen, führen Sie Folgendes aus:

launchctl limit maxfiles

In Lion (10240) ist es pro Prozess etwas höher eingestellt als früher. Wenn Sie dort aber immer noch auf sie treffen, können Sie sie mit dem gleichen Befehl mit den gewünschten Stufen höher einstellen. Um die Änderungen dauerhaft zu machen, müssen Sie in /etc/launchd.conf die entsprechenden Zeilen hinzufügen.

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

Eine andere Möglichkeit könnte darin bestehen, den Schuldigen zu finden:

sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail

Für die letzte könnten Sie sehen, welche Dateien offen sind:

sudo lsof -n | grep socketfil

Und den Prozess auf Wunsch beenden

kill $pid

Aus den Kommentaren:

Sie können auch eine Liste der Prozess-IDs mit den meisten offenen Dateien erhalten, indem Sie

lsof -n | sed -E 's/^[^]+[]+([^]+).*$//' | uniq -c | sort | tail
10
10
10
2014-09-04 16:19:11 +0000

Leute, auf Mavericks 10.9.4

ulimit -n 2048 funktioniert gut. Möglicherweise müssen Sie eine neue Anmeldesitzung starten.

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

Für das neueste MacOS (zum Zeitpunkt des Schreibens: 10.14.1) können Sie sudo launchctl limit maxfiles 64000 524288 verwenden (standardmäßig waren es 256), aber es funktioniert nur innerhalb der aktuellen Sitzung. Verwenden Sie den Job launchctl von @ninjaPixel https://superuser.com/a/1171028/760235 ) für eine dauerhafte Lösung.

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

Sie können

lsof -n
sysctl -w kern.maxfiles=20480

ausführen, die zu viele Dateien öffnen.

tötet sie dann .

oder

&001

ändert sie in eine größere Datei.

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

Nachdem alle Änderungen über meinem Java nicht mehr als 10000 Dateien erzeugt haben. Die Lösung war dieses jvm-Flag -XX:-MaxFDLimit

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

Ähnlich wie https://superuser.com/a/1171028/367819

Um die aktuellen Grenzen auf Ihrem Mac OS X-System zu überprüfen, führen Sie aus:

launchctl limit maxfiles

Die letzten beiden Spalten sind die weichen bzw. harten Grenzen.

Um die Grenzen für offene Dateien in Mac OS X Yosemite systemweit anzupassen, müssen Sie zwei Konfigurationsdateien anlegen. Die erste ist eine Property-List-Datei (aka plist) in /Library/LaunchDaemons/limit.maxfiles.plist, die die folgende XML-Konfiguration enthält:

<?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>

Dadurch wird das Limit für offene Dateien auf 200000 gesetzt. Die zweite Plist-Konfigurationsdatei sollte in /Library/LaunchDaemons/limit.maxproc.plist mit folgendem Inhalt gespeichert werden:

<?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-Dateien müssen im Besitz von root:wheel sein und die Berechtigungen -rw-r–r– haben. Diese Berechtigungen sollten standardmäßig vorhanden sein, aber Sie können sicherstellen, dass sie vorhanden sind, indem Sie sudo chmod 644 ausführen. Während die oben erläuterten Schritte dazu führen, dass systemweite Begrenzungen für offene Dateien beim Neustart korrekt gesetzt werden, können Sie sie manuell anwenden, indem Sie launchctl limit ausführen.

Zusätzlich zum Setzen dieser Begrenzungen auf Systemebene empfehlen wir, sie auch auf Sitzungsebene zu setzen, indem Sie die folgenden Zeilen an Ihre bashrc-, bashprofile- oder analoge Datei anhängen:

ulimit -n 200000
ulimit -u 2048

Wie die Plist-Dateien sollte Ihre bashrc- oder ähnliche Datei die Berechtigungen -rw-r–r– haben. An diesem Punkt können Sie Ihren Computer neu starten und ulimit -n in Ihr Terminal eingeben. Wenn Ihr System richtig konfiguriert ist, sollten Sie sehen, dass maxfiles auf 200000 gesetzt wurde.


Weitere Einzelheiten finden Sie in diesem Artikel. https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c

  • *

Denken Sie daran, Ihren Mac neu zu starten, damit die Werte wirksam werden.

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

Ich bin darauf gestoßen, als ich einen chmod -R machte, also habe ich es mit kleineren Schritten umgangen, z.B.

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