[PHP-users 24924] OCI8関数使用時にHTTPDプロセスのファイルディスクプリタが開放されない

村上 義孝 y-murakm @ tkym.hek.co.jp
2005年 3月 16日 (水) 19:58:52 JST


村上と申します。

PHPからOCI8関数を使用してOracleにアクセスを行ったところ、httpdプロセスが
オープンしているファイルディスクプリタが開放されないという現象について質
問させてください。

【環境/バージョン】

OS:Redhat Linux AS 2.1
Webサーバ:Apache/1.3.31
PHP:4.3.9
DB :Oracle9i Release 9.2.0.2.0

【内容】

PHPからOCI8関数を使用してOracleにアクセスを行ったところ、httpdプロセスが、
%ORACLE_HOME/rdbms/mesg/ocija.msb
%ORACLE_HOME/rdbms/mesg/ocius.msb
という2種類のファイルディスクプリタをオープンするのですが、DBの切断
(OCILogoff)を行っているにも関わらず、プログラム終了後も開放されないよ
うです。

#この為に、ファイルディスクプリタのオープン数がシステム上限に達し、
Apacheが再起動に追い込まれてしまいました。

検証を進めたところ、アクセス内容に関わらず、単純に接続→切断を行うPHPプ
ログラムでも同様の事象が発生するところまでは突き止められました。
検証に使用したプログラムは以下の通りです(ユーザID等は適当な値が入りま
す)。

------------------------------------------
<?
define("USERID","userid");
define("Pw","password");
define("SERVICENAME","servicename");

$conn = OCILogon( USERID , Pw , SERVICENAME );

$result = OCILogoff($conn);

?>
------------------------------------------

OCILogoff を行う事により、DBアクセス関連のリソースは開放されると思ってい
たのですが、この考えが間違っているのでしょうか? 若しくは上記のプログラ
ムになんらかの間違いがありますでしょうか?

上記について解決策、または回避策等ありましたらご教授ください。


------------------------------------------------------------
村上 義孝(E-mail:y-murakm @ tkym.hek.co.jp)
------------------------------------------------------------


PHP-users メーリングリストの案内