Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

持続的接続を理解するために(その5)

2009/12/05 | apache, MySQL

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

持続的接続はapacheの子プロセスとの関連性が深い。だからapacheを理解することも必要だ。ということでマニュアルに目を通してみる。

目を通していると昔(サーバ管理をしていた頃)の記憶がちょっとだけよみがえる。PHPのマニュアルとか探すとその記述を見つけた。

http://www.php.net/manual/ja/faq.installation.php

PHPはグルー(糊)です。このグルーは、多くのサードパーティ製のライブラリをくっつけることによりクールなWebアプリケーションを構築するために使用され、直観的で簡単に習得できる言語インターフェイスにより、一つの整合性のある実体として見せることができます。PHPの柔軟性と力は、プラットフォームの安定性と堅牢性に基づいています。グルーによる結合をするためには、OSやWebサーバ、サードパーティ製のライブラリを必要とします。これらの一つの機能が停止した場合、PHPは問題を特定し、速やかに修正する手段を必要とします。実行スレッドを完全に分離しなかったり、メモリセグメントを完全に分離しなかったり、各リクエストで使用される強力なサンドボックスを有さないことで、基本的なフレームワークをより複雑なものにした場合、PHPのシステムに弱点が生まれます。

これは「なぜ、Apache2のマルチスレッドMPMモード(worker)を実運用環境で使用するべきではないのですか?」で記載されている文章。つまり(多分)、モジュール版のPHPを使用する場合はマルチスレッドMPMモードではなくMPM preforkモード(1.3系と同等)で使用しなさい、という意味に取れる。スレッドセーフではない、ってことかな。

マルチスレッドだと、処理の単位はスレッド(だと思う)。workerの場合、スレッドは子プロセスが複数のスレッドを管理しているわけで、子プロセス単位で持続的接続が共有されていると仮定すると、同じ子プロセス内の別のスレッドで同時に別々のリクエストを処理した場合、明らかに問題が出そうだ。こういうことなのかな。

ということで、まず、PHPはpreforkなapacheで動作させないといけないのだろう。

実際調べてみると、Debianやubuntuではapacheのパッケージはapache2-mpm-workerとapache2-mpm-preforkという別々のパッケージがあり、事前にworker版がインストールされていると、mod_phpをインストールする際に、それを削除してprefork版をインストールするようだ。Vineではパッケージこそ分かれていないけど、そもそもworkerで設定されているとPHPが動かないようだ。

そういうことを考えれば、おそらく出回っているサーバ(Linux系)は、ほとんどがpreforkで動作していると思ってよさそうだ。

持続的接続を理解するために(その3)

2009/12/03 | apache, MySQL

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

Zend Frameworkのマニュアルで、いい記載を見つけた。これも重要だと思う。

http://framework.zend.com/manual/ja/zend.db.html

持続的な接続を使用すると、RDBMSサーバに余計な接続がたまってしまうことに注意しましょう。接続作成時のオーバーヘッドが減ることによるパフォーマンスの向上よりも、それによって引き起こされる問題のほうが多くなりえます。

データベース接続は、その状態を管理しています。つまり、RDBMSサーバのオブジェクトの中にはセッションスコープで存在するものがあるということです。セッションスコープで管理される情報の例としては、ロックやユーザ変数、一時テーブル、直近に実行したクエリの情報(変更された行数、自動生成されたID)などが挙げられます。持続的な接続を使用すると、別のPHPリクエストが作成したデータに誤ってアクセスしてしまう危険が生じてしまいます。

apacheの子プロセスごとにリンクコネクションが引き継がれているわけだから、当然データベース側(MySQL等)では、コネクションがオープンしたままの状態になっていて、直前のスクリプトで生成されたauto_increment値や変更があった行数についても引き継がれてくるわけだ。まぁ、リンクIDが同じになるわけだから当たり前だ。

そういう意味で「パフォーマンスは向上するだろうけど、考慮すべき問題は非常に多くなる」ということだ。

持続的接続とapacheの動作を理解したいのだが

2009/12/02 | apache, PHPの基本

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

いろいろ調査中。プログラムを始めて間もない頃(というかつい最近まで)は、プログラムは動きさえすればよかった。そしてセキュリティを気にするようになり、最近は速度を気にするようになった。順番はどうでもいいが、より高度なステップにチャレンジしようとしている自分がいる。もちろんそれはいいことだと思うが、だんだんそれが難しくなってきた。

データベースへの持続的接続について調べている。PHPのマニュアルを見るだけでは全て理解できなかった。もちろん自分のスキルが足らないのでしょうがないのだが、マジメに調べるうちのウェブサーバ(apache)をよく理解する必要に迫られた。しかしこちらも難しい。一通り、apacheを動作させるために必要な基本的な設定はネットワーク管理者時代にやっているが、apacheを速度面でチューンアップしたことなどないからだ。

プロセスという言葉はなんとなく理解できるが、プロセスが子プロセスを産んで・・・、みたいな言葉が次から次へと羅列されると、ちょっとお手上げな感がある。そしてそれらを平易な言葉で説明してくれるような文献はない(素人でもわかるように、とは言わないけど、もうちょっとなんとか・・・)。そうすると、あと思いつく方法は、どういう動作をするようになっているのか、PHPなりapacheなりのソースコードを読め、ということになる。C言語もまた自分にとっては未知の領域だ。

マジメにやろうとすればするほど、自分の範疇も拡大し続けないといけない。これもまた当然。「いくつになっても勉強」にも賛同するが、年齢を重ねると、学習するための能力が著しく低下しているのがよくわかる。理解の進み具合が明らかに遅いのだ。

持続的接続と非持続的接続(通常接続)とapacheのプロセス。メリットとデメリット。平易な記載のあるサイトがあれば、是非教えていただきたい。

RewriteEngin Onするだけで403 Forbidden

2008/12/26 | apache

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

mod_rewriteを使おうと、.htaccessに適当に記述してサーバにアップロードし、動作確認をした。

403 Forbidden

えー。意味わかんない。記述間違いでInternal Server Errorなら理解できるのに。もしや書き換え後のURLがアクセス不能になっているのか、と思ったらそうでもない様子。

共用レンタルサーバなんだけど、mod_rewriteがそもそもインストールされていないのか(だったら500エラー?)。あと仮にmod_rewriteがインストールされていても、Apacheの設定で「FollowSymLinks」が有効になっていないとダメらしい。

いろいろ難しいね。

拡張子htmlでphpプログラムを使えるように

2008/11/24 | apache

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524

もう何十回もhtaccessに記述しているのに、必要に迫られ、その都度検索している自分が悲しい。メモしておくことにする。

AddType application/x-httpd-php .html

覚えられないのは老化?。



Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524
守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/usaken/tekmemo.com/public_html/php/wp-content/plugins/ultimate_ga_1.6.0.php on line 524