リソース
Resource
コンピュータがプログラムを動かすために必要とする、CPU(計算能力)、メモリ(記憶領域)、ストレージ容量、ネットワーク帯域などの「有限な資源」の総称です。
🐾 猫で例えると?
写真の茶トラ猫は、飼い主の作業に欠かせない「iPad」というアイテムを枕にして、完全に独占(占有)してくつろいでいます。ITの世界における「リソース」も、まさにこのiPadのようなものです。システムが快適に動くためには「資源」が必要不可欠であり、一つの重い処理(または一匹の猫)がそれを過剰に独占してしまうと、他の作業がまったく進まなくなってしまうのです。
💻 IT現場における「リソース」とは?
たとえばCPUが処理を担当し、RAMが作業中のデータを保持します。どちらかが不足すると待ちが増えますが、CPU100%は計算を有効に進めている場合もあります。使用率だけでなく、応答時間や待ち行列、エラーも一緒に見ます。
近年では、ハードウェア(物理的な機械)の能力だけでなく、データベースへの同時接続数(コネクション数)や、外部サービスを呼び出せる回数(APIレートリミット)、さらには「開発するエンジニアの人数や時間(人的リソース)」も含めて幅広く「リソース」として管理されます。
⚠️ リソース管理(マネジメント)の重要性とメモリリーク
限られたリソースを複数のプログラムで公平かつ効率的に分け合う(スケジューリングする)のが、OS(オペレーティングシステム)の大きな役割です。しかし、プログラム側の行儀が悪いと、致命的な問題を引き起こします。
使い終わったら「解放」するルール
使い終えた資源を適切に返せず蓄積する問題を、リソースリークと呼びます。そのうちメモリに関するものがメモリリークです。ファイル記述子やDB接続の不足は、RAMが十分でも起こり得ます。
// JavaScript:不要なデータへの参照を外す例
let cachedCats = ["茶トラ", "アメショ"];
console.log(cachedCats.length);
cachedCats = null;
// 他から到達できなければGCの回収対象になる。即時回収の指示ではない。 JavaScriptのGCは、到達できなくなったオブジェクトを回収します。変数にnullを入れても、別の配列やイベントリスナーなどが参照していれば回収されません。また、通信やファイルなどの資源には専用の終了処理が必要な場合があります。
🛠️ 「リソース」を賢く管理するためのポイント
安定したシステムを運用・開発するために、リソースに関して気をつけるべきポイントは以下の通りです。
- リソースの監視(モニタリング)を怠らない: CPUやメモリの使用量を記録し、サービスに影響する状態を通知できるようにします。監視方法は、ZabbixやCloudWatchなどのツールも含め、運用規模に合わせて選びます。
- 不要な処理は確実に終了(Close)する: プログラミングにおいて、開いたファイルやデータベースへの接続は、使い終わったら必ず「閉じる処理」を記述し、有限なリソースを即座にシステムへ返還する癖をつけます。
- 不足する資源に合わせて対策: 台数を増やしても、共有DBの接続上限や外部APIの制限は解消しない場合があります。待ち時間、プール上限、キャッシュ、処理量を調べてから増強を選びます。
iPadを枕にする茶トラがいると飼い主が作業できないように、共有する資源の不足は別の処理にも影響します。遅さの原因を調べるときは、CPU、メモリ、ストレージ、通信をそれぞれ見て、どこが足りないかを確かめてから対策を選びましょう。