オルタナティブ・ブログ > プログラマー社長のブログ >

プログラミングでメシが食えるか!?

プログラムの動作確認で「あれ?」と思ったら見逃しては駄目

»

ずっと稼働し続けないとならないプログラムの開発は、使うときだけ起動するプログラムに比べて数段難易度が高くなります。

私の得意分野出ある、ネットワークプログラミングでは、ほとんどのプログラムがそれに相当します。いわゆるサーバプログラムの場合もありますし、パケットを中継しながら処理をし続けるプログラムもよく作ります。

稼働し続けるプログラムは、メモリーリーク・ディスクリプタ枯渇などのリソース食いつぶしを徹底的に排除しなければならないのはもちろん、処理が追いつかない場合にどう逃げるかなどの安全対策も重要です。また、処理が重たくなるとOSとの相性も非常にシビアになってきます。

このようなプログラムは、開発しながら常に負荷テストを行い、連続稼働で問題が出ないか、高負荷でも大丈夫かを確認しながら進めるわけですが、再現性の高い問題は、見つけることさえできれば比較的簡単につぶせるものです。難しいのは「たまにしか起こらない問題」です。

問題を再現できなくても、ログから追えるようにするのが基本ですが、超高性能を要求されるプログラムだとログの出力すら負荷になってしまい、性能が出なくなることもあります。デバッグ時だけログを必要に応じてON/OFFするようにしたりする工夫が必要になります。

さて、そんなテストをしながら開発を進め、だんだん完成度が高くなってくると、ほとんど問題が出なくなってきます。ところが、ごく希に「あれ?」と思う動きをすることがあったりするのです。これを「たまたま、かな・・・」と見逃すと大抵後で痛い目にあいます。「プログラムにたまたまはない」と思っていた方が良いでしょう。

大抵、目標性能ギリギリまでは何とかなることが多いものなのですが、それを超える負荷をかけると、怪しい挙動が出てきたりするものです。それを「たまたま」とか、「オーバースペックだから」と見逃すと、本稼働させたときに時限爆弾のように、忘れた頃に大爆発したりするものなのです。

ということで、今日もある製品の超高負荷状態での動作確認を行い、昼飯を食べ忘れるほど念入りに検討しました。事前にどれだけ本稼働以上の負荷をかけて問題をつぶすことができるかは、どのような状況でも動き続けなければならないプログラムではとても大事なのです。

Comment(0)