我應該如何監控 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外掛,給了我下圖:這幾乎沒有什麼資訊。將此與具有更多詳細資訊的 linux 節點的預設外掛進行比較:
最重要的是,這向我展示了應用程序實際使用了多少記憶體。
那麼,第一個問題:是否可以使用預設的系統工具(即不使用)獲得關於 SunOS 的詳細記憶體資訊
top
?進入下一個難題:看到圖表,我注意到“分頁/分頁”圖中的活動,即使記憶體圖仍有未使用的記憶體:
經過進一步調查,我發現
df
報告/tmp
安裝在swap
. 在網上鑽研,我知道df
會顯示swap
,但實際上,它是作為tmpfs
. 現在我不知道這是否解釋了交換活動。solaris 的預設 munin-plugin 用於
kstat -p -c misc -m cpu_stat
獲取這些值。我發現這是使用cpu_stat
模組已經很奇怪了。所以也許我只是誤解了“分頁”圖?**第二個問題:**分頁圖是否表明部分記憶體被分頁到磁碟?或者是由文件操作引起的活動
/tmp
?
第一個問題:是否可以使用預設的系統工具(即不使用top)獲取SunOS的詳細記憶體資訊?
使用 Solaris 標準工具(現在 SunOS 只是核心名稱)肯定可以獲得詳細的記憶體統計資訊和更多資訊。除了已經提到的之外
echo ::memstat | mdb -k
,您還可以擁有每個程序和每個使用者prstat -a
以及每個區域的記憶體統計資訊prstat -Z
。核心還通過 kstat 介面提供大量統計資訊(munin 正在使用它們)。
例如,如果要顯示總 RAM、核心使用的部分、ZFS 記憶體(核心使用的記憶體的一部分)和空閒記憶體,可以執行以下命令:
kstat -T d -p :::physmem :::pp_kernel zfs:::size :::pagesfree 1 3
如果您正在查看虛擬記憶體使用情況,請使用該
swap -s
命令。第二個問題:分頁圖是否表明部分記憶體被分頁到磁碟?還是 /tmp 中的文件操作引起的活動?
以上都不是。進行此類活動並不一定意味著缺少 RAM 和頁面抖動。相反,您的圖表顯示
sr
值保持在 0。這意味著頁面掃描器沒有活動,因此您安裝了足夠的 RAM。分頁活動僅僅是由於正在讀取和寫入記憶體映射文件。沒什麼可擔心的。/tmp 上的文件僅存在於 RAM 中(在您的情況下),因此訪問它們時不會發生分頁。請注意,Solaris 使用交換術語來命名用於儲存從 RAM 中調出的記憶體頁面的磁碟部分或命名整個虛擬記憶體空間,即交換區域加上未鎖定在那裡的 RAM 部分。