|
|
Topic Category
|
|
|
|
Link Category
|
|
|
|
最新:09/28 10:12
|
|
|
|
最新:07/28 16:47
|
|
|
|
|
|
|
|
|
|
NetStatInDock
サーバが止まったような状態になる原因は
> 昨日はサーバが不調だったらしく、アクセスできない状態が続いていました。
>会社で気付いたのですが、どーしようもなくって帰宅してから再起動しました。
>死んでた訳ではなく、妙に負荷が高い状態になってましてネットワークからの
>アクセスやマウス等の操作に対するレスポンスが無いに等しいくらいに遅くなっ
>てました。原因は不明ですが、先日クラッシュから復旧させましたがバックアッ
>プしてあった物自体既にダメージを受けたものだった可能性も考えられます。
>ま、暫く様子見ですか。
|
という不具合の原因と思われる事が判明しました。ウチのサーバ機ではネットワークの通信速度、トラフィック等をグラフィックに表示させるためNetStatInDockというツールを動かしていたのですが、これにメモリリークのバグがあるようです。
メモリリークとはプログラムが実行時、動的に確保したメモリ領域を使い終わっても解放せず、そのためプログラムの使用メモリが徐々に大きくなって行き、最終的にはメモリ不足で異常終了するか、システムのメモリ資源を枯渇させてしまってシステム全体の動作を不調にしてしまうバグの事です。これはなかなかやっかいなバグでして、特に少しづつ領域を食いつぶしていくプログラムの場合、現象が表面化するまで数十時間、数百時間という時間を要する場合もあります。我々プログラマもメモリリークバグには常に悩まされ、また可能な限りこのバグを作り込まないよう防御的プログラミング手法を採用する種類のバグであります。
このバグが NetStatInDock には存在するらしく、アクティビティモニタで実メモリを監視していますと、起動直後のNetStatInDockのメモリ使用量は20MB程度だったものが、時間が経つにつれ徐々に大きくなっていき、半日から1日くらいで倍から4倍以上の大きさになってしまいます。この状態で数日動かしっ放しにしておくと完全にメモリ資源を食いつぶしてしまい、他のプロセスは Swapしなければ動けなくなる状態にまでメモリ資源を枯渇させてしまうものと推測されます。この状態になるとプロセスが動こうとする度に毎回メモリとハードディスクの間でアクセス(Swap)が発生し、システムのレスポンスは極端に劣化します。ネットワークからのアクセスには時間内に応答することができなくなりタイムアウトが頻発、あたかもサーバがダウンしているかのように見えてしまいます。
と言うわけで、NetStatInDock を動かさないようにしたところ、現在は常時200MB以上の空きメモリ領域がある状態で稼働しています。多分、これで大丈夫ではないかと思いますよ。
|
|
2004 calendar
最新:08/15 17:19
|
|