2007年4月17日星期二

内存整体性能监控工具

1.1 内存整体性能监控工具
1.1.1. /proc/zoneinfo
该文件提供物理内存有关zone的信息


Node 0, zone DMA
pages free 548
min 31
low 38
high 46
active 2056
inactive 275
scanned 0 (a: 2 i: 10)
spanned 4096
present 4096
protection: (0, 239, 239)
pagesets
cpu: 0 pcp: 0
count: 5
low: 2
high: 6
batch: 1
cpu: 0 pcp: 1
count: 1
low: 0
high: 2
batch: 1
all_unreclaimable: 0
prev_priority: 11
temp_priority: 11
start_pfn: 0
Node 0, zone Normal
pages free 1405
min 479
low 598
high 718
active 47819
inactive 7360
scanned 0 (a: 0 i: 0)
spanned 61424
present 61424
protection: (0, 0, 0)
pagesets
cpu: 0 pcp: 0
count: 103
low: 62
high: 186
batch: 31
cpu: 0 pcp: 1
count: 1
low: 0
high: 62
batch: 31
all_unreclaimable: 0
prev_priority: 11
temp_priority: 11
start_pfn: 4096


结果的解释如下:

参数
描述
Node 0, zone DMA
节点 0 的DMA区域
pages free 548
空闲的物理页数,可以被分配的物理页
min 31
low 38
high 46
每个zone有三个阈值,称为pages_low,pages_min和pages_high,用于跟踪该zone的物理内存压力。当内存压力达到一定值,就从用户态的地址空间或memory cache或disk cache回收页面,不能等到物理内存分配失败再回收页面,这是因为有些内核操作是不允许被阻塞,例如中断或异常处理调用请求内存分配。pages_min的页数是由内存初始化 free_area_init_core函数,根据该zone物理内存页的页数计算的。当物理内存页的页数减少到pages_min时,分配器将采用同步方式进行kswapd的工作;当空闲页的数目达到pages_low时,kswapd被buddy分配器唤醒,开始释放页;当达到 pages_high时,kswapd将被唤醒,此时kswapd不会考虑如何平衡该zone,直到有空闲页的个数达到pages_high为止。
active 2056
该区域的active物理页数
inactive 275
该区域的inactive物理页数
scanned 0 (a: 2 i: 10)
上次回收物理内存时,实际scan的物理页数
a:需要scan的active_list里的物理页的页数,
i:需要scan的inactive_list里的物理页的页数
spanned 4096
该zone的全部的物理页数,包含文件洞
present 4096
该zone的全部的物理页数,不包含文件洞
protection:(0, 239, 239)

从DMA或normal memory或high memory分配物理空间时,应至少给DMA zone 预留0或239或明或239页
Pagesets
DMA区域的物理页缓冲信息
cpu: 0 pcp: 0
CPU的ID, pcp=0:hot cache
count: 5
该cache有多少物理页
low: 2
当该cache的物理页小于该值时,则分配batch个物理页给该cache
high: 6
当该cache的物理页大于该值时,则从该cache回收batch个物理页
batch: 1
一次从该cache分配或回收的物理页的页数
cpu: 0 pcp: 1
CPU的ID, pcp=0:hot cache
count: 1
该cache有多少物理页
low: 0
当该cache的物理页小于该值时,则buddy分配器分配batch个物理页给该cache
high: 2
当该cache的物理页大于该值时,则从该cache回收batch个物理页
batch: 1
一次从该cache分配或回收的物理页的页数
all_unreclaimable: 0
是否该区域的全部物理页全是不可回收的,0:包含可以回收的物理页
prev_priority: 11
上次回收物理内存时,进行对该区域进行scan 操作的优先级
temp_priority: 11
表示该次回收物理内存,对该区域进行进行scan 操作的优先级
start_pfn: 0
该区域的第一个物理页的inde

Zone->lowmem_reserve是一组事先定义的数,预留物理页的页数,通过min_free_kbytes 和sysctl_lower_zone_protection来计算。


1.1.2. /proc/buddyinfo
为解决外碎块问题,在各个zone里将空闲的物理页分成11组,分别由1、2、4、8、16、32、64、128、256、512和1024连续的物理页组成。文件/proc/buddyinfo 包含了各个节点的各个区域的各种组可用的物理内存的详细信息。All page frames are grouped into 10 lists of blocks that contain
groups of 1, 2, 4, 8, 16, 32, 64, 128, 256, and 512 contiguous page
frames, respectively
• The address of the first page frame of a block is a multiple of the
group size, for example, a 16 frame block is a multiple of 16 × 212

[work@builder]# cat /proc/buddyinfo
Node 0, zone DMA 51 2 1 0 0 0 0 0 0 0 0
Node 0, zone Normal 178 76 63 0 2 2 0 1 0 0 0
Node 0, zone HighMem 218 157 83 38 230 820 1024 494 89 4 0


第二列表示节点号,上例说明只有一个节点。从第五列到第15列 分别表示大小为20*PAGE_SIZE、21*PAGE_SIZE、 ……、211*PAGE_SIZE 的内存块的数目。例如,第一行51表示在0节点的DMA区域里有51块大小为1页的物理块,第一行2表示在0节点的DMA区域里有2块大小为连续2页的物理块;第二行178表示在0节点的Normal区域里有178块大小为1页的物理块;第三行820表示在0节点的HighMem区域里有820块大小为连续6页的物理块。

1.1.3. /proc/meminfo
文件/proc/meminfo 包含了系统内存的详细信息,他显示了物理内存的数量,可交换空间的数量,空闲内存的数量等。需要命令如free、vmstat、iostat、top都是从该文件获得内存信息。

[root@localhost Documentation]# cat /proc/meminfo
MemTotal: 255280 kB
MemFree: 51524 kB
Buffers: 2888 kB
Cached: 49868 kB
SwapCached: 0 kB
Active: 182764 kB
Inactive: 5520 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 255280 kB
LowFree: 51524 kB
SwapTotal: 255992 kB
SwapFree: 255128 kB
Dirty: 312 kB
Writeback: 0 kB
Mapped: 180812 kB
Slab: 10944 kB
CommitLimit: 383632 kB
Committed_AS: 250612 kB
PageTables: 2392 kB
VmallocTotal: 770040 kB
VmallocUsed: 396 kB
VmallocChunk: 769520 kB
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 4096 kB
[root@localhost Documentation]#



第一部分 参数
第二部分 解释
第三部分 MemTotal(kB)
第四部分 可以使用的物理内存,真正的物理内存减去(1)不可用的物理空间,(2)一部分预留给核心的二进制码和初始化了的数据结构的物理内存,包括文件洞(file hole)。
第五部分 MemFree(kB)
第六部分 等于LowFree+HighFree,这部分物理内存空间不属于任何进程或线程,等于所有zone的free_pages之和。
第七部分 Buffers(kB)
第八部分 Buffer pages,这部分空间不属于任何进程或线程。
第九部分 Cached(kB)
第一〇部分 除了buffer_pages 和swap cache的cache,这部分空间不属于任何进程或线程。
第一一部分 SwapCached (kB)
第一二部分 交换区页高速缓存,这部分空间不属于任何进程或线程。
第一三部分 Active(kB)
第一四部分 活跃的物理内存
第一五部分 Inactive(kB)
第一六部分 不活跃的物理内存
第一七部分 HighTotal(kB)
第一八部分 所有高端物理内存
第一九部分 HighFree(kB)
第二〇部分 所有未用的高端物理内存
第二一部分 LowTotal(kB)
第二二部分 所有低端物理内存
第二三部分 LowFree(kB)
第二四部分 所有未用的低端物理内存
第二五部分 SwapTotal(kB)
第二六部分 所有的交换区
第二七部分 SwapFree(kB)
第二八部分 所有未用的交换区
第二九部分 Dirty(kB)
第三〇部分 需要写回硬盘的物理内存数据
第三一部分 Writeback(kB)
第三二部分 正在写回硬盘的物理内存数据
第三三部分 Mapped(kB)
第三四部分 在相应的页表中存在表项目的物理页的数目
第三五部分 Slab(kB)
第三六部分 核心数据结构使用的物理内存空间
第三七部分 CommitLimit(kB)
第三八部分 系统可分配的最大地址空间(虚拟),(Memtotal-Hugepages_Total)*ratio+SwapTotal
第三九部分 Committed_AS(kB)
第四〇部分 一个进程目前可申请的最大的地址空间(虚拟)
第四一部分 PageTables(kB)
第四二部分 用于页表的物理页数
第四三部分 VmallocTotal(kB)
第四四部分 全部的vmalloc地址空间
第四五部分 VmallocUsed(kB)
第四六部分 已经使用的vmalloc空间
第四七部分 VmallocChunk(kB)
第四八部分 vmalloc空间里最大的连续的空闲空间
第四九部分 HugePages_Total(kB)
第五〇部分 全部大块物理内存页的数目
第五一部分 HugePages_Free(kB)
第五二部分 空闲的大块物理内存页的数目
第五三部分 Hugepagesize(kB)
第五四部分 每块大块物理内存页的大小

MemTotal=LowTotal+HighTotal
Active+InActive 包含那些用于用户态的地址空间和page cache的物理页,不包含核心栈,因此MemFree+Active+InActive < MemTotal 。

1.1.4. /proc/slabinfo
文件/proc/slabinfo 反映了系统中slab缓冲区里的内容。该文件分为两部分:
(1)给出了用于特定的对象的slab缓冲区的信息;
(2)第二部分报告固定大小的通用的slab缓冲区的信息。
范例:

[root@localhost Documentation]# cat /proc/slabinfo
slabinfo - version: 2.0
# name : tunables : slabdata
fat_inode_cache 0 0 484 8 1 : tunables 54 27 0 : slabdata 0 0 0
sgpool-128 32 32 2048 2 1 : tunables 24 12 0 : slabdata 16 16 0
sgpool-64 32 32 1024 4 1 : tunables 54 27 0 : slabdata 8 8 0
sgpool-32 32 32 512 8 1 : tunables 54 27 0 : slabdata 4 4 0
sgpool-16 32 45 256 15 1 : tunables 120 60 0 : slabdata 3 3 0
sgpool-8 32 62 128 31 1 : tunables 120 60 0 : slabdata 2 2 0
fib6_nodes 5 119 32 119 1 : tunables 120 60 0 : slabdata 1 1 0
ip6_dst_cache 4 18 224 18 1 : tunables 120 60 0 : slabdata 1 1 0
ndisc_cache 1 20 192 20 1 : tunables 120 60 0 : slabdata 1 1 0
rawv6_sock 3 5 768 5 1 : tunables 54 27 0 : slabdata 1 1 0



size-1024 155 160 1024 4 1 : tunables 54 27 0 : slabdata 40 40 0
size-512(DMA) 0 0 512 8 1 : tunables 54 27 0 : slabdata 0 0 0
size-512 198 496 512 8 1 : tunables 54 27 0 : slabdata 62 62 0
size-256(DMA) 0 0 256 15 1 : tunables 120 60 0 : slabdata 0 0 0
size-256 184 405 256 15 1 : tunables 120 60 0 : slabdata 27 27 0
size-128(DMA) 0 0 128 31 1 : tunables 120 60 0 : slabdata 0 0 0
size-128 4241 4247 128 31 1 : tunables 120 60 0 : slabdata 137 137 0
size-64(DMA) 0 0 64 61 1 : tunables 120 60 0 : slabdata 0 0 0
size-64 4210 4270 64 61 1 : tunables 120 60 0 : slabdata 70 70 0
size-32(DMA) 0 0 32 119 1 : tunables 120 60 0 : slabdata 0 0 0
size-32 2142 2261 32 119 1 : tunables 120 60 0 : slabdata 19 19 0
kmem_cache 125 125 160 25 1 : tunables 120 60 0 : slabdata 5 5 0

[root@localhost Documentation]#

该文件的每行有12个域,其含义见下表,

第五五部分 参数
第五六部分 解释
第五七部分 name
第五八部分 缓冲区的名字,其实就是对象的名字。
第五九部分 active_objs
第六〇部分 采样时,已经分配(即正在使用)的对象的个数
第六一部分 num_objs
第六二部分 采样时,一共可容纳该类对象的总个数
第六三部分 objsize(byte)
第六四部分 该缓冲区每个对象的大小
第六五部分 objperslab
第六六部分 每个slab里所含的对象的个数
第六七部分 pagesperslab
第六八部分 每个slab里所含的连续物理页的个数
第六九部分 batchcount
第七〇部分 local cache扩大或缩小时,每次能从通用内存池得到或释放的对象的个数目。
第七一部分 limit
第七二部分 一个slabl cache最多可有的闲置的对象
第七三部分 sharedfactor
第七四部分 共享的因数
第七五部分 active_slabs
第七六部分 活跃的slab个数
第七七部分 num_slabs
第七八部分 Slab的个数
第七九部分 sharedavail
第八〇部分 可用的该类对象的个数



1.1.5. /proc/vmstat
文件/proc/meminfo 包含了系统内存的详细信息,他显示了物理内存的数量,可交换空间的数量,空闲内存的数量等。需要命令如free、vmstat、iostat、top都是从该文件获得内存信息。单位为kB

[root@localhost Documentation]# cat /proc/vmstat
nr_dirty 3
nr_writeback 0
nr_unstable 0
nr_page_table_pages 750
nr_mapped 49126
nr_slab 2766
pgpgin 624439
pgpgout 79564
pswpin 1043
pswpout 5983
pgalloc_high 0
pgalloc_normal 3143647
pgalloc_dma 87579
pgfree 3232185
pgactivate 90518
pgdeactivate 35643
pgfault 1914771
pgmajfault 5538
pgrefill_high 0
pgrefill_normal 414379
pgrefill_dma 159646718
pgsteal_high 0
pgsteal_normal 72250
pgsteal_dma 8701
pgscan_kswapd_high 0
pgscan_kswapd_normal 47190
pgscan_kswapd_dma 7548
pgscan_direct_high 0
pgscan_direct_normal 44220
pgscan_direct_dma 5507
pginodesteal 1891
slabs_scanned 141312
kswapd_steal 40222
kswapd_inodesteal 59993
pageoutrun 38845
allocstall 1071
pgrotated 6625


参数
解释
nr_dirty
采样时,被修改过但是正等待写回硬盘的物理页数
nr_writeback
采样时,正在被写回硬盘的物理页数
nr_unstable
专用于NFS文件系统,NFS不稳定的物理页数
nr_page_table_pages
采样时,页表所占的物理页数
nr_mapped
采样时,映像在页表的物理页数
nr_slab
采样时,slab使用的物理页数目
pgpgin
自系统启动以来,从硬盘读入的数据量。由虚拟内存管理系统触发的IO操作,包括所有类型,无论是文件系统还是交换区,其在IO子系统中进行更新。其值包括 pswpin
pgpgout
自系统启动以来,从硬盘读入的数据量。其值包括 pswpout
pswpin
自系统启动以来,从交换区读到物理内存的数据量
pswpout
自系统启动以来,从物理内存写到交换区的数据量
pgalloc_high
自系统启动以来,从HighMem 区域的page frame cache 里分配的物理内存页数
pgalloc_normal
自系统启动以来,从Normal 区域的page frame cache 里分配的物理内存页数
pgalloc_dma
自系统启动以来,从DMA 区域的page frame cache里分配的物理内存页数
pgfree
自系统启动以来,free 的物理内存页数
pgactivate
自系统启动以来,从不活跃队列移到活跃队列的物理内存页数
pgdeactivate
自系统启动以来,从活跃队列移到不活跃队列的物理内存页数
pgfault
自系统启动以来,系统所发生缺页的次数
pgmajfault
自系统启动以来,系统所发生主缺页的次数
pgrefill_high
自系统启动以来,在将物理页面从活跃链转移到不活跃链的过程中,在 HighMem区域所查看的的物理内存页数
pgrefill_normal
自系统启动以来,在将物理页面从活跃链转移到不活跃链的过程中,在 Normal区域所查看的的物理内存页数
pgrefill_dma
自系统启动以来,在将物理页面从活跃链转移到不活跃链的过程中,在 Dma区域所查看的的物理内存页数
pgsteal_high
自系统启动以来,已经回收的HighMem区域的物理内存页数
pgsteal_normal
自系统启动以来,已经回收的NormalMem区域的物理内存页数
pgsteal_dma
自系统启动以来,已经回收的DMA区域的物理内存页数
pgscan_kswapd_high
自系统启动以来,由于定期触发回收而查看的HighMem区域的物理内存页数
pgscan_kswapd_normal
自系统启动以来,由于定期触发回收而查看的Normal区域的物理内存页数
pgscan_kswapd_dma
自系统启动以来,由于定期触发回收而查看的DMA区域的物理内存页数
pgscan_direct_high
自系统启动以来,由于缺少物理内存触发的所查看的HighMem区域的物理内存页数
pgscan_direct_normal
自系统启动以来,由于缺少物理内存触发的所查看的Normal区域的物理内存页数
pgscan_direct_dma
自系统启动以来,由于缺少物理内存触发的所查看的DMA区域的物理内存页数
pginodesteal
自系统启动以来,由于缺少物理内存触发而导致释放节点所回收的物理页数目
slabs_scanned
自系统启动以来,在回收slab cache过程中所查看的物理页数目
kswapd_steal
自系统启动以来,由于定期触发回收而导致释放节点所回收的物理页数目
kswapd_inodesteal
自系统启动以来,由于定期触发回收所回收的物理页数目
pageoutrun
自系统启动以来,Kswapd发起的回收物理页的次数目
allocstall
自系统启动以来,系统发生的直接调用回收算法的次数
pgrotated
自系统启动以来,转移到 LRUlist链尾的物理页数目
nr_bounce
采样时,用于bounce buffers的物理页数目


1.1.6. free
free查看当前系统内存的使用情况,它能够显示系统中剩余及已用的物理内存和交换空间的大小,以及共享内存和被核心使用的缓冲区;监视交换空间的使用情况。它将给出已使用了多少的交换空间。
命令格式:
free [-b -k -m]
其中-b 以字节为单位显示,-k 以K字节为单位显示,-m 以兆字节为单位显示。缺省为k。

范例1:
[root@nonamelinux ~]# free
total used free shared buffers cached
Mem: 386024 377116 8908 0 21280  155468
-/+ buffers/cache: 200368 185656
Swap: 393552 0 393552

下面是对这些数值的解释:

参数
描述
/proc/meminfo
第二行(mem):显示出物理内存的使用情况

total
总计物理内存的大小
MemTotal
used
已使用物理内存的总和(第二行把buffers 和cached 算进来),所以total=used+free
MemTotal-MemFree
free
显示了所有未被使用的空闲物理内存
MemFree
Shared
当前版本忽略该选项

Buffers
显示出了当前缓冲区高速缓存的大小
Buffers
cached
显示出了当前页高速缓存的大小
Cached
第三行(-/+ buffers/cached): 从用户的角度来看

used
已使用多大
MemTotal-MemFree-Buffers-Cached
free
可用有多少, 是第二行free+buffers+cached 的和
Memfree+Buffers+Cached
四行(): 显示出了与交换空间相应的信息。如果这一行的数值都是零,表示你的交换空间没有被击活
Total
全部交换区的大小
SwapTotal
used
已经使用的交换区的大小
SwapTotal-SwapFree
free
空闲的交换区的大小
SwapFree

第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别在于观察的角度,第二行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是8908KB,已用内存是377116KB,其中包括,内核(OS)使用Application(X,oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。 buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages,cached是用来给文件做缓冲。那就是说:buffers是用来存储,目录里面有什么内容,权限等等。 而Cache存放从硬盘读的数据,即直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.
如上例: 185656=8908+21280+155468

1.1.7. vmstat

下面只介绍 Vmstat与虚拟内存相关的参数,包括
(1)交换区(swap)的使用情况;
(2)物理内存的使用情况;
(3)空闲内存的情况。

摘要选项 -s 向标准输出发送摘要报告,该报告从系统初始化开始,以绝对计数表示,而不是基于某个时间间隔。推荐使用该参数的方法是在有工作负载之前运行该命令,保存输出,在有工作负载后再次运行此命令,并保存输出。下一步就是确定两组输出间的差异。自动实现该操作的 awk 脚本名为 vmstatit,详细内容如下:
vmstat -s >temp.file # cumulative counts before the command
time $1 # command under test
vmstat -s >>temp.file # cumulative counts after execution
grep "pagi.*ins" temp.file >>results # extract only the data
grep "pagi.*outs" temp.file >>results # of interest

vmstat的语法如下:
  vmstat [delay [count]]
或 vmstat [-a] [-m]
其中,delay是两次输出之间的延迟时间;count是指按照这个时间间隔统计的次数。
与虚拟内存有关的输出的含义

范例1:average mode 1 (粗略信息)
(so,si)对应的输出值是从系统启动以来的平均值,而(swpd,free,buff,cache,active 和inactive)的输出值是采样时的系统的值。可以看到有4Kbytes的内存的数据已经转储到硬盘上;50MB的空闲物理内存;10MB的用于buffer的物理内存;112MB的用于cache的物理内存.

[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 4580 428 98516 0 0 49 6 15 19 2 1 96 1
[root@localhost ~]#

Vmstat还可以显示活跃和不活跃的内存的信息,见下表。Inactive pages表示有多少内存页可以转储到硬盘上。系统有20MByte的不活跃内存,有157MByet的活跃内存。

[root@localhost ~]# vmstat -a 2 4
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free inact active si so bi bo in cs us sy id wa
1 0 4092 44720 20320 160440 0 0 164 55 1059 658 5 1 92 2
0 0 4092 44696 20320 160440 0 0 0 0 1049 171 2 0 98 0
0 0 4092 44680 20320 160440 0 0 0 0 1048 163 2 0 99 0
0 0 4092 44688 20320 160440 0 0 0 0 1048 157 2 0 98 0
[root@localhost ~]#



参数
描述
/proc/meminfo
swapd (kb)
在采样时,已经使用的交换区的大小
SwapTotal-SwapFree
free(kb)
在采样时,没有被系统或应用程序使用的空闲的物理内存
MemFree
buff(kb)
在采样时,用于系统buffer的内存
Buffers
cache(kb)
用于页高速缓存
Cached
si(kb/s)
前delay时间里,每秒把数据从硬盘交换区装入物理内存的数据量
dpswpin/delay
so(kb/s)
前delay时间里,每秒把数据从物理内存转储到硬盘交换区的数据量
dpswpout/delay
bi(kb/s)
前delay时间里,每秒把数据从物理内存转储到硬盘的数据量
dpgpgin/delay
bo(kb/s)
前delay时间里,每秒把数据从硬盘读到物理内存的数据量
dpgpgout/delay
active
采样时,活跃的物理内存
Active
inactive
采样时,不活跃的物理内存
InActive

范例2:average mode (此选项一次性显示内存使用的状态信息详细信息)
命令格式:
vmstat –s
这里只讨论与虚拟内存相关信息。246MB物理内存,1565MByte交换分区。
Used_memory +free_memory =total_memory。
Cached=200204-153300-20692-10072

[root@localhost ~]# vmstat -s
255280 total memory
244216 used memory
206624 active memory
21208 inactive memory
11064 free memory
628 buffer memory
91396 swap cache
255992 total swap
24 used swap
255968 free swap
973400 non-nice user cpu ticks
477 nice user cpu ticks
206168 system cpu ticks
43567714 idle cpu ticks
373234 IO-wait cpu ticks
62732 IRQ cpu ticks
1972 softirq cpu ticks
22366502 pages paged in
88756936 pages paged out
0 pages swapped in
0 pages swapped out
135634319 interrupts
137288441 CPU context switches
1134440368 boot time
208990 forks
[root@localhost ~]#


参数
描述
/proc/meminfo
total memeory(kB)
全部的物理内存
MemTotal
used memory
采样时,已用的物理内存
MemTotal-MemFree
active memory
采样时,活跃的物理内存
Active
inactive memory
采样时,不活跃的物理内存
InActive
free memory
采样时,闲置的物理内存
MemFree
buffer memory
采样时,缓冲区高速缓存,这部分空间不属于任何进程或线程。
Buffers
swap cache
采样时,交换区页高速缓存,这部分空间不属于任何进程或线程。
Cached
total swap
采样时,全部交换区的大小
SwapTotal
used swap
采样时,已用交换区的大小
SwapTotal-SwapFree
free swap
采样时,空闲交换区的大小
SwapFree
pages paged in
自系统启动以来,从硬盘读入的数据量。由虚拟内存管理系统触发的IO操作,,包括所有类型,无论是文件系统还是交换区,其在IO子系统中进行更新。其值包括pswpin
Pgpgin
pages paged out
自系统启动以来,些入硬盘的数据量,包括所有类型
Pgpgout
pages swapped in
自系统启动以来,从交换区读到物理内存的数据量
Pswpin
pages swapped out
自系统启动以来,从物理内存写到交换区的数据量
pswpout


范例3:定期采样(delay [count])
定期采样数据是指每隔delay时间,报告系统的活跃情况。当count 为0时,vmstat 将不停地定期报告信息;否则当报告count次后,vmstat 命令停止运行。
第一行的信息如同范例1,是自系统启动以来的平均信息。从第二行开始,每行的意思是:r和b指从前一次报告起,间隔delay时间后的那一时刻系统运行队列和等待队列的情况;而usystem参数(in,cs)以及CPU参数(us,sy,id,wa)对应的输出值是系统在前一个delay的情况。
从下面例子可以看出上下文交换的次数小于中断的发生次数。当系统大部分时间是空闲并且中断大部分是时间中断时,这种现象极可能发生。当时间中断发生时, 因为调度器没有什么任务可调度,所以很少发生上下文切换。

[root@localhost Documentation]# dd if=/dev/zero of=/1.img bs=1024 count=2560000 &
[1] 14566
[root@localhost Documentation]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 2 864 3380 96 100288 0 0 49 10 15 19 2 1 96 1
0 2 864 3296 108 100236 0 0 2 47222 704 631 2 39 0 59
1 2 864 3072 100 100592 0 0 2 45780 690 591 2 40 0 58
0 3 864 3196 96 100388 0 0 2 48778 703 579 3 37 0 60
0 1 864 4120 100 99428 0 0 2 45414 858 765 4 42 0 54
0 3 864 3084 96 100488 0 0 14 48606 927 856 5 45 0 51
1 2 864 3264 100 100376 0 0 18 39814 824 999 8 44 0 48
1 1 864 3228 96 100504 0 0 14 38544 801 733 2 35 0 63

[root@localhost Documentation]# vmstat -a 2
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free inact active si so bi bo in cs us sy id wa
0 2 864 3204 22704 213376 0 0 49 12 15 19 2 1 96 1
0 2 864 3204 23108 212984 0 0 2 49806 706 535 3 38 0 59
0 5 864 3080 22476 213624 0 0 2 48238 918 839 4 47 0 48
1 1 864 3064 22572 213788 0 0 16 28006 768 716 3 27 0 71
0 2 864 3072 23948 212148 0 0 4 46448 676 689 2 37 0 61

[root@localhost Documentation]#

范例4
这个例子动态显示物理内存与交换区之间的数据交换。Si表示在每个采样的时间段里从交换区读到物理内存的速度,so表示从物理内存转储到交换区的速度。si 或so不为零表示系统没有足够的物理内存来执行系统中所有的进程。si和so的值同时很大也是有可能。例如系统运行的程序同时需要极大的物理内存空间。

[root@localhost filesystems]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 3 43516 3296 3552 81584 0 0 47 29 63 1 2 1 97 1
1 1 43516 3064 3272 81452 116 0 1092 0 579 2529 31 6 0 63
0 1 43516 4232 3256 79132 0 0 112 0 441 1550 67 4 0 29
0 0 43516 4248 3256 79132 0 0 0 0 466 727 7 2 85 6
0 0 43516 4252 3256 79132 0 0 0 0 502 689 5 2 93 0
0 0 43516 4252 3256 79132 32 0 32 0 429 576 3 0 97 0
0 2 43516 3036 3280 79604 0 0 1256 0 515 1047 10 4 50 37
0 2 43516 3024 1352 80112 0 0 2944 0 735 1339 16 4 0 80
2 1 43516 3440 1164 78252 0 0 1064 1124 789 1266 42 7 0 51
1 1 43516 3024 1140 78080 0 0 1328 0 487 724 73 7 0 20
0 3 43516 3008 1008 74172 0 0 2044 0 763 1405 33 11 0 56
0 2 43660 3732 928 72484 0 148 2800 404 696 867 29 9 0 62
2 2 43876 3388 960 72360 0 216 4080 732 789 1053 59 9 0 32
1 3 44484 3924 944 72904 0 612 5444 620 534 1066 78 10 0 12
1 2 46244 3144 960 73436 156 1876 1524 1876 602 1852 61 15 0 24
0 4 50340 5088 1064 73556 28 4188 1688 4800 694 1735 38 11 0 51
0 3 52536 4064 1136 75100 0 2196 2384 2244 815 742 12 7 0 81
1 2 55820 8288 1168 74340 32 3312 3180 3636 1529 7179 32 18 0 50
0 4 57516 9884 1140 74092 32 1632 1132 1812 779 6350 61 21 0 18
4 0 57516 7068 1156 74980 1860 0 2764 0 695 2645 63 20 0 17
1 0 57516 6620 1180 76316 400 0 1760 0 615 1251 88 10 0 2
1 0 57516 5264 1180 76316 0 0 0 0 635 1102 97 3 0 0
0 0 59292 4716 1200 77020 28 1788 1036 2028 699 2347 59 6 21 14
0 0 59292 4716 1200 77020 0 0 0 0 657 785 4 2 94 0
0 0 59128 16696 1204 76984 32 0 192 0 554 1237 19 6 72 3
0 0 59128 16696 1204 76984 0 0 0 0 643 1060 6 3 91 0

范例5:查看Linux核心如何分配其自己的物理内存
Linun核心使用一系列的“slabs”来存放核心的动态数据结构调整。
[work@builder ~]$ vmstat -m
Cache Num Total Size Pages
fib6_nodes 5 119 32 119
ip6_dst_cache 4 15 256 15
ndisc_cache 1 15 256 15
rawv6_sock 6 10 768 5
udpv6_sock 0 0 768 5
tcpv6_sock 9 9 1280 3
ip_fib_alias 9 226 16 226
.
.
.
参数的解释
参数
描述
/proc/meminfo
cache
使用该cache的对象名称
Name
Num
即正在使用的该对象的个数
act_objs
Total

num_objs
Size
该缓冲区每个对象的大小
objsize
Pages
每个slab里所含的对象的个数
objperslab

slabs[k]., 当前该缓冲区还能够分配的对象的个数
slabs[k].,
slabs[k]. objperslab每个slab里所含的对象的个数

1.1.8. top
top没有任何查看内存信息的命令行参数,命令就是:top。交互过程可输入“M”来按使用内存的大小来索引所有进程。
与内存整体性能相关的输出:

参数
描述
/proc/meminfo
Mem:total(kB)
全部的物理内存
MemTotal
Mem:used(kB)
采样时,已用的物理内存
MemTotal-MemFree
Mem:free(kB)
采样时,闲置的物理内存
MemFree
Mem:buffers(kB)
采样时,缓冲区高速缓存,这部分空间不属于任何进程或线程。
Buffers
Swap:total(kB)
采样时,全部交换区的大小
SwapTotal
Swap:used(kB)
采样时,已用交换区的大小
SwapTotal-SwapFree
Swap:free(kB)
采样时,空闲交换区的大小
SwapFree

  
范例1:查看 键入top命令查看系统状况

top - 16:52:17 up 3 min, 1 user, load average: 0.10, 0.27, 0.14
Tasks: 55 total, 1 running, 54 sleeping, 0 stopped, 0 zombie
top - 16:52:31 up 4 min, 1 user, load average: 0.08, 0.26, 0.13
Tasks: 55 total, 1 running, 54 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 0.3% sy, 0.0% ni, 99.0% id, 0.0% wa, 0.3% hi, 0.0% si
Mem: 251924k total, 238168k used, 13756k free, 4420k buffers
Swap: 0k total, 0k used, 0k free, 165200k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4171 root 15 0 48404 12m 2220 S 0.7 5.0 0:01.36 X
4404 root 15 0 66540 16m 13m S 0.3 6.9 0:02.31 kdeinit
1 root 16 0 1772 544 464 S 0.0 0.2 0:00.61 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 events/0
4 root 5 -10 0 0 0 S 0.0 0.0 0:00.02 khelper



  
第四行为内存状态,依次为平均可用内存、已用内存、空闲内存、共享内存、缓存使用内存。第五行为交换状态,依次为平均可用交换容量、已用容量、闲置容量、高速缓存容量。然后下面就是和ps相仿的各进程情况列表了。
总的来说,top命令的功能强于ps,但需要长久占用前台  

1.1.9. slabtop
slabtop类似于top,但是它用于显示
系统里的进程如何使用CPU和内存
实时给出内核如何分配cache

Slabtop将显示这些不同的slab的状态,它们如何使用内存。
命令格式:
slabtop [--delay=n] [-sort={abclvnopsu}]
参数解释如下:

Delay— 每隔 delay秒,刷新一下信息
Sort—表示按照一定规则索引

A :按照每个slab中活跃的对象的个数
B : 对一个指定的cache,按每个slab中活跃的对象(活跃和不活跃都包括)的个数
C:按照每个cache正在使用的内存的大小
L:按照每个cache中的slab的个数
V:按照每个cache中的活跃slab的个数
N: 按照每cache的名字
O:对一个指定的cache,按每个slab中活跃的对象(活跃和不活跃都包括)的个数
P:按照每个slab使用的页的各数目
S:按照cache中对象的大小
U:按照cache的利用率

范例1 :

>slabtop
Active / Total Objects (% used) : 32674 / 40414 (80.8%)
Active / Total Slabs (% used) : 2334 / 2334 (100.0%)
Active / Total Caches (% used) : 73 / 108 (67.6%)
Active / Total Size (% used) : 8051.21K / 9511.84K (84.6%)
Minimum / Average / Maximum Object : 0.02K / 0.24K / 128.00K

OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
7383 4410 59% 0.16K 321 23 1284K dentry_cache
4185 4185 100% 0.12K 135 31 540K size-128
3965 3916 98% 0.06K 65 61 260K size-64
3619 3619 100% 0.08K 77 47 308K vm_area_struct
3178 2392 75% 0.27K 227 14 908K radix_tree_node
2400 2233 93% 0.05K 32 75 128K buffer_head
1986 1350 67% 0.57K 331 6 1324K ext2_inode_cache
1785 1785 100% 0.03K 15 119 60K size-32
1460 1460 100% 0.19K 73 20 292K filp
1242 1108 89% 0.43K 138 9 552K inode_cache
1071 1036 96% 0.03K 9 119 36K anon_vma
805 801 99% 0.54K 115 7 460K shmem_inode_cache
600 12 2% 0.05K 8 75 32K avc_node
480 207 43% 0.50K 60 8 240K size-512
452 264 58% 0.02K 2 226 8K biovec-1
360 172 47% 0.25K 24 15 96K size-256
305 272 89% 0.06K 5 61 20K biovec-4


输出的解释:
: 32674 / 40414 (80.8%)
: 2334 / 2334 (100.0%)
: 73 / 108 (67.6%)
: 8051.21K / 9511.84K (84.6%)
: 0.02K / 0.24K / 128.00K




参数
描述
/proc/slabinfo
Active / Total Objects (% used)
所有缓冲区里的活跃的对象的个数/所有缓冲区里的对象的个数 / 比率
Sactive_objs / S num_objs
Active / Total Slabs (% used)
所有缓冲区里的活跃的slab的个数/所有缓冲区里的slab的个数 / 比率
Sactive_slabs / S num_slabs
Active / Total Caches (% used)
活跃的缓冲区的个数/缓冲区里的的个数 / 比率
/proc/slabinfo里item 个数
Active(kB) / Total Size(kB) (% used)
所有活跃的对象的大小/所有的对象的大小/比率

Minimum / Average / Maximum Object
大小最小的对象/对象的平均大小/大小最大的对象
Min(all Objsize)/Avg(all Objsize)/ Max( all Objsize)
OBJS
该缓冲区里对象的个数
num_objs
ACTIVE
该缓冲区里活跃对象的个数
active_objs/ num_objs
USE(%)
该缓冲区里活跃的对象的百分率
active_objs
OBJ/ SIZE (kB)
该缓冲区每个对象的大小
Objsiz
SLABS
该缓冲区slab的个数目
num_slabs
OBJ/SLAB
每个slab里对象的个数
objperslab
CACHE SIZE(kB)
缓冲区的大小
Nr_slabs*pages_per_slab*page_size
NAME
缓冲区的名字
Name

1.1.10. sar

sar缺省时只显示CPU的性能信息,因此要提取与内存相关的信息,输入命令时就要带上参数。

-B:物理页的导入和导出以及缺页信息
-r:报告系统正在使用的虚拟内存的情况,包括闲置的物理空间、交换区、cache
-W: 物理页在交换机区的换入和换出信息



范例1:物理页的导入和导出以及缺页信息
在18时19分30秒到18时19分31秒之间的1秒里,有12.37KB的数据从硬盘读入内存,有83703。09KB的数据内存写到硬盘里。

[root@localhost filesystems]# dd if=/dev/zero of=/1.img bs=1024 count=1000000&
[1] 5014
[root@localhost filesystems]# sar -B 1 5

12时00分59秒 pgpgin/s pgpgout/s fault/s majflt/s
12时01分00秒 1164.71 2262.75 9.80 0.00
12时01分01秒 3004.00 3224.00 11.00 0.00
12时01分02秒 1441.58 1334.65 31.68 3.96
12时01分03秒 2820.00 1624.00 13.00 3.00
12时01分04秒 1680.00 1708.00 93.00 9.00
12时01分05秒 1672.00 824.00 48.00 3.00
12时01分06秒 2122.77 2463.37 172.28 5.94
12时01分07秒 2685.15 3001.98 131.68 2.97
12时01分08秒 2532.00 2988.00 324.00 1.00
12时01分09秒 3176.24 2118.81 342.57 3.96
12时01分10秒 2852.53 2569.70 261.62 5.05

输出的解释:

参数
描述
/proc/vmstat
pgpgin/s
前一间隔时间里,每秒从硬盘导入的页(KB),等于vmstat的bi
dpgpgin/interval
pgpgout/s
前一间隔时间里,每秒转储到硬盘上的页(KB),等于vmstat的bo
dpgpgout/interval
fault/s
前一间隔时间里,每秒的缺页次数
dpgfault/interval
majflt/s
前一间隔时间里,每秒的主缺页次数
dpgmajfault/interval


范例2:虚拟内存的情况
可以看到物理内存的利用率从61.41%提升到99.84%,此外kbmemefree(物理内存)的闲置也27MB降到700KB,但是

[root@localhost proc]# dd if=/dev/zero of=/home/cxl/1.img bs=1024 count=10000000 &
[1] 4327
[root@localhost proc]# sar -r 1 1000
Linux 2.6.13 (localhost.localdomain) 2006年03月21日

12时08分38秒 kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpus ed %swpused kbswpcad
12时08分39秒 3592 251444 98.59 180 76848 236588 2694 48 53.25 23660
12时08分40秒 3356 251680 98.68 188 77020 236588 2694 48 53.25 23660
12时08分41秒 3232 251804 98.73 176 77192 236588 2694 48 53.25 23640
12时08分42秒 3508 251528 98.62 188 76544 236588 269448 53.25 23640
12时08分43秒 3108 251928 98.78 184 77128 236588 269448 53.25 23640
12时08分44秒 3356 251680 98.68 160 76940 236588 269448 53.25 23640
12时08分45秒 4152 250884 98.37 160 76104 236588 269448 53.25 23640
12时08分46秒 3028 252008 98.81 140 77212 236588 269448 53.25 23640
12时08分47秒 3200 251836 98.75 152 77264 236588 269448 53.25 23640
12时08分48秒 3448 251588 98.65 132 77032 236588 269448 53.25 23640
12时08分49秒 3048 251988 98.80 136 77216 236588 269448 53.25 23640
12时08分50秒 3324 251712 98.70 124 77068 236588 269448 53.25 23640
12时08分51秒 4008 251028 98.43 112 76428 236588 269448 53.25 23640
12时08分52秒 3076 251960 98.79 108 77596 236588 269448 53.25 23640


输出的解释:


参数
描述
/proc/meminfo
Kbmemfree(KB)
采样时,闲置的物理内存
MemFree
Kbmemused(KB)
采样时,已用的物理内存
MemTotal-MemFree
%memused
正在被使用的物理内存的百分比
Kbmemused/( Kbmemused+ Kbmemfree)
kbbuffers(KB)
采样时,缓冲区高速缓存,这部分空间不属于任何进程或线程。
Buffers
kbcached(KB)
采样时,页高速缓存,这部分空间不属于任何进程或线程。
Cached
kbswpfree(KB)
正在空闲的交换区的大小
SwapFree
kbswpused(KB)
采样时,已用交换区的大小
SwapTotal-SwapFree
%swpused
正在使用的交换区的百分比
SwapTotal-SwapFree
kbswpcad(KB)
采样时,swap cache的大小
SwapCached

范例3:
在18时19分30秒到18时19分31秒之间的1秒里,有12.37KB的数据从硬盘读入内存,有83703。09KB的数据内存写到硬盘里。

[root@localhost sysstat-5.1.5]# sar -W
Linux 2.6.13 (localhost.localdomain) 2006年03月20日

13时40分01秒 pswpin/s pswpout/s
13时50分01秒 0.00 0.00
14时00分01秒 0.00 0.25
14时10分02秒 0.00 0.00
Average: 0.00 0.08
[root@localhost sysstat-5.1.5]#

输出的解释:


参数
描述
/proc/vmstat
pswpin/s
每秒从交换区导入的物理页(KB)
dpswpin/interval
Pswpout/s
每秒转储到交换区的物理页(KB)
dpswpout/interval



1.1.11. ipcs
ipcs是通过系统调用获得核心信息来查看进程间通信机制中对象的状态。
ipcs [ resource ] [ format ]

resource的参数有:
第八一部分 参数
第八二部分 解释
第八三部分 -m
第八四部分 查看共享内存段
第八五部分 -q
第八六部分 查看消息队列
第八七部分 -s
第八八部分 查看信号量
第八九部分 -a
第九〇部分 缺省值,查看所有信息
第九一部分 -u
第九二部分 查看当前值
第九三部分 -l
第九四部分 查看上限值


format的参数有:
第九五部分 参数
第九六部分 解释
第九七部分 -t
第九八部分 显示时间
第九九部分 -p
第一〇〇部分 显示pid
第一〇一部分 -c
第一〇二部分 显示创建者
第一〇三部分 -l
第一〇四部分 显示上限
第一〇五部分 -u
第一〇六部分

利用ipcrm删除信号量集、消息队列、共享内存。
信号量(SEMAPHORE)则是防止两个或多个进程同时访问共享资源的一种机制。Struct seminfo 的各个成员解释:
参数
解释
semmap
共享内存中可用于分配给信号量的空闲空间,单位:信号量的个数。
semmni
系统中信号类型的数目的最大值,一个信号灯标识符代表一个类型
semmns
系统中信号的最多数目,=semmni*semmsl
semmnu
对于每一个信号量,等待增加该信号量的值的进程数的上限值
semmsl
同一类信号的最多灯数
semopm
每个semop系统调用所包含的最大的操作数(能调用的信号灯的最多次数)
semume
对于一个进程,其等待的信号的数目的上限
Semusz
正在使用的信号集的数目
Semvmx
信号量的值的上限。信号量的值用来控制某个共享资源,当某一进程不使用该资源时,信号的值增1。
Semaem
正在使用的信号的数目




共享内存的各个成员解释:
参数
解释
shmmax
与shmall含义一样,只是单位不一样。以字节为单位。
shmmin
每个可用共享内存的最小尺寸。以字节为单位。
shmmni
SYSV:该文件表示整个系统最多有多少共享内存段
shmseg
每个进程最多可拥有的共享内存段
shmall
SYSV:该文件给出了每个可用共享内存的最大尺寸(以page为单位),取值=ceil(shammax/page_size)

消息队列的各个成员解释:
参数
解释
msgpool
消息缓冲池的尺寸,单位:kb
msgmap
消息映射中的条目数目
msgmax
可发送的最长消息的字节长度
msgmnb
队列所有消息之和,单位为字节
msgmni
最大的消息队列数目
msgssz
消息段的长度,byte
msgtql
系统消息头的数目
msgseg
消息段的数目



范例1:查看信号量集、消息队列、共享内存的上限值


[root@localhost ~]# ipcs -l

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 2097152
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 142
max semaphores per array = 256
max semaphores system wide = 32000
max ops per semop call = 100
semaphore max value = 32767

------ Messages: Limits --------
max queues system wide = 2878
max size of message (bytes) = 8192
default max size of queue (bytes) = 65535

[root@localhost ~]#

输出分三部分:
共享内存
第一〇七部分 参数
第一〇八部分 解释
第一〇九部分 max number of segments
第一一〇部分 shmmni,该文件表示整个系统最多有多少共享内存段
第一一一部分 max seg size (kbytes)
第一一二部分 Shmmax>>10
第一一三部分 max total shared memory (kbytes
第一一四部分 shmall
第一一五部分 min seg size (bytes)
第一一六部分 shmmin
第一一七部分 max number of arrays
第一一八部分 semmni系统中信号类型的数目的最大值
第一一九部分 max semaphores per array
第一二〇部分 Semmsl同一类信号的最多灯数
第一二一部分 max semaphores system wide
第一二二部分 semmns系统中信号的最多数目
第一二三部分 max ops per semop call
第一二四部分 Semopm每个semop系统调用所包含的最大的操作数(能调用的信号灯的最多次数)
第一二五部分 semaphore max value
第一二六部分 Semvmx信号量的值的上限。信号量的值用来控制某个共享资源,当某一进程不使用该资源时,信号的值增1。
第一二七部分 max queues system wide
第一二八部分 msgmni
第一二九部分 max size of message (bytes)
第一三〇部分 msgmax可发送的最长消息的字节长度
第一三一部分 default max size of queue (bytes)
第一三二部分 msgmnb




范例2:查看当前整体值



[root@localhost ~]# ipcs -u

------ Shared Memory Status --------
segments allocated 5
pages allocated 290
pages resident 242
pages swapped 0
Swap performance: 0 attempts 0 successes

------ Semaphore Status --------
used arrays = 5
allocated semaphores = 5

------ Messages: Status --------
allocated queues = 0
used headers = 0
used space = 0 bytes

[root@localhost ~]#

输出分三部分:
共享内存
第一三三部分 参数
第一三四部分 解释
第一三五部分 segments allocated
第一三六部分 正在使用的共享段的数目
第一三七部分 pages allocated
第一三八部分 分配给共享段的虚拟空间
第一三九部分 pages resident
第一四〇部分 共享段占用的物理内存空间
第一四一部分 pages swapped
第一四二部分 放到交换区的共享段的页数
Swap performance: 0 attempts 0 successes
第一四三部分
第一四四部分 交换的次数,交换的成功次数
第一四五部分 used arrays
第一四六部分 正在使用的信号集的数目
第一四七部分 allocated semaphores
第一四八部分 正在使用的信号的数目
第一四九部分 allocated queues
第一五〇部分 消息缓冲池的尺寸,单位:kb
第一五一部分 used headers
第一五二部分 消息映射中的条目数目
第一五三部分 used space
第一五四部分 系统消息头的数目,bytes


范例3:


[root@localhost ~]# ipcs –a

------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 327680 root 600 393216 2 dest
0x02063508 294913 root 666 4 1
0x00000000 360450 root 600 393216 2 dest
0x00000000 1245187 root 666 313600 1 dest

------ Semaphore Arrays --------
key semid owner perms nsems
0x16063508 0 root 666 1
0xde063508 32769 root 666 1
0x0206baad 65538 root 600 1

------ Message Queues --------
key msqid owner perms used-bytes messages

输出分三部分:
共享内存
第一五五部分 参数
第一五六部分 解释
第一五七部分 key
第一五八部分 32-bit, IPC资源的标识符
第一五九部分 shmid
第一六〇部分 IPC资源的描述符,类似与文件描述符,该值从key计算该值
第一六一部分 owner
第一六二部分 创建该资源的用户名
第一六三部分 perms
第一六四部分 存放了该资源的创建者、该资源的组和其它用户的读写权限。
第一六五部分 bytes
第一六六部分 该共享段的大小
第一六七部分 nattch
第一六八部分 使用该共享段
第一六九部分 status
第一七〇部分 该共享段的状态:dest(在上次detach时被destroy)

信号量
第一七一部分 参数
第一七二部分 解释
第一七三部分 key
第一七四部分 32-bit, IPC资源的标识符
第一七五部分 semid
第一七六部分 IPC资源的描述符,类似与文件描述符,该值从key计算该值
第一七七部分 owner
第一七八部分 创建该资源的用户名
第一七九部分 perms
第一八〇部分 存放了该资源的创建者、该资源的组和其它用户的读写权限。
第一八一部分 nsems
第一八二部分 信号的个数

消息队列

第一八三部分 参数
第一八四部分 解释
第一八五部分 key
第一八六部分 32-bit, IPC资源的标识符
第一八七部分 msmid
第一八八部分 IPC资源的描述符,类似与文件描述符,该值从key计算该值
第一八九部分 owner
第一九〇部分 创建该资源的用户名
第一九一部分 perms
第一九二部分 存放了该资源的创建者、该资源的组和其它用户的读写权限。
第一九三部分 used-bytes
第一九四部分 该消息队列的当前所占的字节
第一九五部分 messages
第一九六部分 该消息队列中消息的个数

范例2
[root@localhost ~]# ipcs -pm

------ Shared Memory Creator/Last-op --------
shmid owner cpid lpid
2097152 root 5588 5636
163841 root 5374 6109
196610 root 5356 5636
2129923 root 5588 5636
2457604 root 6161 5278
2490373 root 6161 5278
3375110 root 6161 5278
3407879 root 6161 5278
3440648 root 6161 5278
3768330 root 6161 5278

输出分三部分:
共享内存
第一九七部分 参数
第一九八部分 解释
第一九九部分 shmid
第二〇〇部分 IPC资源的描述符,类似与文件描述符,该值从key计算该值
第二〇一部分 owner
第二〇二部分 创建该资源的用户名
第二〇三部分 cpid
第二〇四部分 创建资源的pid
第二〇五部分 lpid
第二〇六部分 最后使用该资源的pid

没有评论: