[PHP-users 23477]DBコネクションを切断してもFDが解放されません
V l
i9niitaka @ hotmail.com
2004年 10月 12日 (火) 11:56:39 JST
はじめまして。新原と申します。
PHPを初めてまだ二ヶ月の初心者ですが、件名の件で困っています。
・環境
White Box Enterprize Linux
php-4.3.9
apache_1.3.31
Oracle 9.2.0.4
・症状
セッションデータをDBに格納する仕組みでアプリケーションを作成しているのです
が、
しばらく動かしていると、ファイルにログを書き出す箇所(ほぼ全箇所)で
failed to open stream: Too many open files ・・・
と、
DB Error: connect failed
メッセージ:データベースへの接続に失敗しました。
というエラーが頻繁に発生するようになりました。
apache を再起動すると、暫くは出なくなるので、FDの問題かな?と調べてみたとこ
ろ
割り当てている容量に問題はありませんが、一画面遷移ごとに、
画面毎に決まった数だけFDの数が増加しており、FDの残量が一定の値を下回ると
上記症状が発生することが分かりました。
cat /proc/sys/fs/file-nr
5081 2907 65536
cat /proc/sys/fs/file-nr
5081 2903 65536
cat /proc/sys/fs/file-nr
5081 2897 65536
cat /proc/sys/fs/file-nr
5081 2893 65536
さらにどこでその数が増加しているか調査したところ、
DBコネクションを取得した際に2増加しますが、
コネクションを切断してもその数が減らないことが分かりました。
その時に使用した試験プログラムは以下のものです(長くてすいません)。
<http://www.pat.hi-ho.ne.jp/dimension/inst/inst_unix_dso_430.shtml>
より利用させて頂いています。
<?php
// Oracleとの接続
$conn = OCILogon("oracle", "oracle", "tnsname");
// SQL文のparse
$stmt = OCIParse($conn,"select * from hoge_tbl ");
// SQL文の実行
OCIExecute($stmt);
$ncols = OCINumCols($stmt);
echo "<TABLE BORDER='1'>";
echo "<TR>";
for ( $i = 1; $i <= $ncols; $i++ ) {
$column_name = OCIColumnName($stmt,$i);
echo "<TH>" . $column_name . "</TH>";
}
echo "</TR>";
// データのFetch
while(OCIFetch($stmt))
{
echo "<TR>";
for ( $i = 1; $i <= $ncols; $i++ ) {
$column_name = OCIColumnName($stmt,$i);
// データの表示
echo "<TD>" . OCIResult($stmt, $column_name) . "</TD>";
}
echo "</TR>";
}
echo "</TABLE>";
// リソースの解放
OCIFreeStatement($stmt);
// Oracleから切断
OCILogoff($conn);
?>
この他にも
DB_oci8_2::connect_OCINLogin(dsn);
DB::connect(dsn);
で試験してみましたが、結果は同様でFDが2増加したままでした。
当初 php-4.3.8 だったので、php-4.3.9 に変更してみたのですが、症状は変わりま
せん。
私なりに考えてみましたが、この原因が
・PHP自体のバグ
・Apache or Oracle との連携に不具合がある
・調査 or 試験 or そもそも考え方が違う
・php.ini 等の設定がおかしい ...etc
と、何にあるのかわかりません。
そもそもサーバのメンテナンス自体が初心者の為、今の考え方が合っているかも
不安な状態です。
同じような現象に合われた方、何か解決方法、問題点をご存じの方、
助言よろしくお願いします。
_________________________________________________________________
楽しい絵文字でココロ伝わるメッセンジャー http://messenger.msn.co.jp/
PHP-users メーリングリストの案内