ITエンジニアが論理的に/ロジックでいろいろ考えてみるblog 進化途中なのでいわゆるβ版。

【新人SE応援企画】非機能要件って何? CPUが張り付いたらどうする?

2012.04.04

SEになる要件には機能要件と非機能要件の二つがあることを知るでしょう。今日は非機能要件について。

 

非機能要件というと何のことなのかわかりにくいですが、端的には「性能」=「早さ」と考えれば大きくは外さないでしょう。もちろん実際はそれ以外の部分も含みますが…。

機能要件は発注する側からしてもわかりやすく、その機能が実現できなければシステムが完成したとは言えないので見落とされることは相対的に少なくなります。一方で、非機能要件は実際に動かしてみないとわからなかったり、ユーザも使ってはじめて気づく部分も多いので想定外の問題として顕在化することもよく見かける部分です。

 

非機能要件でおそらく一番問題になるのが「システムが遅い」という問題でしょう。サービスインしてみたらユーザからレスポンスが悪いと苦情をうけるという例は世の中に溢れていますし、処理量の増加とともに遅くなるということもよくあります。この性能問題を解決するには、システムアーキテクチャに対する理解が必要です。実際にシステムがどのように動いているのかを知らないと適切な解決策がとれないのです。

 

実際に存在した例をあげます。javaで作ったシステムが遅くCPUが100%で張り付いており、メモリはまだ余っているという状況でどのような対策を打つでしょうか。CPUの処理能力が足りないからCPU性能を上げればいいとだけ考えるのは安直です。javaでは、ヒープ領域というメモリ領域が存在します。また、不要になったメモリを回収するGCという機構があります。そしてGCにはFull GCという非常にCPUパワーを使うGCがあります。ヒープ領域がいっぱいになるとFull GCが行われ処理は当然重くなります。上記の例のCPU100%の原因は、Full GCによるCPUパワーの消費でした。CPU100%という現象は実は表面的なもので、真の原因はヒープ領域の不足というメモリ不足の問題だったのです。この例では、ヒープ領域を増やすことでFull GCの頻度を抑え性能を改善することが出来ました。

性能が出ていないときにデータ(パフォーマンスチャート)に注目することは非常に重要です。しかし、データから表面的に読み取れることが真の原因とは限らないのです。システムがどういう動きをするとそのようなデータになるのか、それを探れるだけの知識が必要です。上記の例はjavaのエンジニアには当たり前の話かもしれませんが、それでも知らなければ適切には解決できません。これも一つの技術力でしょう。

 

今回はサービスイン後に起きた性能問題を取り上げましが、そもそも性能問題を発生させないために必要だと思うことを次回に紹介します。


■ ITの力で個人の生産性を向上させる情報を 日刊でお送りするメルマガ登録はコチラ!

ご登録されたいE-mailアドレスを入力し、登録ボタンを押してください。

関連記事

feedly・RSSで最新情報を購読

follow us in feedly

メルマガ登録はコチラ!

■ITの力で個人の生産性を向上させる情報を
日刊でお送りするメルマガ登録はコチラ!

ご登録されたいE-mailアドレスを入力し、
登録ボタンを押してください。

2012年4月
« 3月   5月 »
1234567
891011121314
15161718192021
22232425262728
2930  

おすすめ記事

登録されている記事はございません。