Solaris內存主要用在以下幾個方面:核心,進程,文件系統緩存。如下是監控內存使用的方法。
可用系統物理內存
分配給Solaris核心的內存數量
文件系統緩存使用的內存數量
進程使用的內存數量
系統剩余的內存數量
Total Physical Memory
使用prtconf命令,察看系統物理內存數量。
prtconf | head -2
System Configuration: Sun Microsystems sun4u
Memory size: 49152 Megabytes
Kernel Memory
使用sar –k察看系統核心占用的內存,如下3個內存池之和即是,單位byte
sar -k 1 1
SunOS lonespappb33 5.8 Generic_117350-13 sun4u 11/28/05
05:39:26 sml_mem alloc fail lg_mem alloc fail ovsz_alloc fail
05:39:28 483386752 202156800 0 4400701440 2886180864 0 656105472 0
File System Caching Memory
文件系統緩存使用系統可用的剩余內存緩存文件。在Solaris上,可用的剩余內存(free memory)大部分情況下總是接近0;Solaris8之前,vmstat 顯示的free列表示可用的剩余內存,往往在系統啟動(booted)的時候很高,隨著系統運行慢慢降低為0,這是正常的,因為文件系統緩存的設計目的就是最大化利用系統可用內存來緩存最經常訪問的文件。
在Solaris8中,vmstat 顯示的free是系統可用的剩余內存(free memory)和可pageable的文件系統緩存(file system cache memory),man的解釋:free size of the free list (Kbytes) 。文件系統緩存也掛在內存Free List上。
vmstat 1 5
procs memory page disk faults cpu
r b w swap free re mf pi po fr de sr s0 s1 s2 s3 in sy cs us sy id
0 1 0 62618064 33156520 5220 0 1144 0 0 0 0 0 1 0 0 8093 47291 1895 9 7 85
如上Solaris 8,vmstat 結果表示,文件系統緩存占用了將近33156520k內存。
Free Memory
由於文件系統緩存總是盡量利用可用的剩余內存緩存文件,因此大部分情況下Free memory總是接近0.
Memory Shortage Detection
系統運行時會不斷的page in page out;繁忙的paging操作,可導致Page Scaner運行頻繁,因此伴隨有較高的scan-rage(sr)和page-out(po);這可以作為系統繁忙paging 的表示。
如果有進程被swap(w>0),則通常表示內存短缺,這時候往往swap設備的IO比較繁忙。
Swap Space
Solaris 交換空間(swap space)有2個重要的狀態:保留(swap reservation)和分配(physical swap allocation).
保留(swap reservation)是指Process創建segment的時候,系統分配給Process虛擬的內存地址空間(virtual memory address space),同時為了保證該segment以後可以被page out到swap,分配給Process與該segment同樣大小的虛擬交換空間(virtual swap space).
例如,process創建一個100M的segment,系統會分配給該process100M的virtual memory address space,但不會分配給process物理內存(physical memory);同時在Swap space中預先保留(reservation)100M虛擬交換空間(virtual swap space).
分配(physical swap allocation)是指segment driver給process segment分配物理內存時,預先為swap reservation區分配同樣大小的物理交換空間(physical swap space),用來page-out.
例如,process在已有100M的virtual memory address space基礎上,通過trap/page-fault/zero-fill-on-demand分配到10M的物理內存;同時會為預先保留(reservation)的100M虛擬交換空間(virtual swap space)分配10M物理swap space.
Virtual Swap Space
系統虛擬交換空間的數量為物理磁盤交換空間大小(disk swap space)+Solaris在內存中分配的交換空間大小(memory swap space).使用swap –s察看虛擬交換空間信息。
$ swap -s
total: 929688k bytes allocated + 57408k reserved = 987096k used, 17715000k available
Physical Swap Space
系統物理交換空間的數量為/etc/vfstab中配置的磁盤交換空間大小。使用swap –l察看。
$ swap -l
swapfile dev swaplo blocks free
/dev/vx/dsk/swapvol 230,6 16 25165808 25165808
必須確保swap –s和swap –l 的available & free 非0,否則將無法分配虛擬交換內存或者物理交換內存;
此時,Oracle通常會遇見ORA-4030和ORA-12500錯誤。
可計算memory swap space: 987,096k+17,715,000k-25165808/2k=6,119,192k
Process Memory Usage , ps, and pmap
進程的內存也可分為2種,虛擬內存使用和物理內存使用。進程虛擬內存是指已經分配給進程的虛擬地址空間(virtual address space);物理內存是指分配給進程的真實的物理內存(real physical memory pages)數量。
Ps的vsz表示虛擬內存,rss表示物理內存
$ ps -opid,vsz,rss,args
PID VSZ RSS COMMAND
27495 1912 1016 –ksh