萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> Linux操作系統下關於內存查看的詳細解析

Linux操作系統下關於內存查看的詳細解析

class="21321"> ; Linux中使用free可以查看系統內存使用狀態, 默認單位為k
blue_stone@blueice:~$ free
total used free shared buffers cached
Mem: 2075320 1879172 196148 0 533484 952588
-/+ buffers/cache: 393100 1682220
Swap: 2008084 0 2008084
Mem 行顯示了從系統角度看來內存使用的情況, total是系統可用的內存大小, 數量上等於系統物理內存減去內核保留的內存. buffers和cached是系統用做緩沖的內存. buffers與某個塊設備關聯, 包含了文件系統元數據, 並且跟蹤了塊的變化. cache只包含了文件本身. -/+ buffers/cache行則從用戶角度顯示內存信息, 可用內存從數量上等於mem行used列值減去buffers和cached內存的大小. 因為buffers和cached是操作系統為加快系統運行而設置的, 當用戶需要時, 可以只接為用戶使用. top和vmstat也顯示了系統內存的信息, 和free的顯示結果類似. 這些命令都是從/proc/meminfo中讀取內存信息.
blue_stone@blueice:~$ cat /proc/meminfo
MemTotal: 2075320 kB
MemFree: 25016 kB
Buffers: 763564 kB
Cached: 879860 kB
SwapCached: 0 kB
Active: 1056968 kB
Inactive: 843136 kB
HighTotal: 917440 kB
HighFree: 13892 kB
LowTotal: 1157880 kB
LowFree: 11124 kB
SwapTotal: 2008084 kB
SwapFree: 2008084 kB
Dirty: 4708 kB
Writeback: 0 kB
Mapped: 707152 kB
Slab: 102728 kB
CommitLimit: 3045744 kB
Committed_AS: 691808 kB
PageTables: 2936 kB
VmallocTotal: 114680 kB
VmallocUsed: 14800 kB
VmallocChunk: 98800 kB
關於/proc/meminfo中各行的含意, 在內核源代碼的Documentation/filesystems/proc.txt文件中有敘述,系統的真實內存大小可以用dmesg |grep [mM][eE][mM]看到。
blue_stone@blueice:~$ dmesg |grep [mM][eE][mM]
895MB HIGHMEM available.
1152MB LOWMEM available.
HighMem zone: 229360 pages, LIFO batch:31
Memory: 2073292k/2097088k available (1493k kernel code, 21648k reserved, 
546k data, 196k init, 917440k highmem)
Freeing initrd memory: 1079k freed
MEM window: f8000000-f80fffff
highmem bounce pool size: 64 pages
Freeing unused kernel memory: 196k freed
ehci_hcd 0000:00:10.4: irq 177, io mem 0xf8121000
/dev/vmnet: hub 0 does not exist, allocating memory.
[fglrx] Maximum main memory to use for locked dma buffers: 1898 MBytes.
/dev/vmnet: hub 3 does not exist, allocating memory.
/dev/vmnet: hub 1 does not exist, allocating memory.
/dev/vmnet: hub 2 does not exist, allocating memory.
進程使用的內存可以用top, ps來查看top中有3個列 VIRT RES SHR, 標示了進程使用的內存情況, VIRT標識這個進程可以使用的內存總大小, 包括這個進程真實使用的內存, 映射過的文件, 和別的進程共享的內存等. RES標識這個這個進程真實占用內存的大小. SHR標識可以和別的進程共享的內存和庫大小. /proc/pid/status顯示一個進程的詳細狀態, 下面是一個示例:
blue_stone@blueice:~$ cat /proc/5346/status
Name: bash
State: S (sleeping)
SleepAVG: 98%
Tgid: 5346
Pid: 5346
PPid: 5343
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 104 104 104 104
FDSize: 256
Groups: 6 24 29 44 104 113 1000 1001
VmPeak: 6528 kB
VmSize: 6528 kB
VmLck: 0 kB
VmHWM: 1976 kB
VmRSS: 1976 kB
VmData: 752 kB
VmStk: 84 kB
VmExe: 644 kB
VmLib: 1788 kB
VmPTE: 16 kB
Threads: 1
SigQ: 0/4294967295
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000384004
SigCgt: 000000004b813efb
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
VmSize即為該進程內存總大小, 和top輸出中的VIRT一致。

copyright © 萬盛學電腦網 all rights reserved