Solaris仮想メモリを間違って監視している理由

パートIとIIでは、 仮想メモリとは、および方法 Linuxで仮想メモリを監視する.

Solarisはなぜ違うのですか? 1つの理由:(2)スワップスペースを仮想化し、物理メモリの未使用部分をスワップスペースとして含めること、および(XNUMX)ページングとスワッピングの区別を維持すること。

これらのXNUMXつの要因は、特にSNMPを介して照会された場合に、データの混乱と誤解を引き起こすことがよくあります。

Linuxの場合と同じ一連の質問に答えたいと思います。

  • 使用中の物理メモリの量
  • 使用中の仮想メモリの量
  • 物理メモリからディスクへのメモリの移動速度はどれくらいですか

ただし、Solarisでは、少し異なるツールともう少し理解が必要です。

Solarisの物理メモリ使用量

Solaris10_1-13__実行中_

最も簡単な方法は実行することです vmstat 1 2 XNUMX行目を見てください。 (vmstatの最初の行は、システムの起動以降のアクティビティのグローバル平均です。)見出しの列 無料です。 は、空きメモリの量をKバイトで示しています。Solarisは、この図にファイルシステムキャッシュを含めるのに十分優れているため、使用可能なメモリを適切に表しています。 上記のシステムには、約150Mの空き物理メモリがあります(そのうちのいくつかはファイルシステムキャッシュとして使用されている可能性があります)。詳細な内訳を確認するには、次を実行します。 エコー:: memstat | mdb -k

使用中の仮想メモリ

のマニュアルページを読む swap、使用中のスワップスペースの量を確認するための最良のコマンドは次のようになります。 スワップ-s、「合計スワップスペース使用量に関する要約情報」を報告するものとしてリストされています。 それが実際に行われていることですが、Solarisではスワップスペースに物理メモリの一部も含まれていることを考えると、思ったほど有用ではありません。 私は使用することを好む スワップ-l、manページによると、これは単に「すべてのスワップ領域のステータスを一覧表示する」ことです。

これらXNUMXつのコマンドの出力を比較します。

bash-3.2#swap -s total:267032kバイト割り当て+ 86184k予約= 353216k使用、964544k使用可能bash-3.2#swap -l swapfile devswaploブロック空き/ dev / zvol / dsk / rpool / swap 181,1 8 2097144 2097144 bash -3.2#

swap -sを見ると、合計(353216 + 964544)kの353216kを使用しているようです。つまり、26%が使用されています。 ただし、swap -lを見ると、すべての2097144ブロックが空いているように見えるため、使用率は0%です。 (問題のブロックは512バイトであるため、1GBの空き容量があります。これは、このシステムの合計スワップスペースです。)

では、どちらが正しいのでしょうか。 どちらも–ですが、swap -sには、仮想スワップとして使用されている物理メモリの部分が含まれていることを忘れないでください。 パフォーマンスと容量の監視については、実際には物理メモリに支えられているスワップメモリ​​は気にしません。 (物理メモリのスワップイン/スワップアウトによるパフォーマンスの低下は明らかにありません。)別の問題は、仮想スワップシステムによって使用される物理メモリの量が、物理メモリに対する他の要求の影響を受けることです。 swap -sによって報告されるように、使用されるスワップは、すべての物理ディスクスワップパーティションを使用したり、システムのワークロードを実際に変更したりすることなく、かなり変動する可能性があります。

Linuxと同様に、スワップの使用率が高いこと自体は問題を示すものではありません。 プロセスを生成するための空き仮想メモリがこれ以上ないほど高いスワップ使用量は大きな問題であるため、不足しないようにする必要がありますが、パフォーマンスを低下させるのはアクティブなスワップです。

スワッピングの速度、またはメモリの負荷を監視する

上記のように、Solarisは、スワッピング(プロセスのすべてのメモリを仮想メモリに移動する)とページング(プロセス全体ではなく、最も使用されていないページをスワッピングする)の区別を保持します。

これらの活動はで見ることができます vmstat -S 1

 kthrメモリページディスク障害cpurbwスワップフリーsiso pi po fr de sr cd cd s0 --in sy cs us sy id 0 0 69 706068 6272 0 0 12 425 4532 0 209031 94 0 0 0 590 2853 3964 2 10 88 0 0 69 702168 6264 0 0 4 388 4012 0 206960 133 0 0 0 686 2726 7806 2

上記のvmstat出力は、プロセスをスワップインまたはスワップアウトしていないシステムを示しています( siso 列)、ただし積極的にメモリをページアウトしています(po)および(程度は少ないが)のページングpi).
通常、-Sフラグがない場合、vmstatはページング情報のみを表示し、スワッピングは表示しません。システムがプロセスのスワッピングに頼らなければならないことは非常にまれです。

Solarisには、vmstat出力にもうXNUMXつの有用なメトリックがあります。 スキャンレート (に表示されます sr カラム)。 これは、ページスキャナーによってスキャンされたページです。カーネルスレッドは、空きメモリの量がしきい値(通常は物理メモリ全体の1/64)を下回ったときに実行されます。 ページスキャナーは、スワップデバイスへのページアウトに最近使用されていないページを検索するため、解放します。 スキャンレートがゼロ以外の場合、サーバーにメモリ不足があります。 スキャンレートが スロースキャンレート (デフォルトは100)XNUMX秒以上続くと、システムは解放するページをより積極的に探します。

したがって、Solarisでは、監視する項目は pi,po, sr vmstatの列。

SNMPdはあなたの友達ではありません

OK、Solaris内からメモリ使用量を監視するのは簡単なはずです。 しかし、あなたの管理ステーションからはどうですか? ほとんどの人はSNMPを使用してシステムを監視しますが、これは多くの場合にうまく機能します。 だが Solarisスワップレートの場合。 使用される標準MIBオブジェクトは、.1.3.6.1.4.1.2021.11.62.0と.1.3.6.1.4.1.2021.11.63.0、またはssRawSwapInとssRawSwapOutです。 合理的に聞こえますが、Solarisがスワッピングとページングを区別し、スワップする必要がほとんどないことを考えると、これは有用なメトリックではない可能性があります。 (ほとんどの場合、スワッピングの量はゼロになります。)

たとえば、次のシステムについて考えてみます。

bash-3.2#vmstat 1kthrメモリページディスク障害cpurbw swap free re mf pi po fr de sr cd cd s0--in sy cs us sy id 0 0 13 1047524 253784 5 30 1 7 10 0 410 7 8403 0 0 180 305 174 0 51 49 1 0 65 783244 51480 6 16835 0 3084 3228 0 154059 23 0 0 0 481 34452 756 18 15 67 0 0 65 731404 6268 7 4013 0 4088 6800 0 194145 77 0 0 0 510 8968 839 5 10 85 0 0 65 718752 6272 21 6681 0 4088 9772 0 192439 132 0 0 0 800 14137 11622 8 15 77 0 1 65 710584 6232 11 2025 0 3604 8531 0 188713 109 0 0 0 562 4880 3762 3 10 87 0 0 65 707544 6256 440 1145 40 4048 4614 0 208458 173 0 0 0 905 3028 14583 3 29 68 0 0 65 1303988 590132 13 288 1038 0 0 0 0 472 0 0 0 1236 1130 1079 1 9 90 0 0 65 1303956 589768 12 31 20 0 0 0 0 20 0 0 0 438 1416 457 2 2 96 0 0 65 1303956 589548 24 32 4 0 0 0 0 10 0 0 0 379 949 280 ^ C bash-1#/ opt / csw / bin / snmpwalk -c2 -cpublic 97 .3.2 .1.ssSwapOut UCD-SNMP-MIB :: ssSwapOut.127.0.0.1 = INTEGER:1.3.6.1.4.1.2021.11 kB

このシステムは、多くのメモリプレッシャーにさらされています。200,000秒あたり約4000ページがスキャンされ、XNUMX秒あたり約XNUMXページがページアウトされます。 しかし、SNMP監視ツールで最も一般的に使用されているOIDによると、スワップアウトはゼロでした。 これは正しいです。 ラボレーション ページのみがスワップアウトされました。 ただし、サーバーのパフォーマンスを低下させるメモリ不足の状態を検出しようとしている場合は、あまり役に立ちません。 (一方、Linuxはページングとスワッピングを区別しないため、これらのOIDに対してスワップイン/スワップアウトされたページの値を報告します。)

では、監視システムはどのようにしてページインまたはページアウトされたページの有用なメトリックとスキャンレートを取得するのでしょうか。 がある いいえ スキャンレート、またはページイン/ページアウトのレートを報告するOID。 したがって、デフォルトのSNMPは機能しません。 これにはXNUMXつの選択肢があります。 snmpdを拡張する 必要な値を返す(つまり、各サーバーでsnmpdを変更する:puppetやその他の構成管理ツールを使用している場合は問題にならないことを願っています-確かにそうですよね?)、またはSSH経由でデータを収集して実行しますコマンド。 (後者はLogicMonitorが使用するものです Solarisモニタリング.)

いずれの場合も、簡単な形式で出力するデータを取得する必要があります。 vmstat 1 1はデータを提供しますが、ひどくマシンフレンドリーな形式ではありません。 代わりに、 vmstat -s。 これは、起動後のシステムに関する累積統計を報告します。これは、XNUMXつのサンプル間の差をレートとして補間できる監視システムに最適です。

ここでの秘訣は、名前が他の形式のvmstatと同じではないため、メトリックが何であるかを理解することです。

したがって、vmstat-sの出力は次のようになります。

bash-3.2#vmstat -s15スワップイン12スワップアウト75ページスワップイン1295ページスワップアウト999103合計アドレストランス。 発生した障害5191ページイン3988ページアウト5208ページページング55210ページページングアウト132724合計再利用132722フリーリストからの再利用12355015ページクロックデーモンによって検査

これは、以下のいくつかの例を使用して、より一般的な形式のvmstat列に変換できます。

クロックデーモンによって検査されたページsr列に相当
ページングされたページ円周率列に相当
ページアウトされたページpo列に相当

他の統計(たとえば、ページイン-操作中のページであり、それぞれが複数のページを担当している可能性があります)を監視および収集することも役立ちますが、これらは重要な統計です。

Linuxで使用しているのと同じSNMPOIDに依存している場合は、実際にはSolarisページングアクティビティを有用な方法で測定していないことに注意してください。 (あなたはスワッピングを測定しています。)

したがって、監視システムが実際にvmstat -sの出力を解析していることを確認してください。そうすれば、次のような結果が得られます。

LogicMonitor_-solaris _-_ダッシュボード

もっと見たいです? ここで私たちに従ってください:

Facebookで
Twitterで 
LinkedInで

または、@メールでお問い合わせください [メール保護]