2009年4月の日記


2009/04/30

#1 弁当いやぁ

2日連続で休日出勤だったんだけど、両日ともお昼は某弁当チェーンの弁当。しかも余ったのがなぜか俺のところに回ってきて結局2日で4食も食べる羽目に。メニューは全部別だったんだけど、似たようなもんなので、さすがにもう飽きた。

2009/04/25

#1 スクリプトが途中で止まる(2)

分かっている改善ぐらいは施してもいいかな、ということで、多次元連想配列のうち連想配列が必須ではない階層を普通の配列に置き換え。77KBのテーブルが67KB、54KBのテーブルが51KBになった。もとのメモリサイズから考えると1割ぐらい軽くなったはずなんだけど、まだ動かない。どうなってるんだ。Cで実装したときのことを考えると、intが4バイト、doubleが8バイトと仮定して、今回の51KBの連想配列は、データが4KB+ハッシュで実装できるデータ構造。51KBは使いすぎだろ。

各所にprintfを仕込んだスクリプトでしばらく様子を見ていて重要な現象を発見。ブラウザのリロードを繰り返してると、スクリプトが落ちる箇所が変わることがある。スクリプト自体には時間が違うからといって違う動きをする箇所は全くない。無料サーバなので広告が入るようになってて、当初からこれが怪しい気がしてたんだけど、ますますその可能性が高くなってきた。位置が変動する範囲でやっていることでメモリサイズに関係しそうなことは、上で書いた51KBのテーブルへの値セットと、printfだけ。printfを増やしても落ちる箇所が変わらないので、テーブルへの値セットによるテーブル拡張で落ちてるようだ。そろそろ調査の限界が近づいている予感。

2009/04/22

#1 CGIのメモリ制限とデバッグ準備

久々の技術ネタ。前後関係は#2に書くとしてまずはメモリ制限について。こちらのページも参照。

ApacheではRLimitMEMディレクティブで指定可能。

RLimitMEM 5000000

とかでOK。単位はbytes。Apacheの設定ファイルをroot権限で何度も書き換えるのも嫌なので、ApacheのAllowOverrideでこいつを有効にした上で(ここだけはroot権限必要)、実験用ディレクトリの.htaccessで設定するようにする。

あと、コマンドラインからの実行時も制限できるようにシェルでの指定方法も調べておく。csh系シェルの場合はlimitで設定可能(bashはulimit 。最初に書いたページを参照)。

limit vmemoryuse 5000

Apacheとは違い、単位はKBytes。数値の代わりに u とか unlimited とか書くと無制限に戻る。シェルの場合はシェルのメモリ使用量込みになると思うので、数値をあわせても厳密に動作が同じになるわけではない。

#2 スクリプトが途中で止まる(1)

公開してるスクリプトがうまく動かないという連絡があって、無料サーバに設置しているようだったので自分でもそこでアカウント登録して試してみたところ、確かになんか出力がおかしい。最終的に出力するHTMLもそんなにでかいわけではないのでファイルサイズ制限とかそういうわけではなさそう。色々試してみた結果、メモリ使用制限がかかってて、それに当たってる可能性が高そう。ということで、#1のように自分のサーバで近い環境を再現してみた。apacheの制限は4.5MBぐらいになってると思われる(サーバ環境がある程度近いと仮定して)。

それとは別に、こちらを参考にメモリの使用量を調査してみた。スクリプトが落ちている周辺で確保されてるメモリ(スクリプトから見えてる配列と連想配列をtotal_sizeで取得)は合計150KBぐらい。apacheの制限である4.5Mと全然大きさが合わない。残りの4M以上はどこで消費されているのか。(Perl本体の動作にある程度は必要なはずだけど、4Mは大きすぎ。)試しに連想配列の一部を配列に置き換えたところ、10KBぐらい浮いたんだけど、結局同じところで落ちるので改善効果なし。結局今日は解決できず。先は長そうなので、依頼主には他のサーバを使ってもらうようにお願いしてみる。

2009/04/20

#1 筋肉痛

いつもは筋肉痛にならないはずのコースだったのに、なぜか筋肉痛。しかも二日後の今日がピーク。昨日うちの中でごろごろしてたのが駄目だったか。

2009/04/18

#1 今日のサイクリング

池田から奥に入って箕面に抜けるルート。途中、妙見山方向に向かうときに、ちょっと遅めのローディがいたので追いついてみたら白髪交じりぐらいで結構年上のおっちゃんだった。で、その後俺が前を走ってたんだけど、結局最後は俺が置いてかれた。なんで体力余ってるのにあんなにゆっくり走ってたんだよ。でも、一緒に走ってるプレッシャーのおかげで、左足がつりそうだったにもかかわらず峠までノンストップで走れた。

今日の最大の敵は工事の交互通行。4箇所中3箇所が池田から奥に入っていく途中で、どこも上り基調だったので疲れた。自分が走り抜けるまで対面側をずっと待たせてしまうというのはかなりのプレッシャー。

久しぶりに山コースだったことと、前半で無理をしすぎたので帰りはくたくただった。

#2 定額給付金

ようやくお知らせが到着。受付は5月かららしい。それにしても、キャッシュカードのコピーもとれって・・。少しでも間違いを減らすための策なんだろうけど、キャッシュカードのコピーをとるなんて初めてだ。


count: [an error occurred while processing this directive]

ごみ的ページ。のインデックスに戻る