ここのところ、Linux を中心としたシステム作りを実習の中に取り入れ、 毎日Linuxを利用している。 Vine Linux をサーバーとして利用している、Celeron 466MHz , MEM 128MB で 20名程度のユーザーを常時ログインさせ、postgreSQL のサービスを10コネクション 程度を不具合無くこなしていた。 ところが、昨日、突然システムが無反応になる事態が発生した。 [経過] httpd の拡張に利用している php3 に、gd というグラフィックライブラリを追加し、 Web 上にグラフなどを提示できるようにした。 のようすれば、イメージを生成できると指示した直後、システムが異常に遅くなる 現象が発生した。 [原因] ImageCreate(x, y); の部分で x=5000, y=100000 と書いた学生がいた。 この部分では、x*y*4 のメモリが必要となるため、 5k*100k*4 = 4*5*100MB の メモリを要求することを意味する(当然、そんなメモリは獲得できない)。 通常なら、malloc のエラーで止まりそうなものだが、gd 自身がメモリ 管理部分の記述が不完全なため?にシステムに大きな負荷をかけてしまい、 システムダウンを引き起こしてしまう。 そこでソースコードを見直し、メモリ管理を強化した。 php3 のスクリプトはユーザーに開放されていることが多いので、大きな 問題になる可能性がある。