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 位的。
有没有办法从 运行 进程中确定(甚至估计)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 位的。