|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
寫一個關於進程資源監控的程序,有幾點疑惑請教!
寫一個關於進程資源監控的程序在AIX5.1上,有幾點疑惑請教!
在procfs.h中
1.對結構psinfo_t,應如何理解以下幾項:
pr_size; /* process image size in KB (1024) units */
pr_rssize; /* resident set size in KB (1024) units */
process image size進程映像的大小是指進程代碼段和數據段在內存中的大小嗎?那resident set size 又怎麼理解?
2.對結構pstatus_t中,
pr_brksize; /* size of the process heap, in bytes */
pr_stksize; /* size of the process stack, in bytes */
棧的大小是不是指系統所有進程佔用的棧大小,?因為我發現系統除了0進程佔用的棧大小是單獨的一個值,其他所有用戶進程的pr_stksize大小都一樣,而且是一個很大的值.怎麼理解?
請指教! |
寫一個關於進程資源監控的程序,有幾點疑惑請教!
rss是指進程在物理內存中的佔用空間。相對應的是swap空間。
可能所有的用戶進程最初都會分配一個缺省的stack size。但是如果超過這個大小,系統會自動的增長大小。man 2 getrlimit |
寫一個關於進程資源監控的程序,有幾點疑惑請教!
樓上所說的"相對應的是swap空間"是指process image size 嗎? |
寫一個關於進程資源監控的程序,有幾點疑惑請教!
process image size 指的應該是佔用的虛存空間,包括RSS和swap上的佔用空間。
找本OS原理的書看看,就明白了 |
寫一個關於進程資源監控的程序,有幾點疑惑請教!
process image size的大小仍然沒有太明白,樓上說:
"process image size 指的應該是佔用的虛存空間,包括RSS和swap上的佔用空間。"感覺仍然又問題,下面是我用程序和命令分別查看的一個進程佔用內存資源數據:
------------------------------------------------------
process pid :901234
process command :WSH
process command params :WSH -c 6 -i 2 -s 1835019 -p 2048 -P 65535
process image size (KB):2704
resident set size (KB):2728
process heap (Bytes) :3158144
process stack (Bytes) :267530240
process threads number :1
------------------------------------------------------
# ps v 901234
PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND
901234 pts/5 A 1:28 0 2696 2728 32768 9 32 2.5 1.0 WSH -c
#
# ps -p 901234 -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
200401 A 102 901234 671964 3 61 20 200046ca 2704 f10000af70044400 pts/5 1:30 WSH
#
照樓上理解,顯然process image size不對.
請指教.你說的OS原理書,不是我沒有,而是書上根本沒有講清楚.還是相互探討一下吧. |
寫一個關於進程資源監控的程序,有幾點疑惑請教!
up |
寫一個關於進程資源監控的程序,有幾點疑惑請教!
哦,不知道你的process image size怎麼得到的。
我現在也沒有AIX環境。但是linux上的top,能看到這些信息。SIZE都大於
RSS。
我貼出top的相關man。你比較一下,也許定義不一樣。
[code]
SIZE The size of the task's code plus data plus stack space, in kilo-
bytes, is shown here.
TSIZE
The code size of the task. This gives strange values for kernel
processes and is broken for ELF processes.
DSIZE
Data + Stack size. This is broken for ELF processes.
TRS Text resident size.
SWAP Size of the swapped out part of the task.
D Size of pages marked dirty.
LC Last used processor. (That this changes from time to time is not
a bug; Linux intentionally uses weak affinity. Also notice that
the very act of running top may break weak affinity and cause more
processes to change current CPU more often because of the extra
demand for CPU time.)
RSS The total amount of physical memory used by the task, in kilo-
bytes, is shown here. For ELF processes used library pages are
counted here, for a.out processes not.
SHARE
The amount of shared memory used by the task is shown in this col-
umn.
[/code] |
寫一個關於進程資源監控的程序,有幾點疑惑請教!
image size應該是程序本身的大小,包括代碼段和數據段。而程序背載入內存後,會有自己的堆和棧,當然rss要大於image size了 |
寫一個關於進程資源監控的程序,有幾點疑惑請教!
| 寫一個關於進程資源監控的程序,有幾點疑惑請教!
-->
從wufeiwf的第一個例子和我觀察的幾個系統(hp, linux, solaris)top工具來看,rss並不是一定大於SIZE(不知道是不是就是process image size?)的,而正好相反,都是是小於SIZE的。我照抄hp上top的man給你參考一下。
[code]
SIZE Total size of the process in kilobytes.
This includes text, data, and stack.
RES Resident size of the process in kilobytes.
The resident size information is, at best,
an approximate value.
[/code]
我也觀察過一些服務,如果正常的話,SIZE會慢慢增長,如果沒有內存洩漏,大小會穩定,否則會一直增長下去。
至於你數據中的heap大小,我覺得不一定已經佔用的大小,也許是初始分配的堆段的大小。
從我的理解來說SIZE(hp,linux上)指的就是進程佔用的所有虛存大小。包含code,data,heap,stack。 |
寫一個關於進程資源監控的程序,有幾點疑惑請教!
首先,樓主所提到的image size是指procsinfo結構中的pr_size的值,並非通過top等工具得到SIZE值。procsinfo結構是aix系統中的進程表,由於系統的不同,其結構也不盡相同。從字面意義上來看,image size即指映像大小,應該是程序本身的大小。一般來說一個進程的應該包括:正文(代碼)、初始化數據、未初始化數據、棧、堆等。其中未初始化數據在程序文件中存儲的只是其空間大小,當程序執行時由加載器負責分配實際空間並置0。同時,堆和棧也如此。而rss從字面意義上來看應該是其駐留在內存中的大小。如果單考慮程序的運行,rss應該是大於image size的,早期的unix沒有虛存機制,也確實應該是這樣的。不過,現在的unix系統一般均採用分頁的虛存機制,物理內存和程序地址空間均被劃分為固定大小的頁。系統在加載程序時是不會將程序的映像全部加載,只為程序分配必須的內存用於進程的執行,當然也會預分配一些頁。當物理內存不夠時系統也會將那些很少使用的頁置換到交換區。所以rss的值應該是隨著進程執行的不同狀態而有不同的值。一個進程的堆和棧一般在初始化時就已確定了,不會隨著程序的運行而發生變化。當堆棧的大小不夠時系統會產生異常。而且儘管程序不停的申請內存其rss值也並不一定會增大,因為雖然對於進程來說其所有的地址空間都是可用的,但並非表明他們現在都位於實際內存。而且aix缺省採用延遲頁分配策略,只有當這些頁被訪問時,他們才會被真正的分配。rss的不斷增大表明進程最近有大量不同的頁被引用,不一定是內存洩漏引起,但如果在整個進程的運行期間一直在增加,則有可能是。另外,tuxedo並非一定未打補丁,也可能是用戶的服務程序沒有寫好。
如果樓主有意編寫性能監控程序的話看一下aix的《performence tools guide and reference》一書,裡面詳細介紹了aix的性能監控和統計api,還有例程。 |
寫一個關於進程資源監控的程序,有幾點疑惑請教!
哦,照wwc的說法,如果process image size是指映像大小,那監控這個值沒有太大的意義。而且要驗證這個說法,很簡單,看看實際的程序大小,比較一下這個值就知道了。 |
| |