關於程式的實體記憶體RSS
通常習慣直接把ps裡的RSS看做是程式使用的實體記憶體。
例如linux下ps的說明如下
rss RSS resident set size, the non-swapped physical memory that a task has used
(in kiloBytes). (alias rssize, rsz).
(in kiloBytes). (alias rssize, rsz).
隨便在筆記本虛機上看一個oracle程式,居然有30M之巨
[oracle@server2 ~]$ ps aux | head -n 1; ps aux | grep LOCAL=YES| grep -v grep
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
oracle 2295 0.0 1.6 856044 30764 ? Ss 21:23 0:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
oracle 2295 0.0 1.6 856044 30764 ? Ss 21:23 0:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
再比如這臺惠普,有1823個遠端連線。
SQL> !ps -ef| grep LOCAL=NO| wc -l
1823
1823
User CPU % Thrd Disk Memory Block
Process Name PID Name (12800%max) Cnt IOrate RSS/VSS On
--------------------------------------------------------------------------------
oraclePRODB2 17050 grid 0.0 1 0.0 226.5mb 241.9mb SOCKT
oraclePRODB2 7029 grid 0.0 1 0.0 216.6mb 218.9mb SOCKT
oraclePRODB2 16306 grid 0.0 1 0.0 227.8mb 239.3mb SOCKT
oraclePRODB2 17114 grid 0.1 1 0.0 224.3mb 243.7mb SOCKT
oraclePRODB2 15957 grid 0.0 1 0.0 226.5mb 240.2mb SOCKT
Process Name PID Name (12800%max) Cnt IOrate RSS/VSS On
--------------------------------------------------------------------------------
oraclePRODB2 17050 grid 0.0 1 0.0 226.5mb 241.9mb SOCKT
oraclePRODB2 7029 grid 0.0 1 0.0 216.6mb 218.9mb SOCKT
oraclePRODB2 16306 grid 0.0 1 0.0 227.8mb 239.3mb SOCKT
oraclePRODB2 17114 grid 0.1 1 0.0 224.3mb 243.7mb SOCKT
oraclePRODB2 15957 grid 0.0 1 0.0 226.5mb 240.2mb SOCKT
...
...
但是這臺機器的實體記憶體一個1T,SGA就固定400G,現在使用者程式只用了447G,因此按程式上的RSS簡單相加肯定是不準的。
Event Current Cumulative Current Rate Cum Rate High Rate
--------------------------------------------------------------------------------
Page Faults 858 4050 343.2 470.9 662.5
Page In 0 0 0.0 0.0 148.9
Page Out 0 0 0.0 0.0 0.0
KB Paged In 0kb 0kb 0.0 0.0 0.0
KB Paged Out 0kb 0kb 0.0 0.0 0.0
Reactivations 0 0 0.0 0.0 0.0
Deactivations 0 0 0.0 0.0 0.0
KB Deactivated 0kb 0kb 0.0 0.0 0.0
VM Reads 0 0 0.0 0.0 0.0
VM Writes 0 0 0.0 0.0 0.0
Total VM : 464.7gb Sys Mem : 104.9gb User Mem: 447.8gb Phys Mem : 1023gb
Active VM: 261.3gb Buf Cache: 0mb Free Mem: 455.8gb FileCache: 14.5gb
MemFS Blk Cnt: 0 MemFS Swp Cnt: 0
--------------------------------------------------------------------------------
Page Faults 858 4050 343.2 470.9 662.5
Page In 0 0 0.0 0.0 148.9
Page Out 0 0 0.0 0.0 0.0
KB Paged In 0kb 0kb 0.0 0.0 0.0
KB Paged Out 0kb 0kb 0.0 0.0 0.0
Reactivations 0 0 0.0 0.0 0.0
Deactivations 0 0 0.0 0.0 0.0
KB Deactivated 0kb 0kb 0.0 0.0 0.0
VM Reads 0 0 0.0 0.0 0.0
VM Writes 0 0 0.0 0.0 0.0
Total VM : 464.7gb Sys Mem : 104.9gb User Mem: 447.8gb Phys Mem : 1023gb
Active VM: 261.3gb Buf Cache: 0mb Free Mem: 455.8gb FileCache: 14.5gb
MemFS Blk Cnt: 0 MemFS Swp Cnt: 0
以程式17050為例,glance裡顯示226.5m。檢視pga實際分配了3M
SQL> select round(pga_alloc_mem/1024/1024, 2)||' (MB)' alloc_mb from v$process where spid = 17050;
ALLOC_MB
-----------------
3.09 (MB)
ALLOC_MB
-----------------
3.09 (MB)
整個PGA一共也就分配了11G
SQL> select round(sum(pga_alloc_mem)/1024/1024/1024, 2)||' (GB)' sum_alloc_mb from v$process;
SUM_ALLOC_MB
---------------------------------------------
11.47 (GB)
SUM_ALLOC_MB
---------------------------------------------
11.47 (GB)
於是檢視glance裡RSS的說明
On HP-UX, for processes that use CPU
time subsequent to midaemon startup,
the resident memory is calculated as
RSS = sum of private region pages +
(sum of shared region pages /
number of references)
The number of references is a count
of the number of attachments to the
memory region. Attachments, for
shared regions, may come from
several processes sharing the same
memory, a single process with
multiple attachments, or
combinations of these.
This value is only updated when a
process uses CPU.Thus, under
memory pressure, this value may be
higher than the actual amount of
resident memory for processes which
are idle because their memory pages
may no longer be resident or the
reference count for shared segments
may have changed.
time subsequent to midaemon startup,
the resident memory is calculated as
RSS = sum of private region pages +
(sum of shared region pages /
number of references)
The number of references is a count
of the number of attachments to the
memory region. Attachments, for
shared regions, may come from
several processes sharing the same
memory, a single process with
multiple attachments, or
combinations of these.
This value is only updated when a
process uses CPU.Thus, under
memory pressure, this value may be
higher than the actual amount of
resident memory for processes which
are idle because their memory pages
may no longer be resident or the
reference count for shared segments
may have changed.
上面提到有兩個原因會造成RSS顯示遠大於程式實際使用的記憶體
- RSS除了程式私有實體記憶體之外,還要加上[它所使用的共享記憶體大小 / 所有正在使用這個共享記憶體的程式數]。
- 由於RSS只有在程式使用CPU時才更新,如果程式idle了,就再也不會更新,永遠是那麼大。
因此每個程式最少200多M,應該就是透過SGA的400000 / 1823 = 219 算出來的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26239116/viewspace-1472417/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於redis記憶體分析,記憶體優化Redis記憶體優化
- 記憶體管理中關於記憶體每次增長的大小記憶體
- 關於autoreleasepool記憶體管理記憶體
- 關於記憶體錯誤記憶體
- 關於記憶體對齊記憶體
- 關於JavaScript的記憶體機制JavaScript記憶體
- oracle實驗記錄 關於記憶體的幾個viewOracle記憶體View
- 關於C中記憶體操作記憶體
- 關於快閃記憶體磁碟記憶體
- 記憶體管理篇——實體記憶體的管理記憶體
- 關於虛擬機器記憶體和JVM記憶體設定的思考虛擬機記憶體JVM
- 關於 PHP 記憶體溢位的思考PHP記憶體溢位
- 關於Linux的記憶體(free -m)Linux記憶體
- 關於java中的記憶體洩漏Java記憶體
- 關於java吃記憶體的問題Java記憶體
- 關於軟體事務記憶體(STM)的討論記憶體
- 實體記憶體和虛擬記憶體記憶體
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- 關於PHP記憶體洩漏的問題PHP記憶體
- 關於記憶體異常的一個猜想記憶體
- 關於記憶體的一些bug (轉)記憶體
- 2 Day DBA-管理Oracle例項-管理記憶體-關於記憶體管理Oracle記憶體
- 關於持久記憶體(PMem)你知道多少?記憶體
- 虛擬記憶體到實體記憶體(32位)記憶體
- 【Java基礎】實體記憶體&虛擬記憶體Java記憶體
- 當實體記憶體小於sga+pga時記憶體
- 程式的記憶體模型記憶體模型
- 關於JVM堆外記憶體的一切JVM記憶體
- 關於java記憶體訪問重排序的思考Java記憶體排序
- 關於記憶體中棧和堆的區別記憶體
- 關於SQL Server的記憶體佔用問題SQLServer記憶體
- 記憶體管理兩部曲之實體記憶體管理記憶體
- 關於c語言記憶體分配,malloc,free,和段錯誤,記憶體洩露C語言記憶體洩露
- OpenResty 和 Nginx 的共享記憶體區是如何消耗實體記憶體的RESTNginx記憶體
- 基於crc32實現的記憶體的程式碼校驗記憶體
- 7.7 實現程式記憶體讀寫記憶體
- 有關記憶體的思考題記憶體
- [效能]【JVM】關於JVM記憶體的N個問題JVM記憶體