カレンダー
<< November 2024 >>
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最近のエントリー
最近のコメント
最近のトラックバック
カテゴリー
月別アーカイブ
リンク
その他

solarisより、freebsdのほうが、素直な現代っ子?のような気がします
freebsdで、家鯖を立ち上げてるんだが、メモリーの使い方をなんとなく、調べてみた。
こういう、凶悪なプログラム。

<?php
echo "start\n";
ini_set('memory_limit',"256M");
phpinfo();
for( $i = 0; $i< 10000000; $i++ )
{
$test[]='aaabbbcccd';
if ( ($i % 10000) == 0 ) echo "$i \n";
}
echo "end\n";
?>

ちなみにうちのサーバーは、メモリー256Mしか載ってないが、SWAPは512Mとってるので、SWAPしまくります。
で、285万回ぐらいのループで、256Mを超えて、PHPのmemory_limitに引っかかります。
つまり、実際に使ってるデータ量は、285万×10=28.5M で、256Mを超えて使っちゃうという。
ま、今回の単純な配列でも、PHPは実データーの8倍ぐらいメモリー使うということで、これはこれでこんなもんかと。

でも、プログラムが終わると、瞬時に、topコマンドとかで見る、apacheのプロセスが使うメモリーは、16Mに一気に減って元に戻ります。で、何回同じテストしても、apacheのプロセスの、仮想メモリー(注1)は、16M以上は、使わない、、、と、ま当たり前の動作をするんですが。

とある、Solarisの環境だと、プログラムが終わっても、これが減らない。
それどころか、同じテストを繰り返すと、仮想メモリー(注2)の使用量が、肥大化していきます。なんじゃそりゃ(注3)。
なんか、私が見てる現象だけからすると、Solarisは、掃除のできない俺と同じような動作をするように見えるんだが、違うのかな。
それとも、ホントに、Swapがたりなくなるようなぎりぎりになってから適切に掃除する、っていう、逆に、非常に賢い動作をしようとしてるのかな?

で、仮にそうだとして、

素直に、速く掃除してくれたほうが、最近の安いハードウェアの状況だと、いいように思うなあ。実データ量の8倍も使うような言語が主流の世の中だよ。ましてや、運用もしやすいだろうし。
確かに、私が大人になったころのような昔のメモリー16Mで、20人ぐらい開発してる、、、ってな環境だと、物凄く賢いようなページングのアルゴリズムが必要だったと思うけど。(注4)

いや、結論としては、広いところに引越したんなら、掃除は早め早めにやったほうが、いいと思うんだけど。ということです。
昨日作業した人が散らかしたままで、家政婦さんが必要な掃除を必要なときにするより、昨日の作業がおわった時点で家政婦さんは、すぐに掃除したほうがいいと思うんだけどなあ。
昨日作業した人が、作業報告をいい加減にやってると、家政婦さんと喧嘩することになるだろうし。

ええっと、翻訳しておくと、
  「昨日作業した人」=さっきまで、走ってたプログラム
  「家政婦さん」=OSのページングアルゴリズム
  「昨日作業した人の作業報告」=メモリーアロケーションテーブルかなんかののメンテナンス
  「喧嘩する」=プログラムとOSのどちらが悪いかわからんが、とにかく原因不明で問題が発生すること
です。

(注1)正確には、仮想メモリーの使用量かどうかは確信がないですが。
(注2)これも同様。誰か、謎を解いてくれい。
(注3)肥大化していくように見えるだけかもしれない。(モニターツールの見かけ上だけの問題ってこと)
    どっちにしろ、運用していく上では、ややこしい。
(注4)VAX/VMSのページングアルゴリズムは、それはそれは、複雑で、当時の私には
    アルゴリズム自体はおろか、必要性すら理解できませんでした。
コメントする
お名前:

メール:

URL:

コメント:

トラックバック
この記事へのトラックバックURL:
これまでに受信したトラックバックはありません。

処理時間0.205秒