Memory Solaris上运行时进程的当前内存使用情况
有没有办法从正在运行的进程中确定(甚至估计)Solaris上进程的内存使用情况?我需要编写一个函数来进行一些内存清理,以便在进程变得太大时将其保持在某个阈值以下Memory Solaris上运行时进程的当前内存使用情况,memory,solaris,Memory,Solaris,有没有办法从正在运行的进程中确定(甚至估计)Solaris上进程的内存使用情况?我需要编写一个函数来进行一些内存清理,以便在进程变得太大时将其保持在某个阈值以下 Solaris似乎不支持getrusage或任何查询系统当前RSS/VSZ(内存使用)的方法,如Linux/Windows。获取信息的一种方法是从/proc文件系统读取数据。您可以从/proc/self/psinfo、/proc/self/map或/proc/self/xmap获取所需信息。请参见man-s 4程序 /proc/self
Solaris似乎不支持getrusage或任何查询系统当前RSS/VSZ(内存使用)的方法,如Linux/Windows。获取信息的一种方法是从
/proc
文件系统读取数据。您可以从/proc/self/psinfo
、/proc/self/map
或/proc/self/xmap
获取所需信息。请参见man-s 4程序
/proc/self/psinfo
文件包含一个struct psinfo
/psinfo\u t
,如procfs.h
所述。该结构包含size\t pr\u size
包含“以千字节为单位的进程映像大小”和size\u t pr\u rssize代码>包含“常驻集大小(以KB为单位)”
/proc/self/map
和/proc/self/xmap
文件分别包含结构prmap
/结构和结构prxmap
/结构数组。两种结构都包含一个size\u t pr\u size代码>定义为“以字节为单位的映射大小”的字段
仔细阅读/proc
-确保您了解您试图读取的数据是为32位还是64位进程存储的。顺便说一句,我认为Solaris/proc
中的所有内容现在都是64位的。您用什么语言编程?你能用prstat吗?我用的是C/C++。prstat是终端的命令。据我所知,在运行时没有简单的方法将这些信息输入到进程中(如果有任何方法的话)。根据prstat
()的手册页,prstat
同时接受间隔和计数参数。您可以使用类似于PRSTAT11
的工具运行一次prstat
。您可以通过popen()
运行它,并通过这种方式轻松收集输出。添加-n
选项以列出15个以上的进程:prstat-n 100000 1 1
。pr\u rssize是峰值rss,它不会告诉我当前的大小。我知道我的进程太大的唯一方法是如果峰值发生变化,这不是检查进程大小的可持续方法。我正在寻找一种在任何给定时刻了解当前rss的方法。编辑:rss不会下降,因为释放分配给进程的内存不会将内存返回操作系统。因此,peak RSS是唯一的RSS。将此标记为最正确的答案。