web-dev-qa-db-ja.com

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

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

$ 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

そこにstillどういうわけか非rootユーザーの最大4096の制限があるようです。

12
Caffeine Coma

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

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

12
TomTomTom

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

基本的に、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)の制限を設定しますが、/etc/security/limits.confを編集して/etc/security/limits.confファイルを編集し、次のように制限を設定することにより、httpd(または他のユーザー)ユーザーを特定の制限に制限できます:

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
4

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

0
Maicon Santana