首先,我知道这是一个有问题的设置,但是 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