なんか、DOS攻撃に弱くない?
やってみればわかるけど、セッション管理下でDOSくらわせると
コネクションが多くなりすぎてコネクションがはりきれなくなるのは
いいんだけど、回復に時間かかりすぎ・・・
なんとかしなきゃね・・・・
とりあえずpcnnect使ってるところconnectに書き直すだけでもだいぶ
軽減したんだけど・・・・ほかにもそんな人いません?

A 回答 (1件)

それってバックエンドで動いてるDBサーバが悲鳴上げてるだけでは?


で、あれば対処方法としては
・DBサーバを速くする
・DBサーバの最大接続可能数を減らす
・Session用DBサーバを複数立てて、SessionIDを見てHashingする事でSessionサーバの平均負荷を下げる(要session.incの書き換え)

など考えられますが・・・

まぁPHPLIBの機能自体が利便性を提供する分、負荷がでかくなるのはしょうがないと思いますけど・・・
HTML template機能なんか、正規表現エンジン使いまくってるからCPU負荷がかなりかかりますよ

>とりあえずpcnnect使ってるところconnectに書き直すだけでもだいぶ
軽減したんだけど・・・・

これはDBへのpconnectがconnectと対してパフォーマンスが違わないDBだったからでしょう
Oracleみたいにconnectの負荷が結構でかいDBであればpconnectの方が軽いはずですよ
    • good
    • 0
この回答へのお礼

ありがとうございます。
説明があまりにもたりませんでしたね
バックエンドDBはPostgrsSQLなんですけど
当然のように
コネクション数は、PostgreSQLの場合ある程度設定できて十分に
でかくして、それにあわせてphplibのDBコネクション数をきめてるんですけど
問題はそこににもCPUパワーにもなくて。
単純にPHPがコネクションを開放しないで、だんだんとコネクションが
たまっちゃうんですよね。特にデフォルトがpconnctなもんで
その傾向が・・・・postgreの実装とかみあわないのかな?
 
perlでセッション管理してたときは
毎回強制でコネクションきっていて、理論上不可は高かったんだけど
それのときははるかに少ないコネクション数の設定(DB側)でも
オーバーすることなかったから。う~~んどないなってんだろ・・・
しばらくソースを追うたびに出ようかな


ちなみにバージョンはphp3.0.18-ja phplib-7.2c postgre 7.0.3

お礼日時:2001/05/01 10:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qmysql_connect関数の使い方

mysql_connect関数の、戻り値の使い方についての質問です。

mysql_connectで検索すると、

【使い方例】
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_close($link);

みたいなのが見つかります。(エラー処理は省略)

そこで、mysql_connectとmysql_closeの間に、クエリを処理する関数を入れるとします。

【例】
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
test();←この関数の処理についての質問です。
mysql_close($link);

test(){mysql_query(”sql文”);}

上記の例の test()関数についてですが、mysql_connectの戻り値の$linkを渡さなくてもいいのでしょうか?

いつもは、test($link)見たいにしていました。

しかし、今回は戻り値を渡すのを忘れていたのに、ちゃんと希望通りに動いていました。

今回のように、mysql_connect関数をひらいて、dbの処理をする場合は、
途中の関数に、戻り値を渡さなくてもいいのでしょうか?

mysql_connect関数の、戻り値の使い方についての質問です。

mysql_connectで検索すると、

【使い方例】
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_close($link);

みたいなのが見つかります。(エラー処理は省略)

そこで、mysql_connectとmysql_closeの間に、クエリを処理する関数を入れるとします。

【例】
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
test();←この関数の処理についての質問です。
mysql_close($link);

tes...続きを読む

Aベストアンサー

mysql_query ― MySQL クエリを送信する
http://jp2.php.net/mysql_query

resource mysql_query ( string $query [, resource $link_identifier ] )

link_identifier
MySQL 接続。指定されない場合、mysql_connect() により直近にオープンされたリンクが指定されたと仮定されます。

渡せるなら渡しといた方がいいでしょう。
あとPDOが使えるならそっちの方がいいかも。

QPHPでのmysql_connect実行について

PHPでのmysql_connect実行について

いつもお世話になります。
自宅WEBサーバーを構築しているのですが、
PHPからのmysql_connectが実行出来ずに困っています。
サーバー構成と事象を以下に記載しますので、
お分かりでしたら回答の程よろしくお願いいたします。

■サーバー構成
・OS : ubuntu10 server(コアシステムのみ)
・WEB : apache2(aptitudeにてインストール)
・DB : mysql5(aptitudeにてインストール)
・PHP : PHP5(aptitudeにてインストール)

■事象
WEBサイト内にてtest.phpを作成し、
$intDB_Con_ID = mysql_connect($CONST_HOST_IP_ADDR , $CONST_DB_USER_NAME , $CONST_DB_USER_PASS);
と実行するが、intDB_Con_ID には何も変更されず、PHP実行コード下に
記載しているhtmlコードが実行されない。

■事象発生後に実施した事
(1)PHPコード自体の実行確認
  echo("CONST_HOST_IP_ADDR = " . $CONST_HOST_IP_ADDR . "\n");
  にて変数の内容はページリクエスト結果に出力されいている事を確認。

(2)apache errorログの確認
  PHP Startup: Unable to load dynamic library './pdo.so' -
  ./pdo.so: cannot open shared object file: No such file or
  directory in <b>Unknown</b> on line <b>0</b><br />
  と出ている事を確認。

(3)httpd.confの確認
  pdo.soを読み込んでいる箇所を探すが、pdo.so自体ファイル内容検索
  にヒットしない。

(4)php.iniの確認
  pdo.soを読み込んでいる箇所を探すが、pdo.so自体ファイル内容検索
  にヒットしない。

(5)php.iniの編集
  末尾に以下を追加
  extension_dir = "/usr/lib/php5/20090626+lfs/"
  extension = pdo.so

(6)apacheの再起動後にログ確認
  <b>Warning</b>: Module 'PDO' already loaded in <b>Unknown</b> on line <b>0</b><br />  
  と変わったが事象変わらず。

(7)phpのログ確認
  PHP Warning: Module 'PDO' already loaded in Unknown on line 0
  と変わったが事象変わらず。

PHPでのmysql_connect実行について

いつもお世話になります。
自宅WEBサーバーを構築しているのですが、
PHPからのmysql_connectが実行出来ずに困っています。
サーバー構成と事象を以下に記載しますので、
お分かりでしたら回答の程よろしくお願いいたします。

■サーバー構成
・OS : ubuntu10 server(コアシステムのみ)
・WEB : apache2(aptitudeにてインストール)
・DB : mysql5(aptitudeにてインストール)
・PHP : PHP5(aptitudeにてインストール)

■事象
WEBサイト内にてtest.phpを作成し、
$intDB_Con_ID =...続きを読む

Aベストアンサー

直接の回答ではないのですが、
test.phpを実行したときのtest.php自体の出力はどうなっているでしょうか。
たぶんエラーメッセージか何か表示されると思うのですがいかがでしょう。
それをさらせば回答が集まりやすくなるように思います。

QMySQLへのDB::connectで、failedとなる

MySQLに、チャレンジしようとしています。
MySQL-5.0.45 をインストールしました。
セットアップできたようで、MySQL AdministratorツールからサンプルDBが見えました。
そこで、PHP-5.2.4から、PEAR::DBを使ってconnectしようとすると、
DB Error connect failed-24
となってしまいます。
テキストによると、確認すべき点として
 ・データベースサーバが起動していない
 ・対象のaaaデータベースが存在しない
 ・ユーザ名/パスワードが存在しない、権限がない
等を確認しているつもりですが、間違ってないように思います。
pear::logは、動きました。
他にどのあらりをチェックすればいいのでしょうか。

Aベストアンサー

OSはなんでしょうか?

Linux系でしたらpsコマンドを用いて本当にmysqlが起動しているか確認するとよろしいと思います。
Windows系でしたらタスクマネージャからプロセスを確認するとよろしいです。

起動済みでしたら本当にそのプロセスが生きているか確認しましょう。
mysql -u USER -PPASSWORD
これでログインできれば正常でしょう。
// 入れない場合はselinuxがらみのpermissionか
// my.cnfの設定忘れのような気がします。
// 私もよくミスりますorz

ケアレスミスとしては
・大文字小文字
・ひきすうの順番が違う
・php.iniの設定ミス
くらいですかね。

Qmysql_connect() のパスワードについて

数日前にPHPをはじめたばかりの初心者なのですが、
気になることがあるので質問させていただきたいと思います。


いろいろな書籍やネット上のサンプルを見る限り、
PHPからmySQLに接続するためには
mysql_connect()の引数にパスワードを入れるようになっていますが、
これはセキュリティ上問題ないのでしょうか?

過去の質問を調べたところ、
No.1142292に対する回答に、
.phpファイルはまず中身を見られることがないから大丈夫、
というのがあったのですが、
サーバのPHPパーサが落ちていた場合など、
.phpファイルは丸見えになってしまうのではないでしょうか。
そして、そのSQLテーブルを作成したユーザーが
(cookieによる認証で)phpMyAdminを使用していた場合、
第三者がphpMyAdminで容易にテーブルにアクセスできてしまうのではないかと思います。

サーバは生きているがPHPパーサが落ちている、という
状態はほとんどありえないとは思うのですが、
万が一この状態が起こった場合に取れる自衛手段
はありますでしょうか?

数日前にPHPをはじめたばかりの初心者なのですが、
気になることがあるので質問させていただきたいと思います。


いろいろな書籍やネット上のサンプルを見る限り、
PHPからmySQLに接続するためには
mysql_connect()の引数にパスワードを入れるようになっていますが、
これはセキュリティ上問題ないのでしょうか?

過去の質問を調べたところ、
No.1142292に対する回答に、
.phpファイルはまず中身を見られることがないから大丈夫、
というのがあったのですが、
サーバのPHPパーサが落ちていた場合な...続きを読む

Aベストアンサー

ご心配であれば、公開ページの置いてあるディレクトリ以外に.phpファイルを置けばいいと思います。

>mysql_connect()の引数にパスワードを入れるようになっていますが、
>これはセキュリティ上問題ないのでしょうか?
今ひとつ質問の意味がわからないのですが、MySQLに接続するためには、パスワードが必要なので、引数にパスワードを書きます。

Q子プロセス終了で閉じてしまうmysqlコネクション

pcntl_fork()を利用して、子プロセスでファイル収集を行い、親プロセスがそのファイルを解析してDBへ登録するといった単純な2並列のプログラムを書いています。
ところが子プロセスが終了した時点でどうもmysqlのコネクションが切れてしまうようなのです。

以下は上記内容を再現した簡易コードです。

$connect = mysql_pconnect("localhost", "user", "password");

//parent
if ($pid = pcntl_fork()) {
// 本当はここで収集されたファイルを順次解析してDBに登録を行う。

sleep(5); // 子が先に終了するように時間差を。
mysql_query($query="use testdb",$session) || die(sprintf("%s : %s\n", $query, mysql_error()));

pcntl_wait($status);

//child
} else {
// 本当はここでファイルを収集する
sleep(1);
exit(0);
}

上記コードは以下のエラーを吐いて終了します。

use testdb : MySQL server has gone away

mysql_pconnectの代わりにmysql_connectを使ったり、mysql_queryの第二引数に$connectを与えても結果は変わりません。

子プロセスが終了してもmysqlとのコネクションを維持しておきたいのですが解決策はあるでしょうか。

ちなみにPHP CLIで実行しています。

OS: Linux
PHP 5.2.4

pcntl_fork()を利用して、子プロセスでファイル収集を行い、親プロセスがそのファイルを解析してDBへ登録するといった単純な2並列のプログラムを書いています。
ところが子プロセスが終了した時点でどうもmysqlのコネクションが切れてしまうようなのです。

以下は上記内容を再現した簡易コードです。

$connect = mysql_pconnect("localhost", "user", "password");

//parent
if ($pid = pcntl_fork()) {
// 本当はここで収集されたファイルを順次解析してDBに登録を行う。

sleep(5); // ...続きを読む

Aベストアンサー

 親プロセスと子プロセスで同一のコネクションを使用している所に問題があると思います。

$connect = mysql_pconnect("localhost", "user", "password");

//parent
if ($pid = pcntl_fork()) {


//child
} else {
$connect = mysql_pconnect("localhost", "user", "password");


exit(0);
}

 と、子プロセスは子プロセス側で別途コネクトして使用するか、
 親、子、それぞれでDBにコネクトする必要があるかと思います。


このカテゴリの人気Q&Aランキング

おすすめ情報