apache2ctl:87:ulimit:エラー設定制限(操作は許可されていません)


12

サーバーは正常に動作しています-または少なくともそうです-しかし、常に次のエラーがあります:

apache2/usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)

Debian Wheezy上のApache 2.2.22-9で発生します。

# apache2ctl configtest

/ usr / sbin / apache2ctl:87:ulimit:エラー設定制限(操作は許可されていません)
構文OK

# service apache2 reload

[....] Webサーバー設定の再読み込み:apache2 / usr / sbin / apache2ctl:87:ulimit:エラー設定制限(操作は許可されていません)
。OK

# service apache2 restart

[....] Webサーバーの再起動:apache2 / usr / sbin / apache2ctl:87:ulimit:エラー設定制限(操作は許可されません)
...待機中/ usr / sbin / apache2ctl:87:ulimit:エラー設定制限(操作許可されていません)
。OK

# service apache2 status

Apache2が実行されています(pid 32045)。


1
/etc/security/limits.confおよび/etc/security/limits.dの内容をご覧ください。APACHE_ULIMIT_MAX_FILES(/ usr / sbin / apache2ctlで参照)変数がそのファイルの制限よりも大きい値に設定されているようです。
ハブ

回答:


16

これは役立つかもしれません:-http : //ubuntuforums.org/showthread.php ? p = 11950245#post11950245

sudo service apache2 restart # no errors
service apache2 restart      # errors

おかげで、私はすでにそれを見ましたが、助けにはなりません。sudoを使用しても使用しなくても何も変わりません。同じエラーが発生します。
パスカルポレヌス

1
私のために働いた!完全に忘れましたsudo
ThomasReggi

2
+1マジックはsudo常にトリックを行います
自転車

最悪の場合、これが適用され、自宅のコンピューターで動作しますが、サーバーでは動作しません。コンテナ内では違いはありません...私には意味がありません
スーパーヒーロー

5

問題は/ usr / sbin / apache2ctl(Debianの場合)に起因します。見てみな:

~$ grep ULIMIT /usr/sbin/apache2ctl
ULIMIT_MAX_FILES="${APACHE_ULIMIT_MAX_FILES:-ulimit -n 8192}"
if [ "x$ULIMIT_MAX_FILES" != "x" ] ; then
    $ULIMIT_MAX_FILES

ここでは、許可されているオープンファイルの数を8192に設定しています。または、あなたの場合は、試行して失敗します。

そのため、apache2ctlでエラーが発生しないようにするには、次の2行を追加して/etc/security/limits.confファイルのシステム設定を調整します。

*               soft    nofile          8192
*               hard    nofile          8192

他に何が影響するかわからないので、必要以上に増やしませんでした(8192)。ただし、これは警告を取り除きます。

その後、システムをリブートする必要があるかどうかはわかりません。なぜなら、私には馴染みのないulimitsに動的な要素があるからです。ただし、ファイルの現在のulimit numが何であるかを確認するのに十分簡単に​​テストできます。

ulimit -n

あなたは私がそれを見つけた場所を読みたいと思うかもしれません:stackoverflow-設定ulimit


Apacheの制限をどのように逆にして削減しますか?
eri0o

私が答えに投稿したスクリプトがapacheによってインストールされたapache2ctlスクリプトから直接出ていることを確認したら、そのスクリプトファイルに移動して変更する必要があります。すべてのApacheアップグレードでのアクション。
アダム

2

1. ホストマシンのulimitの値を確認して変更します。ファイル/ etc / profileに値を追加して、有効にします。

ulimit -u 10240
ulimit -n 8192     #This configuration is what we most needed
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited

source /etc/profile

または次のことができます。

sudo sh -c 'printf "\nulimit -HSn 999999\n" >> /etc/sysconfig/docker'

2. dockerサービスを再起動し、構成を有効にします。

sudo service docker restart

3.コンテナ内のulimitをテストします。

ulimit -n

これが私のテスト結果です!

ヒント:次のコマンドを試すこともできます(前提条件:ホストマシンのulimitは8192より大きい必要があります)が、失敗します。

docker run --privileged -it -p xxxx:80 --ulimit data=8192 linode/lamp /bin/bash
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.