Memory 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上进程的内存使用情况?我需要编写一个函数来进行一些内存清理,以便在进程变得太大时将其保持在某个阈值以下


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。将此标记为最正确的答案。