apache2のMPM覚書

MPM(Multi Processing Module)。アパッチがリクエストの処理をどのように行うかのいろいろな形態。プロセスを使うものとスレッドを使うものに分けられる。

用いられるMPMはどれかひとつ。

コンパイル時にどのMPMが用いられるか決められる。現状のMPMを確認したい場合は-lをつけてapache2を実行する。

prefork.cがあるので、preforkであることがわかる。MPMの一覧はここで確認できる。

preforkはスレッドを使わず1.3系のアパッチのようにあらかじめ(pre)プロセスを起動しておく(fork)、それで待機しておく。

アパッチのプロセスは一番偉いコントロールプロセスみたいのがいて、それがアパッチ全体をコントロールしている。このプロセスは終了することがなく、リクエストを処理することもない。

ディレクティブには以下のようなものがある。
StartServers
MinSpareServers
MaxSpareServers
MaxClients
MaxRequestsPerChild
マニュアルを読むと、アパッチは賢いのでデフォルト値で問題ないとのこと、でもMaxClientsは、サーバへのリクエストがすごく多いときには増やし、サーバが重過ぎて動かなくなるときは減らすとのこと。

MaxRequestsPerChildはひとつのプロセスがいくつのリクエストを処理するかを指定するもの、あまり大きいとプロセスがメモリをたくさん使ってしまうのかもしれない。

Windowsのアパッチでも調べてみた。

mpm_winntが使われている。これはwinntに特化したモジュールでスレッドを使う。PHPがよく落ちたりするのはスレッドを使っているせいかもしれない。しかしこのモジュールはコンパイル時にしか設定できないので、しかもforkはwindowsにはないので、preforkのwindows版があるのかはわからない。

mpm_winntはひとつの子プロセスをつくり、その中のスレッドですべてのリクエストを受け付ける。そしてこのモジュールにはディレクティブがひとつしかないみたいなのでカスタマイズはほとんどできないと思われる。

windowsのアパッチの起動ログをみてみると、次のようになっている。

スレッドを64個も作っているらしい。一個でもエラーが出ると、スレッドの場合は全プロセスが落ちるので致命的と思われる。

JSONP覚書

Javascriptでajaxを使った場合同一ホストにしか接続できない。jsonpは他のホストにも接続する技術。

JavascriptでJavascriptを埋め込んで、そのsrc属性に他のホストをを指定する。このときURLにcallback=関数名などとすれば、サーバ側で対応してれば本来返すjsonをその関数名で括ったものを返すので、javascript埋め込みはその関数の実行になり、その関数の引数はjsonオブジェクトになる。

普通のjson要求、以下を送るとjsonが帰ってくる。
http://api.twitter.com/1/statuses/public_timeline.json?count=3&include_entities=true

これにcallback=mycallbackをつけるとjavascriptが帰ってくる。
http://api.twitter.com/1/statuses/public_timeline.json?callback=mycallback&count=3&include_entities=true

あらかじめmycallbackを定義してからこのjsonpを実行すれば、呼ばれることになって、その引数がjavascriptオブジェクトになる。ただし404などが帰ってくると、エラー処理できないか。

Ubuntuのecliseでsubcripseのインストールの時JavaHLがないとうエラー

javaHLを入れないといけないらしい。
javaはsunのやつ。ecliseはパッケージではなくオフィシャルからダウンロードしたやつ。

これでもエラーが出るときは、javaがこれを見つけられないので、eclipse.iniを編集する。
まず共有ファイル libsvnjavahl-1.so がどこにインストールされたかを探す。

/usr/bin/jniにあるので、このディレクトリをJavaが探すようにする。ecliseは起動時にeclipse.iniを読み込むのでそれを編集する。

編集前

編集後

ソース

phpの二元配列を値で並び替える。

以下の配列を考える。

この配列をdateの値でソートしたい場合は以下のようにする。

mycmpの2つの引数には配列の値が適当に渡される。内部でクイックソートなどを行って実際の比較の時にこの関数が呼ばれると思われる。この関数で、第一引数が第二引数よりも前に来るならマイナスを返し、同じなら0を返し、後ろに来るならプラスを返す。

PHPのarray_reverse

実験

結果

PHPの配列の添字の数字はあくまでキーであって、並び順とは関係ないようだ。array_reverse(false)の場合は、キーの内部的順番は保持されて値だけが逆になる。array_reverse(true)の場合は、キーも値も順番が逆になる。foreachでの順番を逆にしたい場合はどちらでもいいが、trueの方を使ったほうがいいと思われる。

htmlのstyleで四角く囲う

過去いたい部分をdivで括ってこのdivにスタイルをつける。

表示:

囲まれる

padding-xxxは適当に変える。