有沒有一種方法可以從正在運行的進程中確定(或估算)Solaris進程的內存使用情況?我需要編寫一個函數來進行內存清理,以在進程變得過大時將進程保持在某個閾值以下。Solaris上運行時進程的當前內存使用情況
似乎Solaris不支持gestusage或任何方式查詢系統的當前RSS/VSZ(內存使用情況),如Linux/Windows。
有沒有一種方法可以從正在運行的進程中確定(或估算)Solaris進程的內存使用情況?我需要編寫一個函數來進行內存清理,以在進程變得過大時將進程保持在某個閾值以下。Solaris上運行時進程的當前內存使用情況
似乎Solaris不支持gestusage或任何方式查詢系統的當前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
所述。該結構包含size_t pr_size;
,其中包含「過程映像的大小(單位爲kBytes)」和size_t pr_rssize;
,其中包含「駐留集大小(單位爲kBytes)」。
的/proc/self/map
和/proc/self/xmap
文件包含struct prmap
/prmap_t
結構和struct prxmap
/prxmap_t
結構陣列,respecitively。兩個結構都包含一個定義爲「以字節爲單位的映射大小」的size_t pr_size;
字段。
請仔細閱讀/proc
- 確保您瞭解您嘗試讀取的數據是否存儲爲32位或64位進程。不速之客,我認爲Solaris /proc
中的所有內容現在都是64位的。
你在用什麼語言進行編程?你可以使用prstat嗎? –
我正在使用C/C++。 prstat是終端的命令。據我所知,在運行時沒有簡單的方法將這些信息提供給進程(如果有任何方法的話)。 – elizzmc
通過'prstat'的手冊頁(http://docs.oracle.com/cd/E19253-01/816-5166/prstat-1m/index.html),'prstat'接受間隔和計數參數。你可以用'prstat 1 1'之類的東西運行'prstat'。你可以通過'popen()'來運行它,並以這種方式輕鬆收集輸出。添加'-n'選項以獲得更多的15個進程:'prstat -n 100000 1 1'。 –