topas 中 PgSp 欄位的含義

stevens0102發表於2010-10-13
$topas -P
Topas Monitor for host:    jhhost     Interval:   2    Thu Aug 26 16:23:57 2010

                                                      DATA  TEXT  PAGE               PGFAULTS
USER        PID    PPID PRI NI   RES   RES SPACE    TIME CPU%  I/O  OTH COMMAND
oracle   324076       1 102 20  1293  4827  1293    3:07 21.7    0    0 oracle
patrol   307496       1  80 30  5072   619 11840 2465:39  0.3    0  230 PatrolAgent
patrol   241988       1  60 20   685     6   835  438:53  0.1    0    0 snmpmagt
oracle   463258  508290  60 20   441    49   441    0:00  0.0    0    0 topas
root     172464  156076  60 20    67     0   345  510:40  0.0    0    0 dtgreet
oracle   467318       1  60 20  1014  4827  1014    0:00  0.0    0    0 oracle
oracle   327748       1  60 20   256  4827  1084   16:25  0.0    0    0 oracle
patrol   299382  307496  60 20   187   954   539   39:58  0.0    0    0 sqlplus
oracle   311356       1  60 20   134  4827  1396   20:18  0.0    0    0 oracle
oracle   303164       1  60 20   131  4827  2167   25:44  0.0    0    0 oracle
root     278788  205276  60 20    40    61   306   47:43  0.0    0    0 i4llmd
root      28972       0  37 41    24     0    29   75:29  0.0    0    0 gil
root      61592  160160  60 20    64    26   651   20:13  0.0    0    0 X
root       4384       0  16 41    11     0    12   37:30  0.0    0    0 swapper
oracle   307258       1  60 20   469  4827  1873   17:29  0.0    0    0 oracle
root     221672       1  60 20   257    31  1600    9:26  0.0    0    0 ltid
root     282672       1  60 20   296    19  6578    7:27  0.0    0    0 vmd
root     225300       1  60 20   177   308   716   12:42  0.0    0    0 naviagen
root     204816       1  60 20    45     0    47   11:55  0.0    0    0 rpc.lock
root     192708       0  60 20    11     0    12    0:22  0.0    0    0 n4bg

$ topas
Topas Monitor for host:    jhhost                              EVENTS/QUEUES    FILE/TTY
Thu Aug 26 16:24:56 2010   Interval:  2                 Cswitch     346           Readch    88771
                                                                                      Syscall    2742           Writech   23220
Kernel    0.5   |#                                              |           Reads       141           Rawin         0
User     42.3   |#############                  |           Writes      124            Ttyout      259
Wait      0.1   |#                                                |           Forks         0                Igets         0
Idle     57.1   |#################           |           Execs         0               Namei        78
                                                                                      Runqueue    0.0         Dirblk        0
Network  KBPS   I-Pack  O-Pack   KB-In  KB-Out  Waitqueue   0.0
en0      69.2    112.5   118.5    45.7    23.5
lo0       2.0      3.5     3.5     1.0     1.0                              PAGING                      MEMORY
en1       0.7      8.5     0.0     0.7     0.0                            Faults       54              Real,MB    3728
                                                                                           Steals        0               % Comp     87.7
Disk    Busy%     KBPS     TPS KB-Read KB-Writ     PgspIn        0              % Noncomp   8.5
hdisk46   0.0     39.2     0.5     0.0    39.2                     PgspOut       0            % Client    8.5
skpower7  0.0     39.2     0.5     0.0    39.2                   PageIn        0
hdisk1    1.0      8.0     2.0     0.0     8.0                         PageOut       0        PAGING SPACE
                                                                                               Sios          0        Size,MB   16384
Name                    PID   CPU%  PgSp    Owner                                          % Used     15.1
oracle            410020   24.9        5.0      oracle              NFS (calls/sec)  % Free     84.8
oracle            324076   23.4        5.1      oracle              ServerV2       0
PatrolAgent  307496    0.1         46.2     patrol              ClientV2       0   Press:
topas             389584    0.1         1.8       oracle             ServerV3       0   "h" for help
dtgreet          172464    0.1          1.3       root                 ClientV3       0   "q" to quit


上 面是在 AIX 5.3 系統下的兩份 topas 輸出,第一份是僅輸出程式(帶 -P 選項),第二份是囊括 CPU、記憶體、交換空間、I/O 和程式多項資源指標於一個介面的 topas 標準輸出。PgSp 是一項描述程式的指標,是 Page Space 的縮寫,本義指的是程式所用頁空間大小,在兩份輸出中,topas -P 顯示的 Page Space 以頁為單位(1頁等於4KB),topas 標準輸出中 PgSp 以 MB 為單位。

比較 、 和 AIX 上 top 輸出中與 PgSp 相似的欄位( HP-UX 上是 SIZE ,Linux 上是 VIRT),PgSp 實在是名字起得不好,太容易和 Paging Space 混淆,注意一個是名詞 Page,一個是動詞 Paging,Paging Space 在 AIX 中與 Swap Space 是互換使用的,Paging Space 是換頁空間,也是交換區所在。PgSp 是虛空間(Virtual Space),不是換頁空間或交換區空間。man topas 手冊頁對 Page Space 說明如下:

Virtual working set size used by process (4KB pages). Note: The true paging space allocations per process are not available using the  topas  command. Refer to the  svmon  command for more detailed.

PgSp 只包括程式私有資料段以及堆疊段虛空間,不含執行映象、共享庫、共享記憶體部分,PgSp 的值一定大於或等於 DATA RES(見前面 topas -P 輸出) 的值,因為 PgSp 會包括不在記憶體中的不活動的私有資料段部分或者已被交換到換頁空間上的部分。什麼叫不活動的資料段,舉個例子,你有一個應用程式透過 malloc 系統呼叫申請了 1MB 記憶體空間,系統並非馬上就在實體記憶體中就給它劃了那麼多空間,你如果一直不用這段記憶體(譬如作 I/O 操作),那麼這段空間只在虛空間裡存在。在前面 topas -P 輸出中,我們看到一個程式號是 324076 的 oracle 程式,其 PgSp 與 Data RES 相同,都是 1293 頁;一個程式號是 327748 的 oracle 程式,其 PgSp 是 1084 頁,Data RES 是 256 頁;一個程式號是 307496 的 PatrolAgent 程式,其 PgSp 是 11840 頁,Data RES 是 5072 頁。一般記憶體充裕的情況下,PgSp 與 Data RES 是一致的,除非你程式編得不好,申請一個大記憶體又不用。前面 topas 標準輸出中我的計算記憶體(%Comp)已佔到總記憶體的 88%,換頁空間(paging space)使用了 15%,這不是一個記憶體很充分的系統。

大家會有一個問題:我如何知道換頁空間(paging space)是被哪些程式佔用了?前面那段英文交代得很清楚,topas 沒法告訴你這些,用 svmon 命令可看到程式使用換頁空間的情況。

另外要說明的是 ps 命令中也有類似 PgSp 的欄位,以 PatrolAgent 這個程式(pid 號為 307496)為例,執行以下命令:

$ ps avx | head -1; ps avx | grep 307496
    PID    TTY STAT  TIME    PGIN   SIZE   RSS   LIM   TSIZ   TRS  %CPU %MEM  COMMAND
 307496     -   A    2478:25 309661 47360 21900 32768  3632   2332  0.1  1.0  PatrolAgent

SIZE 欄位與 PgSp 等義。ps 輸出中與記憶體/虛存有關的單位是 KB,看 SIZE 值是 47360KB(46.2MB),也就是 11840 頁,與 top 中的 PgSp 完全相同。

前 面說過要了解 AIX 中某個程式使用換頁空間的情況,正規方法是用 svmon 命令,不過你也可以用 ps 命令作個大致換算,看前面 PatrolAgent 程式的 ps 輸出,SIZE-(RSS-TRS)=47360-(21900-2332)=27792KB, 這個 PatrolAgent 程式大概使用了26MB 的換頁空間,嘿,這 26MB 也可能是未使用的虛空間呢。

你可以用下面的 shell 指令碼來估算你的系統中全部程式佔用了多少換頁空間(提醒你只是估算):

$ ps avx | sed -e "1d" | awk 'BEGIN { total = 0 } { total += ( $6 - ( $7 - $10 ))} END { print "total = ",total }'

注 意 AIX 的 ps 輸出中 SIZE 欄位以及 RSS 欄位都不包括共享記憶體(shared memory)部分,這點與 Linux 不同,使用 ps 要注意到這種差異。一般資料庫伺服器的共享記憶體段都常駐記憶體,不會用到換頁空間,如果上面 shell 指令碼算出的換頁空間佔用量明顯小於 lsps -s 命令顯示的換頁空間使用量,有可能大的共享記憶體段被交換出去了,這是非常糟糕的情況,要趕緊打報告,擴記憶體了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23488160/viewspace-675840/,如需轉載,請註明出處,否則將追究法律責任。

相關文章