我应该如何监视 SunOS/Solaris 中的内存使用情况/性能?

我应该如何监视 SunOS/Solaris 中的内存使用情况/性能?

上周我们决定在正在运行的 munin 实例中添加一些 SunOS ( uname -a= SunOS bbs-sam-belair 5.10 Generic_127128-11 i86pc i386 i86pc) 机器。首先,这些机器是预配置的设备,因此,我希望避免在没有服务提供商监督的情况下过多地接触系统。

但是通过编写一个小型套接字服务将其添加到 munin 中相当容易(如果有人感兴趣,我会把它放在 github 上:https://github.com/munin-monitoring/contrib/tree/master/tools/pypmmn

昨天,我为我们的机器实现/调整了所需的插件。问题就在这里:

首先,我还没有找到确定详细内存使用值的方法。我通过运行获取总内存prtconf | grep Memory,使用获取可用内存vmstat。摆弄一个 munin-plugin,我得到了以下图表:

SunOS 内存图

这几乎没有什么信息量。将其与 Linux 节点的默认插件进行比较,后者具有更多详细信息:

比较:Linux 内存图

最重要的是,它向我展示了应用程序实际使用了多少内存。

那么,第一个问题:是否可以使用以下方法获取 SunOS 上的详细内存信息 默认系统工具(即不使用top)?


进入下一个谜题:查看图表时,我注意到“分页输入/输出”图表中的活动,即使内存图中仍有未使用的内存

寻呼输入 传呼输出

经过进一步调查,我发现df报告/tmp安装在 上swap。在网上搜索后,我了解到df将显示swap,但实际上,它是作为 挂载的tmpfs。现在我不知道这是否解释了交换活动。

solaris 的默认 munin-plugin 用于kstat -p -c misc -m cpu_stat获取这些值。我发现使用cpu_stat模块已经很奇怪了。所以也许我只是误解了“分页”图表?

第二个问题:分页图是否表明部分内存被分页到磁盘?或者是由文件操作引起的活动/tmp

答案1

第一个问题:是否可以使用默认的系统工具(即不使用 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 部分。

答案2

不像您的 Linux 示例那么详细,但您可以使用::内存状态宏指令数据库

# 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

核心:用于不可分页内核分配的内存

另一个:匿名内存(进程堆、堆栈、共享内存映射等等)

Exec 和 libs:用于可执行文件和库等映射文件的内存

页面缓存:未映射页面缓存的数量,包括存储在 /tmp 中的数据

释放(缓存列表):空闲列表中的页面缓存量,大部分由文件系统缓存使用

自由(自由列表):实际可用的内存量

McDougall 和 Mauro 撰写的两本有关 Solaris Internals 的书(《Solaris Internals》第 2 版和《Solaris Performance and Tools》)对于理解 Solaris 及其如何观察它非常有帮助。

相关内容