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