Solaris 上运行时进程的当前内存使用情况

Current memory usage of process at runtime on Solaris

有没有办法从 运行 进程中确定(甚至估计)Solaris 上某个进程的内存使用情况?我需要编写一个函数来进行一些内存清理,以便在我的进程变得太大时将其保持在某个阈值以下。

Solaris 似乎不支持 getrusage 或任何查询系统当前 RSS/VSZ(内存使用情况)的方式,例如 Linux/Windows。

获取信息的一种方法是从 /proc 文件系统读取数据。您可以从 /proc/self/psinfo/proc/self/map/proc/self/xmap 获取您想要的信息。参见 man -s 4 proc

/proc/self/psinfo 文件包含 struct psinfo/psinfo_t,如 procfs.h 所述。该结构包含包含 "the size of the process image in kBytes" 的 size_t pr_size; 和包含 "resident set size in kBytes".

size_t pr_rssize;

/proc/self/map/proc/self/xmap 文件分别包含 struct prmap/prmap_t 结构和 struct prxmap/prxmap_t 结构的数组。两个结构都包含一个定义为 "size of mapping in bytes".

size_t pr_size; 字段

仔细阅读 /proc - 确保您了解您尝试读取的数据是为 32 位还是 64 位进程存储的。顺便说一下,我认为 Solaris /proc 中的所有内容现在都是 64 位的。