![我应该如何监视 SunOS/Solaris 中的内存使用情况/性能?](https://linux22.com/image/581084/%E6%88%91%E5%BA%94%E8%AF%A5%E5%A6%82%E4%BD%95%E7%9B%91%E8%A7%86%20SunOS%2FSolaris%20%E4%B8%AD%E7%9A%84%E5%86%85%E5%AD%98%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5%2F%E6%80%A7%E8%83%BD%EF%BC%9F.png)
上周我们决定在正在运行的 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,我得到了以下图表:
这几乎没有什么信息量。将其与 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 及其如何观察它非常有帮助。