非rootユーザーに対して最大4096個のオープンファイルを取得できないのはなぜですか?


13

nofileこの問題に関連するStackExchangeのすべての回答に従うにもかかわらず、Ubuntu 14.04の非ルートユーザーの制限を増やすことはできないようです。これまでのところ:

$ cat /etc/security/limits.d/custom.conf
@www-data hard nofile 50000
@www-data soft nofile 50000
# even tried specifying the username directly:
myuser hard nofile 50000
myuser soft nofile 50000

$ grep 'limits' /etc/pam.d/common-session*
/etc/pam.d/common-session:session required        pam_limits.so
/etc/pam.d/common-session-noninteractive:session required        pam_limits.so

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

再起動、ログイン、および:

$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted

そこはまだ何とかroot以外のユーザーのための4096の最大の限界のようです。


Ubuntu 16.10デスクトップでもまったく同じ問題が発生しています。私が何を試みても、制限は1024または4096のいずれかです。
NathanAldenSr17年

回答:


13

Ubuntu 14.04を使用して、説明されているハード制限を取得しました:

user@notebook:~$ ulimit -Hn 4096  

ulimitを使用して値を下げることはできますが、質問で説明されているように値を上げることはできません。ulimitのマニュアルに記載されているとおり:

ルートのみがハード制限を増やすことができます

だから私は/etc/security/limits.confこのように高い制限を設定しようとしました:

user hard nofile 9999 

のような新しいログインssh localhost -l userは私に新しい制限を与えました:

user@notebook:~$ ulimit -Hn 9999

これがあなたにも役立つことを願っています。


TomTomTomに感謝します。/etc/security/limits.d/custom.confにはすでにこのような変更があります。あなたが提案したように/etc/security/limits.confに直接入れてみましたが、それでも「bash:ulimit:open files:変更できませんlimit:操作は許可されていません」と表示されます。
カフェイン

私-ただ推測
-2

1
不完全なコメントを編集するには時間がかかりすぎました。ここに行きます:I-ちょうど推測-これがあなたのために働かない2つの理由のうちの1つ:1. /etc/security/limits*ログインメカニズムによって読まれない-まだ未知の理由のため。2.ハード制限は他の場所で4096に設定され、「rootのみが増加できます...」。.bashrc(シェルに応じて)のようにプロファイルを確認したり/etc、のように制限が設定されている他の場所を確認したりできますfind /etc | grep -e ulimit -e 4096 -e nofile。ところで:あなたはsshを試しましたか?そして:/etc/ssh/sshd.conf何らかの理由でPAMを避けるように変更 しましたか?
-TomTomTom

はい-すべてのログインはssh経由です。UsePAMを無効にしました-いくつかのガイドは、ssh-keyベースのログインのみを許可する一環としてこれを推奨しています。一時的にオンにしてみて、それが問題かどうかを確認します。ありがとう!
カフェイン

Afaik、PAMは読むべきもの/etc/security/limits*です-これを確認するためだけにPAMを有効にしようとするかもしれません。PAMを無効にして、PAMがどのような違いをもたらし、結果を報告するかを確認します。 - - はい!それでおしまい!PAMを無効にすると、私の制限も4096になりますが、で9999に設定され/etc/security/limits.confます。
-TomTomTom

4

この記事では、あなたの問題に対処すると思います。

基本的に、ulimitコマンドを使用して、利用可能なリソースを増やす必要があります。

例えば:

次のコマンドコマンドを使用して、開いているファイル記述子の最大数を表示します。

cat /proc/sys/fs/file-max

ハード値とソフト値を表示するには、次のようにコマンドを発行します。

# ulimit -Hn
# ulimit -Sn

httpdまたはoracleユーザーのハード値とソフト値を表示するには、次のコマンドを発行します。

# su - username

最大ファイル数を修正するには、次のようにカーネル変数/ proc / sys / fs / file-maxに新しい値を設定して、開いているファイルの最大数を増やすことができます(ルートとしてログインします):

# sysctl -w fs.file-max=100000

上記のコマンドは、制限を100000ファイルに強制します。/etc/sysctl.conf再編集後に設定がそのまま残るように、ファイルを編集して次の行を配置する必要があります。これを行うには、次のように構成ディレクティブを追加します。

fs.file-max = 100000

ファイルを保存して閉じます。変更を有効にするか、次のコマンドを入力するには、ユーザーはログアウトしてから再度ログインする必要があります。

# sysctl -p

コマンドを使用して設定を確認します。

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

または:

# sysctl fs.file-max

上記の手順は、システム全体のファイル記述子(FD)の制限を設定しますが、次のようにhttpd編集して/etc/security/limits.confファイルを編集/etc/security/limits.confし、制限を設定することにより、ユーザー(または他のユーザー)を特定の制限に制限できます。

httpd soft nofile 4096
httpd hard nofile 10240

次に、それらを確認します。

# su - httpd
$ ulimit -Hn
$ ulimit -Sn

他のLinuxディストリビューションで問題が発生した場合は/etc/pam.d/login、次を確認してpam_limits.so、有効になっていることを確認してください。

session required pam_limits.so

2
こんにちはブルック。残念ながら、私はすでにその記事の提案を試しました。「ulimit -Hn」は私にとって新しいものでしたが、4096を出力します。
カフェイン

0

サービスの場合、/etc/systemd/system/{ServiceName}.service追加で制限を設定してみることができますLimitNOFILE=65536


Ubuntu 14.04はデフォルトでsystemdを使用していません。
-number5

Ubuntuの16.04、Tomcatの8は私のために働いた
Arjang
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.