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

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

負荷テストはとても重要!

»

昨日、「MacBookAirでWiFiを2つ使ってWEB試験シナリオ取得」で書いたように、今日は朝からあるシステムの負荷試験を行っています。本当は、背景負荷を変化させながら、レスポンス時間を測定することを繰り返す予定でしたが、まずはこのくらいの背景負荷で、と、テストを開始してみたところ、そもそも性能が悪すぎる、ということで、解析しながらチューニングを行っている状態です。

WEBシステムをはじめとして、ネットワークシステムのサーバ側というのは、不特定多数のクライアントから接続を受け付け、処理しなければならず、さらに、データベースなどと連携して処理するケースも多いため、ボトルネックになっている場所を見つけることもなかなか大変なものです。しかも、インターネット向けのサービスとなると、仮の状態でも稼働を始めてしまうと、どんどんアクセスが来てしまう(ロボットとかもいます)もので、その状態になってから測定して問題の切り分けを行うのはなかなか困難です。

そこで、本来は、開発しながら都度負荷テストを行い、常に性能を意識しながら構築していくのが一番なのですが、なかなかそういう感じにプロジェクトを進めているのを見たことがありません。

原因としては、
・そもそも納期があまりに厳しく、作り込みだけで精一杯
・フリー負荷テストツールを使いこなす勉強をする暇がない
・負荷テスト製品は高い?
・あとで何とかなるだろう
という感じなのかもしれませんが、後で何とかする方が、大抵大変です。

私はWEBシステムの開発は嫌いなので、自分でSADEE2を開発しておきながら、自分でWEBシステムの開発はまずしませんが、ネットワークシステムを開発する際には、必ず負荷試験ツールを準備して、常に確認しながら進めます。負荷テストツールはフリーのものを使うこともありますし、自作することもあります。意外と自作した方が目的にマッチするテストができるので、大抵自作しています。たとえばProDHCPを開発する際には、最初から「設定反映性能」「払い出し性能」の良さを求められることから、それらを測定できる仕組みを準備しながら進めました。他にも、たとえば受託開発で工場の製造制御システムを開発した際にも、接続相手と結合できるのが本番までないため、シミュレータを作り、高負荷もかけられるようにして確認しながら開発しました。

高負荷状態になると、性能以外にもシステムは様々な問題が出てくるものです。プログラミングやアルゴリズムのミスにより、排他がうまくいかなかったり、メモリーを大量に消費したり、CPU使用率、HDD負荷など、様々な問題が出やすいのです。逆に考えれば、最初からできる限りの高負荷をかけながら、常に確認しつつ開発を進めることは、問題の少ないシステムを作る近道でもあるのです。

負荷テストの重要性をもっと広めていかねばなりませんね。

Comment(2)