0

まず、これが疑わしい設定であることはわかっていますが、fastcgiまたはfcgidのパフォーマンスにより、試してみる必要があります。問題は、接続が閉じられないために負荷テストが完了しないことです。40の同時接続のみにプッシュすると、状況は南に進みます。接続は数分間確立された状態になります。

netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c
      1 CLOSE_WAIT
     72 ESTABLISHED
      8 LISTEN

次に、数分後、それらはCLOSE_WAITとESTABLISHEDの組み合わせに分割されます。

netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c
     41 CLOSE_WAIT
     32 ESTABLISHED
      8 LISTEN

そしてさらに10分後、これは変わっていません。これらは、クライアントからWebサーバー、およびWebサーバーからmysqlサーバーの組み合わせです。mysql接続を確立しないphpページに対してテストすると、すべてが正常に機能します。

PHPをカスタムコンパイルし(以下の構成)、apt-get(Ubuntu 10.04)を介してapache-mpm-workerをインストールしました。mysql、mysqli、およびpdoモジュール用にmsyql_configとmysqlndの両方を使用してPHPをコンパイルしてみました。これは単に、醜い頭を育てている非スレッドセーフなライブラリでしょうか?

./configure --prefix=/usr/local --with-apxs2=/usr/bin/apxs2 --disable-cgi --with-layout=GNU --with-config-file-path=/etc/php5/apache2 --with-config-file-scan-dir=/etc/php5/apache2/conf.d --disable-ipv6 --without-kerberos --with-pcre-regex=/usr --with-zlib --with-zlib-dir=/usr --enable-bcmath --with-bz2 --enable-calendar --enable-ctype --with-curl=shared,/usr --without-qdbm --without-gdbm --with-db4 --with-libxml-dir=/usr --enable-exif --disable-ftp --with-gd=shared,/usr --enable-gd-native-ttf --with-gmp=shared,/usr --with-jpeg-dir=shared,/usr --with-xpm-dir=shared,/usr/X11R6 --with-png-dir=shared,/usr --with-freetype-dir=shared,/usr --with-gettext --with-mhash=shared,/usr --with-ldap=shared,/usr --with-ldap-sasl=/usr --with-mcrypt=shared,/usr --enable-mbstring --without-msql --without-mssql --with-pspell=shared,/usr --without-mm --disable-shmop --enable-soap --enable-sockets --with-regex=php --disable-sysvshm --disable-wddx --with-xmlrpc=shared --with-iconv --with-xsl=shared,/usr --enable-zip --with-pear=/usr/share/php --with-tsrm-pthreads --enable-maintainer-zts --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=myslqnd --with-libdir=lib64

4

1 に答える 1

0

私のために働いた1つの解決策は、apacheセットアップに次のフラグを追加することでした(私はリポジトリを使用しません):

export CFLAGS=-DNO_LINGCLOSE
./configure ...

これにより、ピアからFINパケットを受信したときに、apacheがソケットを閉じるように強制されました。

デフォルトでは、ピアがFINを送信した後、Apacheはソケットをclose_waitに配置します。この時点で、ソケットはローカルピアからのFINを待って半分閉じていると見なされます。これは通常、アプリケーションを終了することによって行われます。Apacheはデフォルトでこれをタイムアウトさせます。通常、セットアップに応じて2〜5分です。

于 2012-06-05T19:15:43.467 に答える