別のユーザーのulimitを確認し、開いているファイルを変更するにはどうすればよいですか?


18

Gearmanユーザーとして実行中のプロセスがあり、open filesこの厄介なエラーが発生しないように変更したいと思います。

エラー2014-09-12 17:49:14.000000 [main] accept(Too many open files)-> libgearman-server / gearmand.cc:788

Ubuntuでulimitを別のユーザーとして実行し、開いているファイルを変更するにはどうすればよいですか?現在、ギアマンとしてログインしていませんが、ルートアクセス権は持っています。私はこれを試しました:

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

ここで推奨されるとおりですが、何も出力されません。

$ su gearman --shell /bin/bash --command "ulimit -n"
Password: 
$

回答:


25

Google検索中に偶然見つけて、トニーのコメントが有用であることがわかったという理由だけでこれを再考します。プロセスレベルで制限が設定されているのは事実ですが、特定のユーザーの制限を決定する方法は開始したプロセスを見つけてから、を確認しproc/${id}/limitsます。

具体的には:

$ ps -u username  # look up processes owned by user
$ sudo grep 'open files' /proc/${id}/limits  # find "Max open files" line for process ID

2
これは受け入れられた答えであり、Debianのredisユーザーの現在のulimitを見つけるために使用されます。
-tholu

6

ulimitコマンドを実行すると、実行中のプロセスulimit(シェル)とすべてのサブプロセスにのみ影響します。したがって、を実行するとbash --command "ulimit -n"、bashのそのインスタンスの開いているファイルの数にのみ影響し、bashは終了するため、将来のプロセスは影響を受けません。

したがって、(実際のプロセスのオープンファイルの制限を増やすために)目的を達成limits.confするには、特定のGearmanユーザーのオープンファイルの制限を高めるために編集する方がおそらく理にかなっています。

limits.confの例を他の場所またはここで参照してください。


それも私が見つけたものですが、それが「効果を発揮した」かどうかを確認したいと思います。私はもう持っていた問題を取得していないので、私はそれがあったと確信しています
トニー

10
これはあなたがチェックする方法ですmore /proc/<proc_id>/limits ...答えに追加する価値があるかもしれません
トニー14

5
価値があまりにもあるlimits.confの場所に言及:/etc/security/limits.conf
UpTheCreek

1

を使用してみてくださいsu - <USERNAME> -c ulimit' -Hn'。CEntOS 7でテストしたところ、動作します。


1
<USERNAME>ログインできない(nologinシェルがある)場合、これは機能しません。
dr01
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.