by shigemk2

当面は技術的なことしか書かない

サーバ/インフラを支える技術4 Linux単一ホストの負荷を見極める 3 負荷の軽減について

前回
サーバ/インフラを支える技術4 Linux単一ホストの負荷を見極める 2 負荷とは何か - by shigemk2

CPU使用率の計算結果はグローバルな配列などではなく、
各CPU用に用意された専用の領域に保存される(cpu_usage_stat)
(これによりsarなどでCPUの情報が得られる)

カーネルはプロセス切り替えのために各プロセスが生成されてから
どの程度CPU時間を利用したかを、プロセスごとに記録している。
これを「プロセスアカウンティング」という。

プロセスアカウンティングの記録をもとに、
スケジューラはプロセスの優先順位を決定したり
別のプロセスにCPUを明け渡すようにしている。

どのプロセスがどういう時間を過ごしたかの記録がCPUごとの合計として
計算されていれば、CPUが何にどのくらい時間を使ったかが分かる。

プロセスを複数生成して実行コンテキストを複数確保する(マルチプロセス)
スレッドを複数作成して実行コンテキストを複数確保する(マルチスレッド)

マルチプロセスはメモリ空間を個別に用意しているのに対し、
マルチスレッドはメモリ空間を共有している。

そのため、処理速度ではマルチプロセスに、使用効率はマルチスレッドに軍配
が上がる。

psでプロセスを見ることが出来、さらに-Lをつけるとマルチスレッドの
スレッドを全て表示させる。

また、psにはVSZ(仮想メモリ領域サイズ)とRSS(物理メモリ領域サイズ)の
2種類がある。VSZは、プログラムがメモリを使うにあたり
物理的なメモリを直接扱わせるのではなく、抽象化したソフトウェア的な
メモリを扱わせる機構である。

仮想メモリ機構(ページング)を利用して、プロセスに仮想メモリのアドレスを
渡す(渡された時点ではなく、仮想メモリの領域に書き込みが始まってから
物理メモリとのマッピングを行う)

sarで過去の統計データに遡ってアクセスし(デフォルト)、
また現在のデータを周期的に確認する

Linuxにおいては、メモリ領域を4KBの塊に区切って管理する。
この4KBの塊は「ページ」と呼ばれる。
ページキャッシュは、そのページのキャッシュである。

ディスクからデータを読み取るというのは、ページキャッシュを
構築することである。
読み出したデータはページキャッシュからユーザ空間へ転送される。

Linuxは可能な限り空いているメモリをページキャッシュに回そうとするポリ
シーが存在するので、

  1. 何かディスクからデータを読む
  2. まだそれがページキャッシュ上になく、
  3. かつメモリが空いていれば
  4. (古いキャッシュと入れ替わるのではなく)いつでも新しいキャッシュを構築する

キャッシュ用のメモリがないと、古いキャッシュを捨てて新しいキャッシュと
入れ換える。

全てのデータをページキャッシュ出来るだけのメモリが
ない場合は、メモリを増設する。増設が不可能な場合は、データを分割して
個々のサーバでホストすることを検討する。

また、ページキャッシュはキャッシュの一種なので、一度読み込まれないと
キャッシュにならないので、キャッシュミスしたものは直接ディスクから
読み込まれる。

メモリ不足で直接ディスクから読み込まれている状態のものをスワップという。

vmstatで、仮想メモリ周りの情報を参照することが出来る。



OSのチューニングとは負荷の原因を知り、それを取り除くことであり、
チューニングでマシンの機能以上のパフォーマンスを引き出すことは出来ない。
マシンの性能と比べてパフォーマンスが明らかに低い場合にチューニングは
効果を発揮する。

また、I/O性能の改善のためには、

  • メモリ増設によるキャッシュ領域の確保で対応できるのか
  • そもそもデータ量が多すぎるのか
  • アプリケーション側でのI/Oのアルゴリズムを変更する必要があるのか?

などを見極める必要がある。

次回
サーバ/インフラを支える技術4 Apacheのチューニング - by shigemk2

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)