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。我尝试使用 msyql_config 和 mysqlnd 为 mysql、mysqli 和 pdo 模块编译 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

对我有用的一种解决方案是将以下标志添加到 apache 设置中(我不使用 repo):

export CFLAGS=-DNO_LINGCLOSE
./configure ...

然后,当从 Peer 接收到 FIN 数据包时,这会迫使 apache 关闭套接字。

默认情况下,Apache 会在对等端发送 FIN 后将套接字放入 close_wait。此时,套接字被视为半关闭,等待本地对等方的 FIN,通常通过结束应用程序来完成。默认情况下,Apache 允许超时,通常为 2-5 分钟,具体取决于设置。

于 2012-06-05T19:15:43.467 回答