Wie kann man das maximale Dateiöffnungslimit (ulimit) von Neo4j in Ubuntu erhöhen?


78

Derzeit ulimit -nzeigt 10000. Ich möchte es erhöhen 40000. Ich habe "/etc/sysctl.conf" bearbeitet und gesetzt fs.file-max=40000. Ich habe auch /etc/security/limits.confharte und weiche Werte bearbeitet und aktualisiert. Aber immer noch ulimit zeigt 10000. Nachdem ich all diese Änderungen vorgenommen hatte, startete ich meinen Laptop neu. Ich habe Zugriff auf das Root-Passwort.

usr_name@usr_name-lap:/etc$ /sbin/sysctl fs.file-max
fs.file-max = 500000

Folgende Zeilen in /etc/security/limits.conf- hinzugefügt

*     soft    nofile          40000
*     hard    nofile          40000

Ich habe auch folgende Zeile hinzugefügt in /etc/pam.d/su-

session    required   pam_limits.so

Ich habe alle möglichen Möglichkeiten ausprobiert, wie in anderen Foren angegeben, aber ich kann eine maximale Grenze von erreichen 10000, nicht darüber hinaus. Was kann das Problem sein?

Ich nehme diese Änderung vor, weil neo4jder maximale Fehler beim Öffnen der Dateilimits erreicht wird.


Sie haben es richtig gemacht, sudo ulimit -n 40000
starten

@ 0x90 Ich habe das System neu gestartet. Aber auch dann ändert es sich nicht.
Theharshest

6
Da es Ubuntu-spezifisch ist, gehört es wahrscheinlich tatsächlich zu askubuntu.com. Eine ähnliche Frage ist hier: askubuntu.com/questions/162229/…
Lambart


Nach dem Hinzufügen zu /etc/security/limits.conf, welcher Dienst soll neu gestartet werden, damit die Änderung wirksam wird?
Ashish Karpe

Antworten:


8

Ich benutze Debian, aber diese Lösung sollte gut mit Ubuntu funktionieren.
Sie müssen eine Zeile im neo4j-service- Skript hinzufügen .
Folgendes habe ich getan:

nano /etc/init.d/neo4j-service
Fügen Sie « ulimit –n 40000 » kurz vor der Zeile start-stop-daemon im Abschnitt do_start hinzu

Beachten Sie, dass ich die Version 2.0 Enterprise Edition verwende. Hoffe das wird dir helfen.


13
FWIW gibt es kein solches Skript unter Ubuntu Server 14.04. Meine Lösung wurde in dieser Frage (und der Antwort von lornix) gefunden: askubuntu.com/questions/162229/… - kurz gesagt, Sie müssen bearbeiten /etc/security/limits.confund/etc/pam.d/common-session*
Lambart

1
Ich sehe, dass der ursprüngliche Fragesteller nebenbei neo4j erwähnte. Es scheint, dass dies vielleicht zum Thema der Frage gehört, da es nichts mit Ubuntu zu tun hat.
Lambart

In Ubuntu 14.04 gibt es wirklich eine /etc/init.d/neo4j-serviceDatei und Martin Larivière hat Recht, das Einfügen uname -n 40000löst das Problem. Ich kenne die Unterschiede zwischen Ubuntu Server und Ubuntu nicht. Vielleicht haben Sie auch Recht. Ich füge dies hinzu, um zu verdeutlichen, dass das, was Martin geschrieben hat, das Problem mit einfachem Ubuntu 14.04 löst.
Grégoire C

3
@ Lambart, im Fall von neo4j-service funktioniert der common-session-*Trick nicht, da neo4j-service auf PAM basiert start-stop-daemonund dieses start-stop-daemonüberhaupt nicht nutzt. Die einzige Lösung besteht in der Tat darin, ulimit -n xxxdem Init-Skript einen expliziten Aufruf hinzuzufügen .
David Ammouial

2
Dies ist keine Lösung, dies ist ein Pflaster.
Tim Wachter

83

Was Sie tun, funktioniert nicht für Root-Benutzer. Möglicherweise führen Sie Ihre Dienste als Root aus und sehen die Änderung daher nicht.

Um das Ulimit für Root-Benutzer zu erhöhen, sollten Sie das *durch Root ersetzen . *gilt nicht für Root-Benutzer. Ruhe ist das gleiche wie du. Ich werde es hier noch einmal zitieren.

Fügen Sie der Datei die folgenden Zeilen hinzu: /etc/security/limits.conf

root soft  nofile 40000

root hard  nofile 40000

Fügen Sie dann die folgende Zeile in die Datei ein: /etc/pam.d/common-session

session required pam_limits.so

Dadurch wird das Ulimit für Root-Benutzer aktualisiert. Wie in den Kommentaren erwähnt, müssen Sie möglicherweise nicht einmal neu starten, um die Änderung zu sehen.


2
Sie müssen nicht neu starten, damit das neue Limit wirksam wird. Der Punkt zum Bearbeiten der Datei /etc/pam.d/common-session besteht darin, dass beim Erstellen einer neuen Sitzung die Grenzwertdateien verarbeitet werden.
Christopher Smith

1
Dieser Vorgang funktioniert. Es ist kein Neustart erforderlich. Melden Sie sich einfach ab und wieder an, um das Ergebnis zu sehen.
Bill Butler

2
Im Fall eines neo4j-Dienstes oder eines anderen Dienstes start-stop-daemon, der verwendet common-session-*wird, funktioniert der Trick nicht, da start-stop-daemonPAM überhaupt nicht genutzt wird. Es gibt keine andere Möglichkeit, als ulimit -n xxxirgendwo im Init-Skript einen expliziten Aufruf hinzuzufügen, bevor der Dienst gestartet wird.
David Ammouial

3
Arbeitete wunderbar auf Ubuntu 16.04.1 LTS
Andrew T Finnell

63

1) Überprüfen Sie das Systemlimit file-max:

$ cat /proc/sys/fs/file-max

Wenn der Grenzwert unter Ihrem gewünschten Wert liegt, öffnen Sie das sysctl.confund fügen Sie diese Zeile am Ende der Datei hinzu:

fs.file-max = 65536

Wenden Sie schließlich sysctlGrenzwerte an:

$ sysctl -p 

2) Bearbeiten /etc/security/limits.confund fügen Sie unten hinzu

* soft     nproc          65535    
* hard     nproc          65535   
* soft     nofile         65535   
* hard     nofile         65535

Diese Grenzwerte gelten nicht für rootBenutzer. Wenn Sie die rootGrenzwerte ändern möchten, müssen Sie dies explizit tun:

root soft     nofile         65535   
root hard     nofile         65535
...

3) Starten Sie das System neu oder fügen Sie am Ende von folgende Zeile hinzu /etc/pam.d/common-session:

session required pam_limits.so

Abmelden und erneut anmelden.

4) Überprüfen Sie die weichen Grenzwerte:

$ ulimit -a

und harte Grenzen:

$ ulimit -Ha
....

open files                      (-n) 65535

Referenz: http://ithubinfo.blogspot.in/2013/07/how-to-increase-ulimit-open-file-and.html


1
Stellen Sie sicher, dass Sie sich abgemeldet und wieder angemeldet haben, damit Ihre Änderungen wiedergegeben werden. Wenn Sie dies nicht mit dem Root-Benutzer überprüfen, können Sie dies für Ubuntu tungnome-session-quit
Mayank Saxena

/ proc / sys / fs / file-max IST NICHT DIE MAX-Datei, die vom System zugelassen wird !!! Auf meinem System ist es beispielsweise standardmäßig auf 1528702 eingestellt. Wenn Sie diesen Wert für die weichen / harten Grenzwerte in der Datei "limits.conf" auf diesen Wert setzen, kann der Benutzer die Grenzwerte von 1024 überhaupt nicht erhöhen. Ich musste limit.conf auf etwas viel konservativeres setzen, zB 256 * 1024 = 262144, und schließlich zeigt ulimit -a dasselbe für einen normalen Benutzer.
Sabujp

3

Ich hatte das gleiche Problem und brachte es zum Laufen, indem ich Einträge hinzufügte /etc/security/limits.d/90-somefile.conf. Beachten Sie, dass ich mich vollständig von der SSH-Sitzung abmelden und mich dann wieder anmelden musste, damit die Grenzwerte funktionieren.

Ich wollte das Limit für einen bestimmten Benutzer festlegen, der einen Dienst ausführt, aber es scheint, dass ich das Limit erhalten habe, das für den Benutzer festgelegt wurde, als den ich mich angemeldet habe. Hier ist ein Beispiel, um zu zeigen, wie das ulimit basierend auf dem authentifizierten Benutzer und nicht auf dem effektiven Benutzer festgelegt wird:

$ sudo cat /etc/security/limits.d/90-nofiles.conf
loginuser    soft    nofile   10240
loginuser    hard    nofile   10240
root         soft    nofile   10241
root         hard    nofile   10241
serviceuser  soft    nofile   10242
serviceuser  hard    nofile   10242

$ whoami
loginuser
$ ulimit -n
10240
$ sudo -i
# ulimit -n
10240    # loginuser's limit
# su - serviceuser
$ ulimit -n
10240    # still loginuser's limit.

Mit a können Sie *eine Erhöhung für alle Benutzer angeben. Wenn ich den Dienst als der Benutzer, den ich angemeldet habe, neu starte und ulimit -nzum Init-Skript hinzufüge , sehe ich, dass die Grenzen des anfänglichen Anmeldebenutzers vorhanden sind. Ich hatte keine Gelegenheit zu überprüfen, welche Benutzerlimits während eines Systemstarts verwendet werden, oder zu bestimmen, wie hoch das tatsächliche Nofile-Limit des von mir ausgeführten Dienstes ist (der mit dem Start-Stopp-Dämon gestartet wird).

Derzeit funktionieren zwei Ansätze:

  1. Fügen Sie dem Init-Skript unmittelbar vor dem Start-Stopp-Dämon eine Ulimit-Anpassung hinzu.
  2. Platzhalter oder umfangreichere ulimit-Einstellungen in der Sicherheitsdatei.

Wenn ich das tue, was du getan hast (ab whoami), bekomme ich zuerst 1024, dann 65536 (für root) und dann 65536 für den Benutzer. Aber der erste war der gleiche Benutzer. Haben Sie eine Erklärung dafür, ich bin verblüfft
Danielson

Das klingt bizarr. Wie wechselt man vom Benutzer zum Root und zurück zum Benutzer? Haben Sie sich nach dem Einstellen der Datei vollständig abgemeldet? Möglicherweise befinden Sie sich zunächst in einer zwischengespeicherten Sitzung und verwenden dann eine neue Sitzung, je nachdem, wie Sie zum Benutzer zurückkehren.
Brett

Ich starte immer wieder neu, nur um sicherzugehen. Auch versuchte Einstellung /etc/sysctl.conf-> fs.file-max = 1000000sollte es global für alle Benutzer beheben, auch kein Ergebnis. Es ist, als würde mich ein Prozess ignorieren. Ich wechsle von Benutzer zu Root zu Benutzer, wie Sie beschrieben haben, von root -> user using su - my_user_name. Was darauf hinweist, dass das System weiß, was es für diesen Benutzer verwenden soll, aber nicht ...
Danielson

2

Sie können das Init-Skript ändern, neo4jum dies ulimit -n 40000vor dem Ausführen zu tun neo4j.

Ich kann jedoch nicht anders, als das Gefühl zu haben, dass Sie den falschen Baum bellen. Benötigen Sie neo4jlegitimerweise mehr als 10.000 offene Dateideskriptoren? Dies klingt sehr nach einem Fehler neo4joder der Art und Weise, wie Sie ihn verwenden. Ich würde versuchen, das anzusprechen.


Ich fange an zu neo4jbenutzen neo4j start. Wo finde ich das Init-Skript dafür?
Theharshest

versuchen Sie ulimit -n 40000vorher zu neo4j start
tippen

2

Ich habe viele Probleme damit, das zum Laufen zu bringen.

Wenn Sie Folgendes verwenden, können Sie es unabhängig von Ihrer Benutzerberechtigung aktualisieren.

sudo sysctl -w fs.inotify.max_user_watches=100000

Bearbeiten

Ich habe dies gerade von einem anderen Benutzer auch auf einer anderen Stackexchange-Site gesehen (beide funktionieren, aber diese Version aktualisiert die Systemeinstellungen permanent und nicht vorübergehend):

echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; 
sudo sysctl -p

2

Führen Sie diesen Befehl aus, um eine *_limits.confDatei unter zu erstellen/etc/security/limits.d

echo "* soft nofile 102400" > /etc/security/limits.d/*_limits.conf && echo "* hard nofile 102400" >> /etc/security/limits.d/*_limits.conf

Verlassen Sie einfach das Terminal und melden Sie sich erneut an und überprüfen ulimit -nSie, ob es für * Benutzer festgelegt ist


Einfache und hilfreiche Antwort.
Sumanth

2

Setzen Sie sowohl die weichen als auch die harten Grenzen

Ich bin sicher, dass es wie beabsichtigt funktioniert, aber ich werde es hier für alle Fälle hinzufügen. Der Vollständigkeit halber wird hier das Limit festgelegt (Syntax siehe unten): /etc/security/limits.conf

some_user       soft    nofile          60000
some_user       hard    nofile          60000

und mit folgendem in /etc/pam.d/common-session aktiviert:

session required pam_limits.so

Wenn Sie nur das harte Limit festlegen, ulimit -awird die Standardeinstellung (1024) angezeigt: Wenn Sie nur das weiche Limit festlegen, wird das Limit ulimit -a angezeigt (4096).

Wenn Sie beide ulimit -aeinstellen, wird das weiche Limit angezeigt (natürlich bis zum harten Limit).


2

Ich habe es so gemacht

echo "NEO4J_ULIMIT_NOFILE=50000" >> neo4j
mv neo4j /etc/default/

1

ULIMIT-Konfiguration:

  1. Login durch root
  2. vi security / limits.conf
  3. Machen Sie unten Eintrag

    Ulimit-Konfigurationsstart für Website- Benutzer

    website   soft   nofile    8192
    website   hard   nofile    8192
    website   soft   nproc    4096
    website   hard   nproc    8192
    website   soft   core    unlimited
    website   hard   core    unlimited
    
  4. Machen Sie unten Eintrag für ALLE BENUTZER

    Ulimit-Konfiguration für jeden Benutzer

    *   soft   nofile    8192
    *   hard   nofile    8192
    *   soft   nproc    4096
    *   hard   nproc    8192
    *   soft   core    unlimited
    *   hard   core    unlimited
    
  5. Nach dem Ändern der Datei muss sich der Benutzer abmelden und erneut anmelden, um die neuen Werte anzuzeigen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.