先週、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をいじると、次のグラフが表示されます。
これはほとんど有益ではありません。これを、より詳細なLinuxノードのデフォルトプラグインと比較します。
最も重要なこととして、これはアプリケーションが実際に使用しているメモリの量を示しています。
だから、最初の質問:SunOSの詳細なメモリ情報をデフォルトのシステムツールで取得することは可能ですか (つまり、top
を使用しない)?
次のパズルへ:グラフを見て、メモリグラフに未使用のメモリがあるにもかかわらず、「ページングイン/アウト」グラフのアクティビティに気づきました:
さらに調査したところ、df
がswap
に/tmp
がマウントされていると報告していることがわかりました。 Webをドリルダウンして、 df
はswap
を表示することを理解しましたが、実際には、tmpfs
としてマウントされます。これがスワップアクティビティを説明するものかどうかはわかりません。
Solarisのデフォルトのmunin-pluginは、kstat -p -c misc -m cpu_stat
を使用してこれらの値を取得します。これがcpu_stat
モジュールを使用していることはすでに不思議です。では、「ページング」グラフを誤って解釈しているだけかもしれません。
2番目の質問:ページンググラフは、メモリの一部がディスクにページングされていることを示していますか?それとも、アクティビティは/tmp
のファイル操作が原因ですか?
最初の質問:デフォルトのシステムツールで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そこにロックされていません。
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を理解し、それを観察する方法を理解するのに非常に役立ちます。