Ubuntu 17.04に参加しました。オープンファイルの制限を増やそうとしましたが、オンラインで見つけた指示がどれもうまくいかない。私は4096まで行くことができますが、それを超えることはできません。
$ ulimit -n
1024
$ ulimit -n 4096
$ ulimit -n
4096
それはうまくいきます。そうではありません。
$ ulimit -n 4097
bash: ulimit: open files: cannot modify limit: Operation not permitted
これは厳しい制限が原因であるようです。
$ ulimit -Hn
4096
これらの行を/etc/security/limits.confに追加してみました。
* hard nofile 65535
* soft nofile 65535
root soft nofile 65535
root hard nofile 65535
この行を/etc/pam.d/common-sessionおよび/etc/pam.d/common-session-noninteractiveにも追加しました。
session required pam_limits.so
それ以来、私は自分のコンピュータを再起動した。 limits.confを変更しても何も影響がないようです。厳しい制限はまだ4096に固定されていて、私がこれ以上高くならないようにしています。 開いているファイルの上限を増やすにはどうすればよいですか?
これが追加の設定情報です。
$ cat /proc/sys/fs/file-max
1624668
さて、私はついにこれを考え出しました。 /etc/security/limits.confに設定した制限は適用されていましたが、グラフィカルログインには適用されていませんでした。これは端末ウィンドウから次のように確認できます。
$ ulimit -n
4096
$ su mkasberg
Password:
$ ulimit -n
65535
より多くの研究が私をこの バグレポート に導きました。ログインシェルで使用される制限を変更するために、/etc/systemd/user.confに次の行を追加する必要があります。
DefaultLimitNOFILE=65535
この変更は機能しますが、ソフトリミットにのみ影響します。ハードリミットにも影響を与えるためには、同じ変更で/etc/systemd/system.confを修正しなければなりません。
/etc/pam.dに行った変更は必要ありませんでした。少なくともUbuntuでは、これはすでに機能しています。また、limits.confのroot
と*
の設定を変更する必要もありませんでした。少なくとも私のユースケースでは、mkasberg
の制限を変更するだけで十分です。
ulimit -n
で示される制限を増やしたい場合は、次のようにしてください。
次の行を使用して/etc/systemd/user.confおよび/etc/systemd/system.confを変更します(これによりグラフィカルログインが行われます)。
DefaultLimitNOFILE=65535
/etc/security/limits.confを次の行で修正します(これは非GUIログインの面倒を見ます)。
mkasberg hard nofile 65535
mkasberg soft nofile 65535
変更を有効にするためにコンピュータを再起動します。
/etc/security/limits.conf
ファイル内の何かを変更する必要はありません。systemdを使用している場合は無視されます。
(修正された ネットワーク上の別の質問への回答 を複製しています...)
デフォルトの/etc/systemd/system.conf
と/etc/systemd/user/conf
ファイルを編集したくないという人のための代替手段:
以下の内容で新しいファイル/etc/systemd/system.conf.d/limits.conf
を作成してください。
[Manager]
DefaultLimitNOFILE=65535
rootとしてsystemctl daemon-reexec
を実行します。
ログアウトして再度ログインする
新しい制限をulimit -n
で確認してください。
詳細は systemd-system.conf
のマンページ を参照してください。
TL; DR答えを集中する必要があると感じたので、見つけやすくなりました。年齢をかけてすべてのピースをまとめて正しく動作させるために...
考慮すべき2つの場所があります。
grep DefaultLimitNOFILE /etc/systemd/system.conf
DefaultLimitNOFILE=65535
またはここでより良い:
grep NOFILE /etc/systemd/system.conf.d/limits.conf
DefaultLimitNOFILE=65535
grep nofile /etc/security/limits.conf
user soft nofile 65535 user hard nofile 65535
またはここでより良い:
grep nofile /etc/security/limits.d/user.conf
user soft nofile 65535 user hard nofile 65535
ulimit -n -Hn -Sn
Ubuntu 17.04を使うと、私は説明したような厳しい制限を受けました。
[email protected]:~$ ulimit -Hn
4096
私はulimit
を使ってそれを下げることができましたが、質問がそれを記述しているようにそれを増やすことはできません。 ulimit
マニュアルの説明:
rootだけがhard limitを増やすことができます。
だから私は/etc/security/limits.conf
にこのような上限を設定しようとしました:
user hard nofile 9999
そしてssh localhost -l user
のような新鮮なログインは私に新しい制限を与えました:
[email protected]:~$ ulimit -Hn
9999
私はこれがあなたにとってもうまくいくことを願っています。
/etc/systemd/system/sonar.serviceを編集します
これらの2行をサービスの下に追加します
[サービス]
LimitMEMLOCK = infinity
LimitNOFILE = 65535
これは私のために働く。