web-dev-qa-db-ja.com

SunOS / Solarisでのメモリ使用量/パフォーマンスを監視するにはどうすればよいですか?

先週、SunOS(uname -a = SunOS bbs-sam-belair 5.10 Generic_127128-11 i86pc i386 i86pc)マシンを実行中のmuninインスタンスに追加することにしました。まず、マシンは事前構成されたアプライアンスであるため、サービスプロバイダーの監視なしにシステムに過度に触れないようにします。

しかし、それをmuninに追加することは、小さなソケットサービスを作成することでかなり簡単でした(誰かが興味を持っている場合は、それをgithubに置きます: https://github.com/munin-monitoring/contrib/tree/master/ tools/pypmmn

昨日、マシンに必要なプラグインを実装/適応しました。そしてここで質問が始まります:

まず、詳細なメモリ使用量の値を特定する方法が見つかりませんでした。 prtconf | grep Memoryを実行して合計メモリを取得し、vmstatを使用して空きメモリを取得します。 munin-pluginをいじると、次のグラフが表示されます。

SunOS memory graph

これはほとんど有益ではありません。これを、より詳細なLinuxノードのデフォルトプラグインと比較します。

Comparison: A Linux memory graph

最も重要なこととして、これはアプリケーションが実際に使用しているメモリの量を示しています。

だから、最初の質問:SunOSの詳細なメモリ情報をデフォルトのシステムツールで取得することは可能ですか (つまり、topを使用しない)?


次のパズルへ:グラフを見て、メモリグラフに未使用のメモリがあるにもかかわらず、「ページングイン/アウト」グラフのアクティビティに気づきました

Paging INPaging OUT

さらに調査したところ、dfswap/tmpがマウントされていると報告していることがわかりました。 Webをドリルダウンして、 dfswap を表示することを理解しましたが、実際には、tmpfsとしてマウントされます。これがスワップアクティビティを説明するものかどうかはわかりません。

Solarisのデフォルトのmunin-pluginは、kstat -p -c misc -m cpu_statを使用してこれらの値を取得します。これがcpu_statモジュールを使用していることはすでに不思議です。では、「ページング」グラフを誤って解釈しているだけかもしれません。

2番目の質問:ページンググラフは、メモリの一部がディスクにページングされていることを示していますか?それとも、アクティビティは/tmpのファイル操作が原因ですか?

2
exhuma

最初の質問:デフォルトのシステムツールでSunOSの詳細なメモリ情報を取得することは可能ですか(つまり、topを使用していません)?

Solaris標準ツールで詳細なメモリ統計などを取得することは間違いなく可能です(SunOSは現在のカーネル名にすぎません)。前述のecho ::memstat | mdb -kに加えて、prstat -aを使用するとプロセスごと、ユーザーごとに、およびprstat -Zを使用するとゾーンごとにメモリ統計を取得できます。

カーネルはまた、kstatインターフェースを通じて多数の統計を提供しています(muninはそれらを使用しています)。

たとえば、RAMの合計、カーネルが使用するRAMの一部、ZFSキャッシュ(カーネルが使用するメモリの一部)、および空きメモリを表示する場合は、次のコマンドを実行できます。

kstat -T d -p :::physmem :::pp_kernel zfs:::size :::pagesfree 1 3

仮想メモリの使用状況を確認するには、swap -sコマンドを使用します。

2番目の質問:ページンググラフは、メモリの一部がディスクにページングされていることを示していますか?または、/ tmpのファイル操作が原因でアクティビティが発生していますか?

上記のどれでもない。このようなアクティビティがあることは、必ずしもRAMとページスラッシングがないことを意味するわけではありません。反対に、グラフはsr値が0のままであることを示しています。これは、ページスキャナーがアクティビティがないため、十分なRAMがインストールされています。ページングアクティビティは、メモリマップファイルの読み取りと書き込みが原因です。心配する必要はありません。/tmpにあるファイルは、 RAM(あなたの場合)なので、それらにアクセスするときにページングは​​発生しません。

Solarisがスワップ用語を使用して、RAMからページアウトされたメモリページを格納するために使用されるディスクの部分に名前を付けるか、仮想メモリ空​​間全体、つまりスワップ領域とその一部に名前を付けるRAMそこにロックされていません。

2
jlliagre

Linuxの例ほど詳細ではありませんが、mdb:: memstatマクロを使用できます。

# echo ::memstat | mdb -k
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                     178001              1390   69%
Anon                        52748               412   21%
Exec and libs                1905                14    1%
Page cache                  16115               125    6%
Free (cachelist)             6654                51    3%
Free (freelist)              1452                11    1%

Total                      256875              2006
Physical                   255662              1997

カーネル:ページング不可能なカーネル割り当てに使用されるメモリ

Anon:匿名メモリ(プロセスヒープ、スタック、共有メモリマッピングなど)

Execおよびlibs:実行可能ファイルやライブラリなどのマップされたファイルに使用されるメモリ

ページキャッシュ:/ tmpに保存されているデータを含むマップされていないページキャッシュの量

Free(cachelist):空きリストのページキャッシュの量、ファイルシステムキャッシュで使用される大部分

Free(freelist):実際に実際に解放されているメモリの量

McDougallとMauroによるSolaris Internalsに関する2冊の本(Solaris Internals、2nd Edition、Solaris Performance and Tools)は、Solarisを理解し、それを観察する方法を理解するのに非常に役立ちます。

2
mghocke