非rootユーザーのオープンファイル制限を増やすにはどうすればよいですか?


144

これは、Ubuntuリリース12.04(正確)64ビットカーネルLinux 3.2.0-25-virtualで発生しています

ユーザーに許可される開いているファイルの数を増やしようとしています。これは、現在の1024の制限では十分ではないEclipse Javaアプリケーション用です。

私がこれまでに見つけた投稿によると、私は行を入れることができるはずです

/etc/security/limits.confは次のようになります。

soft nofile 4096
hard nofile 4096

すべてのユーザーに許可されるオープンファイルの数を増やすため。

しかし、それは私にとってはうまくいきません。問題はそのファイルとは関係ないと思います。

すべてのユーザーの場合、/ etc / security / limits.confの内容に関係なく、デフォルトの制限は1024です(そのファイルを変更した後に再起動しました)

$ ulimit -n
1024

/etc/security/limits.confのエントリにもかかわらず、これを増やすことはできません。

$ ulimit -n 2048

-bash:ulimitの:開いているファイルは:制限を変更することはできません:操作はない奇妙な部分は私が制限を変更することができるということです許可下向きが、上向きにそれを変更することはできません-でも、元の限界以下である数に戻ります。

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

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

ルートとして、私はその制限を好きなように上下に変更できます。/ proc / sys / fs / file-maxにあるシステム全体の制限を気にすることさえないようです。

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

# ulimit -n 188898
# ulimit -n 
188898

しかし、Eclipseをrootとして実行しても、「Too Many Open File」例外が原因でアプリケーションがクラッシュします。

これまでのところ、私は非ルートユーザーのオープンファイル制限を増やす方法を見つけていません。

どのようにこれを適切に行う必要がありますか?私は他のいくつかの投稿を見ましたが、運はありません!


6
また、を編集した後/etc/security/limits.conf、新しい最大制限を使用するには、ログアウトしてから再度ログインする必要がある場合があることに注意してください。私はこれを行いましたがulimit -Hs、1000000に上げたばかりのときに1000を表示することに困惑していました!その後、ログアウトして再度ログインすると、ulimitが新しい金額を表示しました。
セリン14年

GUIセッションでは、このスレッドが重要(Ubuntu 16+)であることがあります
ワルデ

回答:


142

このulimitコマンドはデフォルトでHARD制限を変更します。ユーザー(ユーザー)は下げることができますが、上げることはできません。

-Sオプションを使用して、0〜{ HARD }の範囲のSOFT制限を変更します。

私は実際ににエイリアスulimitulimit -S設定しているため、常にデフォルトでソフト制限に設定されます。

alias ulimit='ulimit -S'

問題については、のエントリに列がありません/etc/security/limits.conf

4つの列があるはずですが、最初の列は例にありません。

* soft nofile 4096
* hard nofile 4096

最初の列は、制限が適用されるWHOを説明しています。「*」はワイルドカードで、すべてのユーザーを意味します。rootの制限を上げるには、「*」ではなく「root」を明示的に入力する必要があります。

また/etc/pam.d/common-session*、次の行を編集して最後に追加する必要があります。

session required pam_limits.so

1
オープンファイル記述子の最大数のハード制限を変更するにはどうすればよいですか?私の問題は、Eclipseアプリケーションに必要な数のオープンファイルを許可する必要があることですが、4096の制限では十分ではなく、可能な限り500000に設定する必要があります。limits.confの設定あなたがスターで述べたように、それでもハード制限は動いていません。
iCode

1
さて、/ proc / sys / fs / file-maxの値は188,897であることがわかりました。そのため、上限は188,000(許可)から500,000(許可されていません)の間です。同時に65000以上のファイルを開く必要があるものがあるという心を揺るがします。ワオ。通常、それはビッグアイアンで処理されます。私はプログラミングについて疑っています、ええと、誤解。(すべての敬意を払ってください)
-lornix

4
それはそれでした:セッションにはpam_limits.soが必要でした、ありがとう!
致死者

13
最初は、最後にワイルドカードを見逃して/etc/pam.d/common-session*編集したばかりでcommon-session、再起動後も機能しませんでした。しかし、(のための同じ行を追加した後pam_limits.soに)common-session-noninteractiveulimit -n新鮮なログイン(必要な再起動なし)の後に新しい値を表示します。FWIWルートの制限を変更しようとしていました(のみ)。
ランバート14年

1
また、rootとしてログインした場合に値が異なるかどうかを確認します。 superuser.com/questions/1200539/…–
Robbo_UK

20

ユーザーごとにソフト制限とハード制限を使用する場合、次のようなものを使用できます。

su USER --shell /bin/bash --command "ulimit -n"

特定のユーザーに対して設定が機能しているかどうかを確認します。


5

これを機能させるのに苦労しています。

以下を使用すると、ユーザーの許可に関係なく更新できます。

sudo sysctl -w fs.inotify.max_user_watches=100000

4
私は同じ問題を抱えているので、私はこれを試してみましたが、それはうまくいきませんでした$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024
grepmaster
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.