[PHP-users 30547] Re: session_start()から先に進まない
Reiji Matsumoto
matsumoto @ spline.oc.to
2006年 10月 16日 (月) 20:23:03 JST
松本です。こんにちは。
大分、見えてきましたね。
> 私はまだ見方がよくわからないのですが、これはADODB経由で
> 使っているPostgreSQLの、ポーリングで帰ってきてないとい
> うことなのでしょうか…?
> (gdb) bt
> #0 0x900bc8bc in poll ()
> #1 0x0149ad09 in pqSocketPoll ()
> #2 0x0149abd2 in pqSocketCheck ()
> #3 0x0149aab5 in pqWaitTimed ()
> #4 0x0149aa87 in pqWait ()
> #5 0x01497b5e in PQgetResult ()
> #6 0x0149805c in PQexecFinish ()
> #7 0x01497d2b in PQexec ()
> #8 0x056bb924 in php_pgsql_do_connect ()
> #9 0x056bbd8b in zif_pg_pconnect () ※←ここ重要!
> #10 0x02359379 in zend_do_fcall_common_helper_SPEC ()
> #11 0x0235ec71 in ZEND_DO_FCALL_SPEC_CONST_HANDLER ()
> #12 0x02358ea8 in execute ()
PHPの関数はC言語のソースファイルでPHP_FUNCTIONというマクロを
使って定義しますが、その時'zif_'というプレフィックスを付けます。
ですので、pg_pconnect()関数の中で止まっているみたいです。
PostgreSQLへの接続待ちが「障害A」の正体かも知れませんね。
pg_pconnectは最大で[httpdのプロセス数×接続文字列の種類]
のコネクションを作りますので、かえってレスポンスが低下する
場合があります。
ADODBでのやり方は私は分からないのですが、持続的接続をやめ
てみたら如何でしょうか。コネクションプールにはpgpool等を
利用すると良いと思いますが、取りあえずpg_pconnect()では
無く、pg_connect()を利用する方法でADODBを利用し、問題が
無いようでしたら、そのまま運用するのも手だと思います。
PHP-users メーリングリストの案内