Ich versuche, die maximale Anzahl offener Dateien für den aktuellen Benutzer zu erhöhen
> ulimit -n
1024
Ich versuche mich zu steigern und scheitere wie folgt
> ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted
Also mache ich die natürliche Sache und versuche, mit zeitweiliger Erlaubnis zu laufen, aber scheitere
> sudo ulimit -n 4096
sudo: ulimit: command not found
Fragen
- Wie kann man ulimit erhöhen?
- Warum passiert dies?
Fedora verwenden 14
ulimit 4096
funktioniert nicht. Ich denke-n
ist richtig. Als Proof of Concept klappt es wenn ich erstmalsudo su - root
(aber nur für root wechsle).Antworten:
ulimit
ist eine eingebaute Shell, kein externer Befehl. Es muss eingebaut werden, da es auf den Shell-Prozess selbst einwirkt, z. B .cd
: Die Grenzwerte sind wie das aktuelle Verzeichnis eine Eigenschaft dieses bestimmten Prozesses.sudo bash -c 'ulimit -n 4096'
würde funktionieren, aber es würde das Limit für densudo
nur von aufgerufenen Bash-Prozess ändern , was Ihnen nicht helfen würde.Für jede Grenze gibt es zwei Werte: die harte Grenze und die weiche Grenze. Nur root kann das harte Limit erhöhen. Jeder kann das harte Limit senken und das weiche Limit kann in beide Richtungen geändert werden, mit der einzigen Einschränkung, dass es nicht höher als das harte Limit sein darf. Die weiche Grenze ist der tatsächliche Wert, auf den es ankommt.
Daher müssen Sie festlegen, dass für alle Prozesse ein festes Limit für offene Dateien von mindestens 4096 festgelegt wird. Sie können das weiche Limit bei 1024 belassen. Erhöhen Sie das weiche Limit, bevor Sie den Prozess starten, für den viele Dateien erforderlich sind. In
/etc/security/limits.conf
, fügen Sie die ZeilenWo
paislee
ist der Name des Benutzers, unter dem Sie Ihren Prozess ausführen möchten? Führen Sie in der Shell, die den Prozess startet, für den Sie ein höheres Limit festlegen möchten, Folgendes ausdie weiche Grenze auf die harte Grenze zu erhöhen.
quelle
sudo bash -c
sind,sudo -i
welche eine Login-Shellsudo -s
starten und welche eine Shell starten. Es gelten dieselben Einschränkungen, dies kann jedoch unter anderen Umständen nützlich sein.sudo sh -c "ulimit -c 1024 && exec su $LOGNAME"
. Aber beideulimit -c 1024
undexec su $LOGNAME"
wirkt sich nur auf die Schale geschaffen durchsudo
, so was ist der Zweck des Befehls?exec su $LOGNAME"
tut auch nichts Sinnvolles, um das geänderte Limit zu nutzen. Ich bin sehr verwirrt und frage mich, ob mir etwas fehlt.ulimit -Sn unlimited
dies bei den meisten Shells nicht funktioniert. Die richtige Methode besteht darin, zuerst anzurufenulimit -a
und dann anzurufen,ulimit -n <number>
wobei <number das harte Limit ist (die rechte Spalte).Öffnen Sie die Datei
/etc/security/limits.conf
und fügen Sie die Zeile hinzu<user> soft nofile <value>
. für die Verwendung von "ulimit
change to root user" und versuchen Sie dasselbe.quelle