有没有办法从正在运行的进程中确定(甚至估计)Solaris上进程的内存使用情况?我需要编写一个函数来进行一些内存清理,以便在它变得太大时将我的进程保持在某个阈值以下 .
看起来Solaris不支持getrusage或任何查询系统以获取当前的RSS / VSZ(内存使用情况),如Linux / Windows .
获取信息的一种方法是从 /proc 文件系统中读取数据 . 您可以从 /proc/self/psinfo , /proc/self/map 或 /proc/self/xmap 获取所需信息 . 见 man -s 4 proc .
/proc
/proc/self/psinfo
/proc/self/map
/proc/self/xmap
man -s 4 proc
/proc/self/psinfo 文件包含 struct psinfo / psinfo_t ,如 procfs.h 所述 . 该结构包含 size_t pr_size; ,其中包含"the size of the process image in kBytes", size_t pr_rssize; 包含"resident set size in kBytes" .
struct psinfo
psinfo_t
procfs.h
size_t pr_size;
size_t pr_rssize;
/proc/self/map 和 /proc/self/xmap 文件分别包含 struct prmap / prmap_t 结构和 struct prxmap / prxmap_t 结构的数组 . 两个结构都包含 size_t pr_size; 字段,定义为"size of mapping in bytes" .
struct prmap
prmap_t
struct prxmap
prxmap_t
请仔细阅读 /proc - 确保您了解您尝试读取的数据是否存储为32位或64位进程 . 另外,我认为Solaris /proc 中的所有内容现在都是64位 .
1 回答
获取信息的一种方法是从
/proc
文件系统中读取数据 . 您可以从/proc/self/psinfo
,/proc/self/map
或/proc/self/xmap
获取所需信息 . 见man -s 4 proc
./proc/self/psinfo
文件包含struct psinfo
/psinfo_t
,如procfs.h
所述 . 该结构包含size_t pr_size;
,其中包含"the size of the process image in kBytes",size_t pr_rssize;
包含"resident set size in kBytes" ./proc/self/map
和/proc/self/xmap
文件分别包含struct prmap
/prmap_t
结构和struct prxmap
/prxmap_t
结构的数组 . 两个结构都包含size_t pr_size;
字段,定义为"size of mapping in bytes" .请仔细阅读
/proc
- 确保您了解您尝试读取的数据是否存储为32位或64位进程 . 另外,我认为Solaris/proc
中的所有内容现在都是64位 .