web-dev-qa-db-ja.com

spawn-fcgi / Gentooでログにトレースなしで高速CGiphpがクラッシュする

最近、ApacheからNginx/fastcgiソリューションに移行し、Fedoraシステムで実行して問題はありませんでしたが、すべてGentooに移行したため、Spawn-fCGI/fastcgi phpデーモンが停止し、見つかりません。/var/log/messagesでエラーが報告されるので、なぜこれが発生するのかわかりません。

Fastcgiは、confファイルとinit.d起動スクリプトが異なるため、gentooではFedoraディストリビューションとはどういうわけか異なることがわかりました。誰かが私にそれをより安定させるのを手伝ってもらえますか?私が持っていたリクエストの数は、Fedoraで持っていたものと何ら変わらないので、ディストリビューションに付属しているデフォルトのconfを使用します。そして、約数時間でそれは単に死にます...

どうもありがとうございました

3
PartySoft

これが私の/etc/conf.d/php-cgiファイルの内容です(これは元のspawn-fcgi conf.dファイルの変更されたコピーです):

# The FCGI process can be made available through a filesystem socket or
# through a inet socket. One and only one of the two types must be choosen.
# Default is the inet socket.

# The filename specified by
# FCGI_SOCKET will be suffixed with a number for each child process, for
# example, fcgi.socket-1. 
# Leave empty to use an IP socket (default). See below. Enabling this, 
# disables the IP socket.
# 
FCGI_SOCKET=

# When using FCGI_PORT, connections will only be accepted from the following
# address. The default is 127.0.0.1. Use 0.0.0.0 to bind to all addresses.
#
FCGI_ADDRESS=127.0.0.1

# The port specified by FCGI_PORT is the port used
# by the first child process. If this is set to 1234 then subsequent child
# processes will use 1235, 1236, etc.
#
FCGI_PORT=2000

# The path to your FastCGI application. These sometimes carry the .fcgi
# extension but not always. For PHP, you should usually point this to
# /usr/bin/php-cgi.
#
FCGI_PROGRAM=/usr/bin/php-cgi
#FCGI_PROGRAM=/usr/bin/spawn-fcgi

# The number of child processes to spawn. The default is 1.
#
FCGI_CHILDREN=1

# If you want to run your application inside a chroot then specify the
# directory here. Leave this blank otherwise.
#
FCGI_CHROOT=

# If you want to run your application from a specific directiory specify
# it here. Leave this blank otherwise.
#
FCGI_CHDIR=

# The user and group to run your application as. If you do not specify these,
# the application will be run as root:root.
#
FCGI_USER=nginx
FCGI_GROUP=nginx

# Additional options you might want to pass to spawn-fcgi
#
#FCGI_EXTRA_OPTIONS=

# If your application requires additional environment variables, you may
# specify them here. See PHP example below.
#
#ALLOWED_ENV="PATH"

# PHP ONLY :: These two options are specific to PHP. The first is the number
# of child processes to spawn. The second is the number of requests to be
# served by a single PHP process before it is restarted.
#
PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=500
#
# For this to work you would set
ALLOWED_ENV="PATH PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS"

次に、init.dファイルを作成するには、conf.dファイル(私の場合はphp-cgi)の名前で元のspawn-fcgiinit.dファイルへのシンボリックリンクを作成します。

% Sudo ln -s /etc/init.d/spawn-fcgi /etc/init.d/php-cgi

次に、次のコマンドで開始できます。

% /etc/init.d/php-cgi start

デフォルトのブートレベルに追加します

% rc-update add php-cgi default

あなたが持っている唯一の自由度は、これらの2つの値を微調整することです。

PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=500

より多くの子が同時により多くの要求を処理できますが、より多くのメモリを消費します。
ハードウェア構成に応じて、これら2つの設定を調整します。

1
Studer

ここでまったく同じ問題が発生しました...無限のwhileループにラップされた(フォークしないように)インタラクティブモードでspawn-fcgiを実行することで修正しました(再起動するように)。

1
SameProblem

私は同じ問題を抱えています...

私は2つの解決策に遭遇しました:

  • cron the fastcgi restart: "0 * * * * /etc/init.d/fastcgirestart"。それは醜いですが、それは動作します
  • この問題は、久しぶりに不安定になるphp-cgiプロセスに起因しているようです。これは、環境変数「export PHP_FCGI_MAX_REQUESTS = 500」により、最大リクエスト数の後にphp-cgiにプロセスを更新させるように修正できます。
0
Benoit Courtine