手上有一排機器硬體規格都是一樣的, OS跟上面跑的軟體也都一模一樣.
OS是FreeBSD 7.0-RELEASE(with ULE scheduler)
跑 lighttpd + php5(fast-cgi)
但其中某兩台機器特別奇怪,
php request常常要等80sec才能跑完.(奇怪的數字@@)
經過努力把範圍narrow down之後,
發現問題是出在 mysql_pconnect()
寫了一支php小程式做測試, 發現如果是用mysql_connect()就一切正常,
但是若改用mysql_pconnect()就常常會卡住80sec @@
<?
mysql_pconnect("x.y.z","aaa","bbb");
mysql_select_db("ccc");
$sql="SELECT a FROM b";
mysql_query($sql);
echo "done";
?>
接著, trace php5-mysql 的實作, 發現 mysql_pconnect 的邏輯是這樣的:
1. 從 connection pool 挑一個出來
2. 利用 mysql_ping() 看看連線是否還活著然後決定該不該重連
看來是卡在 mysql_ping() 會卡個80sec左右的感覺.
不過我在網路上沒找到 mysql_ping() 的 timeout 是多久,
回頭翻了一下 mysql c library的code, 一時間也沒看出頭緒.
後來又努力了一陣子, 最後宣告放棄,
直接在 php.ini 加上 mysql.allow_persistent = Off 當作暫時的work-around.
真的是莫名其妙的事情, 其他台都不會這樣阿@@
有人碰過類似的狀況嗎?
- Mar 19 Wed 2008 11:37
php5 mysql_pconnect 的奇怪問題 (with lighttpd)
close
全站熱搜
留言列表
發表留言