Linux内部存款和储蓄器管理机制轻易深入分析,内部存款和储蓄器难点排查手腕及相关文件介绍

By admin in 美高梅手机版4858 on 2019年5月25日

本文对Linux内部存储器处理机制做二个简易的辨析,试图让您飞快精晓Linux一些内部存款和储蓄器处理的定义并有效的选取一些管制办法。

[-]

CentOS服务器内部存款和储蓄器监察和控制与调优

美高梅手机版4858 1

率先,内设有被应用是被分成区域的

32位系统:zone_DMA

·zone_NOWranglerMAL (平常内部存款和储蓄器区域 1六M)

·zone_RESLX570VED(用于高地址内部存款和储蓄器空间 8九陆M)

·zone_HIGHMEM(高地址内部存款和储蓄器空间 )

64位系统:

·zone_DMA(16G)

·zone_DMA32(4G)

·zone_normal(大于4G)

内部存款和储蓄器大页:

HugePage:大页面,在rhel 陆 x6十三个人系统上不但援助大页面而且协助使用透明大页

THP:透明大页,一句话来讲正是对无名内部存款和储蓄器的采取,不要求用户的参加活动在偷偷使用大页面来保管匿名内部存款和储蓄器段

佚名内部存款和储蓄器页:景逸SUVSS – 内部存款和储蓄器段 = 无名氏页

它帮助二种内部存款和储蓄器大小:

CentOS 6.4 x86_64 :

单个页面大小可达到一G,在TB级的内部存款和储蓄器使用上司空眼惯有效

稍低于TB级的内部存款和储蓄器,贰M相比较广泛的

varnish是兑现可以援助在内存中提供缓存的,而varnish听新闻说跟透明大页是不相称的,而透明大页日常景况下是系统在专擅使用的,既然不包容则必要将透明大页的效劳关闭

翻开内部存款和储蓄器大页相关信息

[[email protected]
~]# cat /proc/zoneinfo

Node 0, zoneDMA #突显出是或不是选取透明大页

pages free 3936

min 83

low 103

high 124

scanned 0

spanned 4095

present 3837

nr_free_pages3936

nr_inactive_anon0

nr_active_anon0

nr_inactive_file 0

nr_active_file0

nr_unevictable0

nr_mlock 0

nr_anon_pages 0

nr_mapped 0

nr_file_pages 0

nr_dirty 0

nr_writeback 0

nr_slab_reclaimable 0

nr_slab_unreclaimable 0

nr_page_table_pages 0

nr_kernel_stack0

nr_unstable 0

nr_bounce 0

nr_vmscan_write0

nr_writeback_temp 0

nr_isolated_anon 0

nr_isolated_file 0

nr_shmem 0

numa_hit 1

numa_miss 0

numa_foreign 0

numa_interleave0

numa_local 1

numa_other 0

nr_anon_transparent_hugepages 0
#
佚名的透明矩形页有0个,0说明未有应用**

protection:(0, 2004, 2004, 2004)

pagesets

cpu: 0

count: 0

high: 0

batch: 1

vm statsthreshold: 6

cpu: 1

count: 0

high: 0

batch: 1

vm statsthreshold: 6

cpu: 2

count: 0

high: 0

batch: 1

vm statsthreshold: 6

cpu: 3

count: 0

high: 0

batch: 1

vm statsthreshold: 6

all_unreclaimable: 0

prev_priority: 12

start_pfn: 1

inactive_ratio: 1

#以下是30位系统有关消息

Node 0, zone DMA32

pages free 219541

min 11180

low 13975

high 16770

scanned 0

spanned 520189

present 513077

nr_free_pages219541

nr_inactive_anon 2190

nr_active_anon77259

nr_inactive_file 64767

nr_active_file70570

nr_unevictable0

nr_mlock 0

nr_anon_pages27601

nr_mapped 6761

nr_file_pages137536

nr_dirty 5

nr_writeback 0

nr_slab_reclaimable 24374

nr_slab_unreclaimable 7081

nr_page_table_pages 3912

nr_kernel_stack172

nr_unstable 0

nr_bounce 0

nr_vmscan_write0

nr_writeback_temp 0

nr_isolated_anon 0

nr_isolated_file 0

nr_shmem 2200

numa_hit 40788326

numa_miss 0

numa_foreign 0

numa_interleave15094

numa_local 40788326

numa_other 0

nr_anon_transparent_hugepages 97
#自行运维透明大页,而2个页面包车型大巴矮小为二MB

protection:(0, 0, 0, 0)

pagesets

cpu: 0

count: 127

high: 186

batch: 31

vm statsthreshold: 30

cpu: 1

count: 87

high: 186

batch: 31

vm statsthreshold: 30

cpu: 2

count: 50

high: 186

batch: 31

vm stats threshold:30

cpu: 3

count: 148

high: 186

batch: 31

vm statsthreshold: 30

all_unreclaimable: 0

prev_priority: 12

start_pfn: 4096

inactive_ratio: 3

1个页面大小为二M,以上未有显得页面大小,所以大家要来查看此外2个文书

[[email protected]
~]# cat /proc/meminfo

MemTotal:1922112 kB

MemFree:893856 kB

Buffers:77136 kB

Cached:473116 kB

SwapCached:0 kB

Active:591384 kB

Inactive:267860 kB

Active(anon):309040 kB

Inactive(anon):8760 kB

Active(file):282344 kB

Inactive(file):259100 kB

Unevictable:0 kB

Mlocked:0 kB

SwapTotal:2097144 kB

SwapFree:2097144 kB

Dirty:104 kB

Writeback:0 kB

AnonPages:308996 kB

Mapped:27052 kB

Shmem:8800 kB

Slab:125692 kB

SReclaimable:97508 kB

SUnreclaim:28184 kB

KernelStack:1376 kB

PageTables:15616 kB

NFS_Unstable:0 kB

Bounce:0 kB

WritebackTmp:0 kB

CommitLimit:3058200 kB

Committed_AS:1085080 kB

VmallocTotal:34359738367 kB

VmallocUsed:12468 kB

VmallocChunk:34359720976 kB

HardwareCorrupted:0 kB

AnonHugePages: 198656 kB #佚名的晶莹大页

HugePages_Total: 0 #矩形页面包车型地铁总的数量

HugePages_Free: 0 #矩形页面包车型大巴空闲总的数量

HugePages_Rsvd: 0 #预留数

HugePages_Surp: 0

Hugepagesize: 2048 kB #Hugepagesize为 2M
,与nr_anon_transparent_hugepages对应

DirectMap4k:8180 kB

DirectMap2M:2088960 kB

AnonHugePages除以Hugepagesize结果为nr_anon_transparent_hugepages的数量,如下所示

[[email protected]
~]# echo ‘198656/2048 ‘ | bc

97

查阅当前主机内部存款和储蓄器空间的运用情状

·使用free -m 查看内部存款和储蓄器使用状态

free命令是最常用的,所以一般大家欣赏使用free -m
以兆为单位的显示内部存款和储蓄器使用意况

[[email protected]
~]# free -m

total used freeshared buffers cached

Mem:1877 1032 844 0 75 462

-/+ buffers/cache:495 1381

Swap:2047 0 2047

total: 物理内部存款和储蓄器总空间

Used: 已用的大要内部存款和储蓄器

free : 剩余的物理内存

shared: 共享内部存款和储蓄器

buffers/cache: 缓存缓存

Mem: 虚拟内部存款和储蓄器

那边显得84四的空余内部存款和储蓄器其实并非如此,由此空闲空间加上能够清理的buffer/cache一共是140⑤,那才是真正的闲暇内部存储器

buffer/cache的效能:访问IO设备,尤其硬盘上的文件,是相当的慢的,为了加紧访问使其缓存至内部存款和储蓄器中,假如早先时期用户对其访问则直接在内部存储器中走访而不直接再到IO设备上探求

于是Linux在选用buffer/cache是并非吝啬的,只要内有所空间则直接用来缓存

·关于 “-/+ buffers/cache”

[[email protected]
~]# free -m

total used freeshared buffers cached

Mem:1877 1043 683 0 178 462

-/+ buffers/cache: 471 1405

Swap:2047 0 2047

很生硬,如若已用了187七的内部存款和储蓄器,不过超过四分一都被buffer和cache使用了,所以压根用的尚未那样多,如果将buffer/cache减掉的话那么实际上用了47一的内部存款和储蓄器

Linux内部存款和储蓄器管理机制轻易深入分析,内部存款和储蓄器难点排查手腕及相关文件介绍。清理buffer/cache

壹经一定要清理buffer/cache的话,只须求将/proc/sys/vm/drop_caches
改动其数值就能够

可以选用man proc来得到接济进而查看其各个文件的意思

[[email protected]
~]# man proc

/proc/sys/vm/drop_caches (since Linux 2.6.16)

Writing to this file causes the kernel to drop clean caches, dentriesand
inodes from memory, causing that

memory to become free.

Tofree pagecache, use echo 1 > /proc/sys/vm/drop_caches; to free
dentriesand inodes, useecho 2 >

/proc/sys/vm/drop_caches; to free pagecache, dentries and inodes,
useecho 3 > /proc/sys/vm/drop_caches.

Because this isa non-destructive operationand dirty objects are
notfreeable, the user should run

sync(8) first.

如上方可摄取大约消息,假使想释放pagecache,那么则实施echo 壹 >
/proc/sys/vm/drop_caches

只可是buffer/cache缓存的时候被分为了两大类:

一.cache:特意用来缓存page cache
页缓存,这种缓存经常缓存的是文本数量,例如展开的文件内容

二.buffers:所缓存的是文件的元数据(inode+denty),可能普通用来缓存用户的写请求同步到硬盘上去的时候,先在内部存款和储蓄器中缓存一段时间再1并至硬盘

下边大家来清理buffer/cache,并洞察free、buffer和cache那七个值的变迁

先来查看大家脚下内部存款和储蓄器财富使用情形

[[email protected]
~]# free -m

totalusedfree shared bufferscached

Mem:18771004872 0 75 462

-/+ buffers/cache:467 1409

Swap:2047 0 2047

清理buffer/cache

[[email protected]
~]# echo 1 > /proc/sys/vm/drop_caches

[[email protected]
~]# free -m

totalused freeshared buffers cached

Mem:1877483 1393 0 0 26

-/+ buffers/cache:456 1420

Swap:2047 0 2047

就此echo 1未必是只针对于buffer的,而cached这么些值却还只怕有多少,表明我们修改参数的时候,它的元数据在内部也存在

此刻倘诺大家多量去做客文件会发掘buffers/cache又会增加,因为对linux来讲是运用内核缓冲进行加快的

换到内部存款和储蓄器的优化

简简单单来说,最佳不要用交流内部存款和储蓄器,可是linux系统的倾向性是不行高的,在服务器上它的暗许值是一定不出彩的,大多默许值只是相符于交互式桌面型的

涉嫌参数文件:/proc/sys/vm/swappiness

于是大家man一下proc 找一下swappiness相关表达

/proc/sys/vm/swappiness

Thevalue in this file controls how aggressivelythe kernel willswap
memory pages.Higher values

increase agressiveness, lower values descrease aggressiveness. The
default value is 60.

笔者们内核有多大倾向性使用调换内部存款和储蓄器的,那一个值越大,那么越协理利用沟通内部存款和储蓄器;

值越小越不援救利用,而暗中认可值是60,它的取值范围平常是0-拾0的;

[[email protected]
~]# cat/proc/sys/vm/swappiness

60

提出设置参数为0,因为0代表沟通内部存款和储蓄器能不用则不用,而这便是恰恰是我们所急需的

在服务器上,非常是物理内部存款和储蓄器缓存服务器上,比方varnish,一定刚烈提出将此值改为0

诚如来说当大家脚下已经映射进页表中的内部存款和储蓄器百分比,约等于说物理内部存储器的比重已经被有个别页表所利用了,各类进度页表映射目录里会炫耀出来每一个线性地址到大意地址的长空,所以两个进程都运行了并且都运转映射了,那所以物理内存中的进程当中的早已被间接照射进进度页表中的空间尺寸的比重

  • swappiness的值 大于或等于拾0
    的时候则运行沟通内部存款和储蓄器,相当于说当大家的进程运转起来然后,会有大批量的数额达成了页表映射,除了有个别无法移除的之外,那那些映射页表中早就运用的映射内部存款和储蓄器空间超出了物理内存的值从而加上swapiness的值,这里swappiness是比例)
    只要超越等于十0则开首启用交流存在

暗中同意是60,即使这里是百分之四十则运行调换内部存款和储蓄器,所以说倒霉好,倘若将其调节为0,那么就象征是100%,当然是不容许达到百分之百,假诺达到百分之百表示内存耗尽,如若内部存款和储蓄器耗尽对系统来将会高达其它1种景况–内部存款和储蓄器溢出(内部存款和储蓄器耗尽)

内部存款和储蓄器溢出/内部存款和储蓄器耗尽

在linux内核一定要有预先警告性的,在内部存款和储蓄器耗尽在此之前会将一定消耗内存的经过kill掉,一般来说linux内核会观测各种系统经过,为每一种进程做标志,如察觉特别占用内存的长河会将其得了,要是大家服务上运行类似于varnish的内部存款和储蓄器缓存服务来说,那么必然将停止的则是其①进度

为此我们要手动调解其相应的级其余,不让其根本对劳动开始展览干扰

论及参数文件:/proc/sysrq-trigger

调度内存相关属性:

echo f >/proc/sysrq-trigger

f表示 手动调治oom-kill 会手动运转oom-kill
会kill掉占内部存款和储蓄器品级最高的进度,当让1旦能源耗尽其也会活动运转kill的

手动内定服务等级:

echo n >/proc/pid/comm_adj

用二的N次方来估值

禁止oom-kill

修改内核参数 :vm.panic_on_oom = 1

表示当系统能源耗尽的时候使系统财富崩溃

体贴入微的文书:

/proc/进程的pid /oom_score

内需修改的公文

#调节指数,假如不期待使某些进度等级过高,尽只怕降低此值,就不会被kill

/proc/进程的pid/comm_adj

手动运行oom-kill

echo f >/proc/sysrq-trigger

禁用oom-kill

vm.panic_on_oom = 1

万1有交流内部存款和储蓄器可用,在调换内部存款和储蓄器中如故有个别换到内部存款和储蓄器可用,而且物理内部存款和储蓄器都以移动页的时候就不会生出oom
所以有个别时候调换内存依旧实惠的,只要物理内部存款和储蓄器没有达到全数页面都为活动状态,那么交流内设有这种现象下照旧得以起到一定额外急迫状态时的职能,所以调换内部存款和储蓄器也是必备的

交流内部存款和储蓄器怎样设定本文来源

以下是IBM给出的提出,应在服务器上安装多大的置换内部存款和储蓄器设定,望各位参照他事他说加以调查:

·在实行批管理服务器总括的服务器上,特别做科学总计的服务器上,要利用 4 x
RAM
都不算过分,当然RAM也就达到6四G上述,那么确实有个别过分了,因需而调,一般来说小于四G;

·要是是数据库服务器,不管物理内部存款和储蓄器多大,那么沟通内部存款和储蓄器要小于一G

以mysql为例,在系统上运维的时候,mysql为了巩固品质大诸多数码都利用在内部存储器个中,因为mysql需求多量的数额查询排序,特别在查询排序的时候供给大量内部存储器操作的,若是身处沟通内部存款和储蓄器中的话其性质一定严重降低的,也许降低到不得承受的境地;本文来源

就此,数据库服务器尽或许做到以下两点:

1.尽也许不用交换内部存款和储蓄器

二.让交流内部存款和储蓄器的半空中丰裕小

·应用服务器,比方apache、tomcat之类的服务器0.伍 X
RAM,物理内部存款和储蓄器的百分之五10就能够,假如物理内部存储器1共有64g
那么它的沟通内部存款和储蓄器也比较大,所以当内部存储器大于4G的时候
大家必要统一计划1个指引线,要是物理内部存款和储蓄器大于4G的话依然还是被耗尽,那么照旧亟待加物理内部存款和储蓄器,因为调换内部存款和储蓄器是没风趣的,在这种情状下物理内部存款和储蓄器大于4G依然1陆G的话,一般交流内部存款和储蓄器分配4G左右就可以;

只好动用交流内部存储器的提议

一旦不得不动用沟通内部存款和储蓄器,将沟通内部存款和储蓄器放在越靠外的磁道上效率越好,那表示将其坐落最靠外的分区上

设若我们有多块硬盘而且未有做RAID的话,那么能够将各种硬盘最外面包车型地铁分取都用来落实沟通内部存款和储蓄器,借使有四块硬盘,那么将各种硬盘的最外道拿出一G来做调换内部存款和储蓄器

linux内核在选拔硬盘的沟通分区的时候有一表征:可以将调换分区定义优先级,大家能够让那多少个的优先级同样,意味着基本以载重均衡的措施均分对交流内部存款和储蓄器的行使(负载均衡)这样就足以大大提升沟通内部存款和储蓄器的使用

/dev/sda1 swap swap pri=5 0 0

/dev/sdb1 swap swap pri=50 0

/dev/sdc1 swap swap pri=50 0

/swaps/swapfile1 swap pri=1 0 0
#当以上的半空中全用光了再向此文件中存放数据

理所当然,以上是在未有做RAID的景况下,如果有RAID0 或RAID5的话则更加好


手动配置大页面(Hugetable Page)

[[email protected]
~]# sysctl -a | grep hugepage
vm.nr_hugepages = 0 #运用多少自定义就能够
vm.nr_hugepages_mempolicy = 0
vm.hugepages_treat_as_movable = 0
vm.nr_overcommit_hugepages = 0

咱俩得以手动定义将其看作共享空间来挂载,直接挂载到有个别目录,而后创制文件急迅删除很有用,一时候大家写脚本的时候大概会变卦许多不常文件,假若大家将有的时候文件都放在这么的内部存款和储蓄器中,效果会更加好

据此此时大家得以定义多少个透明大页,将这么些透明大页定义成共享内部存款和储蓄器空间并挂载

hugetable page主要是巩固TLB质量,那样页表项就能够变小,所以能升高TLB的质量

配置hugetable page

x86info –a | grep ‘Data TLB’

dmesg

cat /proc/meminfo

变动大页

vim /etc/sysctl.conf

将值自定义改变:

vm.nr_hugepages = n

#hugepages = n

挂载

mkdir /hugepages

mount –t hugetlbfs none hugepages

因此挂砸能够将其当做内部存款和储蓄器磁盘来利用了,当然平日的时候没有须求协和钦命,假使不是和谐想写脚本并创立有时文件的话是没有需求挂载它的,只要开动透明大页,而后在mysql服务器中将服务器变量当做定义使用透明大页,它会自动使用

因此tlbfs只有在须要的时候,或想和煦手动内定在有些地方应用内部存款和储蓄器磁盘的时候才有要求去定义的

概念透明大页的个数:

[[email protected]
~]# cd /proc/sys/vm/
[[email protected]
vm]# cat nr_hugepages

0

将其值改为卓越的数值就可以,可能在grub中为基石运转的时候定义内核参数

观测内部存款和储蓄器的应用境况

举个例子观望内装有多少被换到出去或有多少被换到进来,page页面有稍许被分配出去或有多少写入到磁盘中等

涉嫌命令:

vmstat -n 1 2

sar -r 1 2

一意味着采样时间间隔

二象征采集样品时间次数

选用vmstat -n观看内存活动音信

[[email protected]
~]#vmstat -n 1 2

procs ———–memory———- —swap– —–io——system–
—–cpu—–

r bswpd free buffcache si sobi bo incs us sy id wa st

0 00 1216352 10392 225308 00 0 13 5 0 0100 00

0 00 1216344 10392 225264 00 0 0170 308 0 0100 00

参数解释:

swap :虚拟内部存储器的选用状态,当然我们这里没用

si:从磁盘中读进去的swap数据量

so:写到swap中的数据量

free:空闲内部存储器量

buffer:用于buffer空间
cache:如上

除此以外还可能有四个未有显得必要运用-a参数查看

inact:非活动内部存款和储蓄器 意为已有1段时间未有被先后所运用了

而是inact非活动该内全体两类:

·干净页: 指的是从未被涂改的,能够将其回收,直接清理就能够

·脏页 :指的是必须将其共同到磁盘上技巧够回收能源

active :活动内部存款和储蓄器 意为正值被先后所利用的

假诺我们发掘大批量的si so
意味着调换内部存款和储蓄器以及被接纳了,而且有雅量的换进换出,意味着物理内部存款和储蓄器远远不够用,那么提升品质的法子唯有正是加大物理内部存款和储蓄器;

然则需求小心的是当观测三个值的时候,有希望会有一部分比较新鲜的状态,比方CPU使用率百分百并不表示CPU慢,因为CPU或许费用相当短日子去等待IO完结,也正是说去进行swap
in/out
所以很多时候看上去CPU利用率高,可是最后开采是I/O的主题素材,完全部都是有希望的

要是出现这种I/O,由于是swap发生的io,意味着内部存款和储蓄器非常不够用,所以要做综合裁判

应用sar -r 进行观测

[[email protected]
~]# sar -r 1

Linux 2.6.32-431.20.3.el6.x86_64 (node3.test.com) 09/14/2014
_x86_64_(4 CPU)

04:06:29 PMkbmemfreekbmemused %memused kbbuffers kbcached
kbcommit%commit

04:06:30 PM 1216344705768 36.72 10408225348 1091764 27.16

04:06:31 PM1216336 705776 36.7210408 225348 109176427.16

04:06:32 PM1216336 705776 36.7210408 225348 109176427.16

04:06:33 PM1216336 705776 36.7210408 225348 109176427.16

04:06:34 PM1216336 705776 36.7210408 225348 109176427.16

04:06:35 PM1216336 705776 36.7210408 225348 109176427.16

04:06:36 PM1216336 705776 36.7210408 225348 109176427.16

亟待关爱前四个参数的值的扭转

参数解释:

kbmemfree:以kb为单位出示内存的空闲空间

kbmemused: 以kb为单位呈现底裤空间的采取

memused: 内部存款和储蓄器使用比例

kbbuffers:略

kbcached: 略

kbcommit:内部存款和储蓄器的提交

亟待关爱的是前多个值,即使数据量变化卓殊频仍的话,则申明内部存款和储蓄器被一再的施用/释放;

借使释放回收的比重过高,而free空间过小
use的空间过大,而且转移过于频繁的时候,那么比非常的大概是内部存款和储蓄器活动能够导致的,有非常的大只怕是像varnish之类的服务由于反复的内部存款和储蓄器释放回收等完成缓存对象创造和化解的运动带来的,只要相比较未有到百分之百就能够任由他去 ,可是注意实时监察

行使sar -Koleos 观测内部存款和储蓄器其移动速率本文来源

[[email protected]
~]# sar -R 1

Linux 2.6.32-431.20.3.el6.x86_64 (node3.test.com) 09/14/2014
_x86_64_(4 CPU)

04:08:42 PM frmpg/s bufpg/scampg/s

04:08:43 PM-33.00 0.00 0.00

04:08:44 PM0.00 0.00 0.00

04:08:45 PM0.00 0.00 0.00

04:08:46 PM0.00 0.00 0.00

frmpg/s:
每秒放出了略微个内部存款和储蓄器页,倘若咱们想要知道多大内部存款和储蓄器要求将那些数值乘以四

bufpg/s: 每秒被用于哪来兑现buffer的页面个数

campg/s: 如上,每秒被用来哪来促成cache的页面个数

bufpg+campg-frmpg=真正释放的个数

如果直接是负值,那么内部存款和储蓄器空间料定是向来有限的,总有自然时间总会被耗尽,所以一贯为负值就象征大概会内部存款和储蓄器走漏了

其1观测值还足以长日子评判出内部存款和储蓄器是或不是有泄漏意况爆发,释放和分红的值大概能够等效

应用sar -W查看交流内部存储器使用状态

[[email protected]
~]# sar -W
Linux 2.6.32-431.20.3.el6.x86_64 (node3.test.com) 09/13/2014
_x86_64_ (4 CPU)

12:00:01 AM pswpin/s pswpout/s
12:10:01 AM 0.000.00
12:20:01 AM 0.000.00
12:30:01 AM 0.000.00

由于没跑任何服务所以这里为0,纵然有反复的pswpin 和pswpout
就代表大家的情理内部存款和储蓄器太小了

换到内部存款和储蓄器用了从未有过涉嫌,不过变化量一点都不大可是利用空间异常的大也未曾难题

假若变化值极高,平日会有标题亟待大家关注了

使用sar -B查看I/O使用状态

[[email protected]
~]# sar -B

Linux 2.6.32-431.20.3.el6.x86_64 (node3.test.com) 09/14/2014
_x86_64_(4 CPU)

12:00:01 AMpgpgin/s pgpgout/s fault/s majflt/spgfree/s pgscank/s
pgscand/s pgsteal/s%vmeff

12:10:01 AM0.00 1.45 11.830.00 4.00 0.000.00 0.00 0.00

12:20:01 AM0.00 0.82 147.740.00 176.60 0.000.00 0.00 0.00

12:30:01 AM0.00 2.18 4.400.00 1.66 0.000.00 0.00 0.00

12:40:01 AM0.00 1.30 3.310.00 1.53 0.000.00 0.00 0.00

12:50:01 AM0.00 0.77 146.060.00 174.63 0.000.00 0.000.00

01:00:01 AM0.01 2.14 5.730.00 1.80 0.000.00 0.00 0.00

pgpgin: 每秒页面载入个数

pgpgout:
页面写出个数,以页为单位直接与基础内部存储器交互的,而基本内部存款和储蓄器最后是与I/O交互

#1通不相同到磁盘中国和东瀛常都以脏页,需求pgpgin一般要求运用buffer/cache

fault : 每秒出现的特别个数

majflt: 大不行的个数

#以下参数无需被关心

pgfree:每分钟有微微个页被放置空闲列表中去,表明被回收回来的页面个数

pgscank:每秒被kswap所扫描的页面个数

pgscand:直接被内核扫描的页面个数

上述是跟真的I/O相关的参数(跟硬盘交互的时候数据载入内核内部存款和储蓄器并载入到进程内部存款和储蓄器中,或从脏页中写入到磁盘中的数据)

题外:选取dstat观望内部存款和储蓄器境况**

dstat是不行好用的工具,能客观明了的体现出内部存款和储蓄器当前使用状态,个人相比喜欢用,这里略过

[[email protected]
~]# dstat -g -m -s

—paging– ——memory-usage—– —-swap—

in out | usedbuff cach free| usedfree

0 0 | 496M 10.4M 220M 1151M|0 2048M

0 0 | 496M 10.4M 220M 1151M|0 2048M

0 0 | 496M 10.4M 220M 1151M|0 2048M

0 0 | 496M 10.4M 220M 1151M|0 2048M

0 0 | 496M 10.4M 220M 1151M|0 2048M

正文来源

调动基本参数

·体量调度

比如说大家内部存款和储蓄器空间壹共只有一G的容积,而是不是能让内部存款和储蓄器使用过量一G,大于物理内部存款和储蓄器则意味着要接纳调换内部存款和储蓄器实行仓库储存数据,也就表示一旦允许超过那就必定会动用调换内存

假使真的不能加物理内部存款和储蓄器不得不动用沟通内部存款和储蓄器的时候,非常是在批量管理的条件上,举个例子hadoop,其不提供实时管理的,所以批量付给管理作业,和交由作业的出口中间大概有一段时间间隔,这种意况下是同意能够当施夷光用内部存款和储蓄器的

提到参数文件:

/proc/sys/vm/overcommit_memory

/proc/sys/vm/overcommit_ratio

/proc/sys/vm/max_map_count

正文来源

·overcommit_memory

[[email protected]
~]# cat /proc/sys/vm/overcommit_memory

0

相关参数:

0:默许设置,是不是同意超越,由基础决定是不是能够高于而且允许抢先多少

一:允许接纳交流内部存款和储蓄器,可是不显眼使用大小,有比十分的大大概会招致崩溃的

二:允许使用调换内部存款和储蓄器,但是超过多少是内需手动定义的

正文来源

1经设定为2,那么可用总的内部存款和储蓄器大小是:全部的交流内部存款和储蓄器空间 +
物理内存空间的一有的

使用多少物理内部存款和储蓄器是由overcommit_ratio举办定义的内存比例,用这几个比重乘以物理内部存款和储蓄器的分寸再加上调换内部存款和储蓄器的尺寸便是全体可用的内部存款和储蓄器空间

·overcommit_ratio

若果那一个ratio 为0.五的话,swap为肆G 那么最大可用内部存款和储蓄器空间为6G

如果overcommit_ratio的值为0的话,这就象征全体可用大小是换到内存的凡事+物理内部存款和储蓄器x0%
最后还是4G本文来自

很扎眼,假使换到内部存款和储蓄器是四G 物理内部存款和储蓄器也是肆G
又通过这种方法定义最两只可以利用4G,那就象征沟通内部存款和储蓄器也许会用到本文来源

只要将swapiness的参数设置为0,那么意味着尽量不使用交流内部存款和储蓄器,而大家这里又可想而知表达内部存款和储蓄器总共可用空间只有肆G,因为大家设置overcommit_ratio为0
而overcommit_memory的值为二,那一定料定总江西共产主义劳动大学小为4G,那就意味着大家调换内部存款和储蓄器可能会派不上用场,这就起到近似禁止使用沟通内部存款和储蓄器的效果

本文来源

多少场景下,假若大家期待尽只怕不采纳调换内部存款和储蓄器可用使用这种方式

swapiness = 0

overcommit_memory = 2

overcommit_ratio = 0

那是二个杰出遍布的内部存款和储蓄器内核优化学工业机械制

正文来源

进程间通讯内部存款和储蓄器品质调度

涉及参数配置文件路线:/proc/sys/kernel/

·msgmax

进度间通讯如若依照新闻间通讯的话有希望一个进程与N个进度并行

只要各worker开掘其管理速度异常的快的话,而master处理速度非常的慢,那无差别的速率下1个经过只可以管理有限的多少个,那么则有多数会处在等候状态(将其放在队列中)

故而其参数的意趣为:以字节为单位,用来定义单个新闻大小的,暗许值为65536

·msgmnb

以字节为单位,钦点音讯队列的高低,单个音讯上限

·msgmni

是还是不是允多数少队列个数

若是2个队列为10k,那大家有13个系列,11个队列加一同则为十0k也正是说一共允许使用多少个新闻队列,而各种队列有多大,而各样队列中的音讯有多大,都以透过上述七个参数实行定义的

假设某些进度通讯量的确非常的大,而且单个新闻量也大,这大家得以将单个队列长度举行调度,将单个音信的上限调治;假如音讯量也相当大,则足以扩张队列数

前提是经过间通讯是依附新闻通讯的,若是还是不是则进入第三种办法:

本文来源

以共享内部存款和储蓄器作为通讯方式

关系参数配置文件路径:/proc/sys/kernel/

·shmmni

可用于共享内部存款和储蓄器的最大内部存款和储蓄器大小,指的是有个别,因为共享内部存款和储蓄器不自然是连连的,所以指的是用以共享内部存款和储蓄器的内部存款和储蓄器段的个数,暗许值为40玖陆

某个服务,例如oracle,oracle内部有成都百货上千子进程这几个进程各自承担差异的任务,而相互之间通讯都以依据共享内部存款和储蓄器所完结的,所以一般须求调动其值

·shmmax

可允许最大共享内部存款和储蓄器片段(单个内部存款和储蓄器片段大小上限),陆九位系统暗中认可值为687一玖四九6736,在红帽陆.x
6四人系统则毫不调治了

·shmall

单次在系统中得以选用的共享内存量,某三次申请共享内存,最多可申请多少个

诸如:三个片最大十k,一共40玖6片,大家规定三遍只好使用20k,那么意味着大家最多可以运用二片;那么壹旦大家定义单片最大上限为20k,那么意味着二次只可以申请一片。

在红帽陆.四,假如内部存款和储蓄器够多平时是毫不调度的

·threads-max本文来自

最大线程,规定基本使用的最大线程数

threads-max最小为20

总结最大值:

max_threads = mempages / (8 * /THREAD_SIZE / PAGE_SIZE )

假若多少个经过大小值经常很难平均的时候,这么些值可能会用的到

与体积相关的文件系统可调动参数

要害关心的参数:

·file-max

安装最大的公文讲述符

echo ‘*- nofile 65535 ‘ >>/etc/security/limits.conf

#nofile表示所能张开的最大的文书数

·min_free_kbytes

细微空闲的内部存款和储蓄器空间,我们的情理空间无法整个抽成出去,必须求留住部分供内核所使用、分配,设置这些数值务要求小心,因为过高或过低都有高危机的,许多状态下1旦不知道能够不调

·dirty_ratio

当物理内部存款和储蓄器中脏页比例超过一定比率的时候一定会利用pdflush定期刷写到硬盘上去,可是要是变化量相当慢,借使不到一分钟就会有成都百货上千,那么用按期刷写则效用会很低

平凡将脏页刷写到硬盘平时有多个政策

·根据时间,固定周期本文来源

·遵照刷写的剧情,达到自然比重,达到一定比率的时候

日子距离越小就象征刷鞋频率越高,频率越高就意味着数据在内部存款和储蓄器中恐怕有失的越小,然而IO活动量就越大,所以广大时候取得1个理想值是很重大的

比方:借使不时3分钟的多少丢失,就代表数据量能够在内部存款和储蓄器中蕴藏3秒以上,意味着3秒刷写一遍,那么IO量会下跌,IO是性质的瓶颈所在

dirty_ratio默许值为20,当脏页比例所占用的总内部存款和储蓄器空间所落成了总内部存款和储蓄器空间的1/5事后则自动刷写到硬盘中

如果感觉那一个值极低,能够将其调高,能够下落刷写次数,升高质量表现,不过或许会丢掉数据,具体调解多少值要求和睦去权衡

在对于数据供给非常高的气象中,举个例子数据库,这些值不得以调高;但是对于varnish这种内部存款和储蓄器缓存服务器来说,缓存的数量丢失也远非提到,那样的话能够调高,可是缓存是不可见写多少的,只怕说在内部存款和储蓄器中存款和储蓄缓存是不也许刷写的硬盘上去的,不过部分时候必要的,比方用磁盘进行缓存数据,那时候能够相当大的调动此值;

·dirty_background_ratio

与地点差别,此值定义全局百分比本文来源

dirty_background_ratio和dirty_ratio的区别:**

dirty_ratio是由当有些进度本身所利用的内部存款和储蓄器数据的脏页将直达总体内部存款和储蓄器的百分比,于是进度自动向基础申请激活pdflush
由pdflush将经过的脏页同步至磁盘(与单进度相关)

dirty_background_ratio:假使有个别进度使用比例都以伍%
但是有所进度所占的比重加1道都有十分大希望超过某壹数值,所以具备数值加一道达到那个比例的时候则由基础运行pdflush,当有些进度本身的百分比高达dirty_ratio的百分比的时候,进度将协和向基础申请实践pdflush

如上是常调的七个参数

那么运营几个pdflush线程比较妥当:

貌似暗中认可来说,3个硬盘一个pfflush就可以,多了反倒会起到反效果

小结:对我们来说最常要调的有三组

1.swapiniceovercommit等

2.msgmax msgmin mnb等

3.pdflush

而在有点特殊现象下,比方database
单进度大批量使用的景色下,须求团结手动定义大页的,那样可以显明下落数据库的页表条目款项,以及坚实tlb命中率的

上述,为linux内部存款和储蓄器调优的就学笔记。

首先,内设有被接纳是被分为区域的 三十贰人系统:zone_DMA zone_NOEvoqueMAL
(正常内部存款和储蓄器区域 1陆M) zone_RES汉兰达VED(用于高地址内部存款和储蓄器空…

Linux内部存款和储蓄器高,触发oom-killer难点消除

NUMA

内部存款和储蓄器难点排查花招及有关文件介绍入眼

 

Linux 二.6从头援救NUMA( Non-Uniform Memory Access
)内部存款和储蓄器管理情势。在多少个CPU的系统中,内部存款和储蓄器按CPU划分为区别的Node,各种CPU挂二个Node,其访问本地Node比访问其他CPU上的Node速度要快繁多。
 通过numactl
-H查看NUMA硬件新闻,能够见到2个node的大大小小和相应的CPU核,以及CPU访问node的distances。如下所示CPU访问远端node的distances是地面node的2倍多。

1
procsysvmmin_free_kbytes

  1. 先是确定该种类的版本是30人

[root@localhost ~]# numactl -H
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
node 0 size: 15870 MB
node 0 free: 13780 MB
node 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
node 1 size: 16384 MB
node 1 free: 15542 MB
node distances:
node  0  1
  0:  10  21
  1:  21  10

2
procsysvmdrop_caches

 

通过numastat查看NUMA的总结音讯,包涵内部存款和储蓄器分配的命中次数、未命中次数、本地分配次数和远端分配次数等。

3
procsysrq-trigger

#uname -a 

[root@localhost ~]# numastat
                          node0          node1
numa_hit              2351854045      3021228076
numa_miss              22736854        2976885
numa_foreign            2976885        22736854
interleave_hit            14144          14100
local_node            2351844760      3021220020
other_node              22746139        2984941

  1. 31对echo m
    procsysrq-trigger输出的辨析

Linux alarm 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:58:04 EST 2007 i686 i686
i386

Zone

4 cat
procslabinfo

  1. 大家询问一下叁拾贰个人Linux的内部存款和储蓄器管理组织

Node下边细分为3个或多个Zone,为何要有Zone,八个原因:一.DMA配备能够访问的内部存款和储蓄器范围有限(ISA设备只好访问1陆MB);2.x86-3二bit系统地址空间有限(三二十一个人最七只好肆GB),为了利用更加大内部存款和储蓄器,要求利用HIGHMEM机制。

5 cat
procmeminfo

 

ZONE_DMA

  1. 5一首要消息

# DMA: 0x00000000 –  0x00999999 (0 – 16 MB) 

地点段最低的1块内存区域,用于ISA(Industry Standard
Architecture)设备DMA访问。在x八⑥架构下,该Zone大小限制为16MB。

6
top信息

# LowMem: 0x01000000 – 0x037999999 (16 – 896 MB) – size: 880MB 

ZONE_DMA32

7
free命令

# HighMem: 0x03七千000 – <硬件特定>

该Zone用于援助3二-bits地址总线的DMA设备,只在6四-bits系统里才有效。

八procsysvm目录下的其余文件

    内核使用low
memory来追踪全数的内部存款和储蓄器分配,那样的话八个1陆GB内部存款和储蓄器的系统比一个4GB内部存款和储蓄器的类别,须要消耗愈来愈多的low
memory,当low
memory耗尽,尽管系统依旧有剩余内部存款和储蓄器,还是会触发oom-killer。在贰.陆基础的表现是,杀掉占用内部存储器最高的历程,所以会促成sshd等经过被杀掉,产生系统不或许登六。

ZONE_NORMAL

 

  1. 什么样查看lowMem

该Zone的内部存储器被基本直接照射为线性地址并得以向来接纳。在X8陆-3二架构下,该Zone对应的地方范围为1陆MB~8九6MB。在X八陆-6四架构下,DMA和DMA3二之外的内部存款和储蓄器全体在NOENVISIONMAL的Zone里管理。

5. 内部存款和储蓄器难题排查花招及有关文书介绍【重视】

对此内部存款和储蓄器难点排查,可能OOM难点排查,一般会提到到如下文件,上边将如下文件的辨析和设置介绍一下,那也是本文书档案的基本点,前边排查内存新闻依然要基于那个文件音信来排查。其实不一定是有内存走漏,也或然是1对国策有标题,比如线程数目标充实,buffer的申请、释放时间交集等。

 

ZONE_HIGHMEM

5.1 /proc/sys/vm/min_free_kbytes

min_free_kbytes用来规定系统起初回收内部存款和储蓄器的阀值,调节体系的闲暇内部存款和储蓄器。值越高,内核越早起第二回收内部存款和储蓄器,空闲内部存款和储蓄器越高。

能够应用如下格局:echo 65535> /proc/sys/vm/min_free_kbytes将系统一保险留内部存款和储蓄器设置为6M。

-bash-3.00# free -lm

该Zone只在315位系统才有,通过确立有时页表的主意映射超越8玖陆MB的内部存款和储蓄器空间。即在急需拜访的时候创造地点空间和内部存款和储蓄器的光彩夺目关系,在走访结束后拆掉映射关系释放地址空间,该地址空间可以用于其余HIGHMEM的内部存储器映射。

5.2 /proc/sys/vm/drop_caches

清系统缓存:

#echo 1 > /proc/sys/vm/drop_caches 清理页缓存

#echo 2 > /proc/sys/vm/drop_caches 清理文件缓存

#echo 3 > /proc/sys/vm/drop_caches 清理也缓存和文书缓存

             total       used       free     shared    buffers    
cached

透过/proc/zoneinfo能够查阅Zone相关的音讯。如下所示X八陆-6四系统上多少个Node,Node0上有DMA、DMA3贰和Normal四个Zone,Node1上唯有一个Normal
Zone。

5.3 /proc/sysrq-trigger

当叁个sysrq命令被触发,内核将会打字与印刷音讯到根本的环形缓冲并出口到系统调节台。此新闻一般也会通过syslog输出到/var/log/messages.

不常,大概系统现已无力回天响应,syslogd恐怕不恐怕记录此音信。在这种景况下,建议您布置一个串口终端来搜集那些消息。

#echo m > /proc/sysrq-trigger 导出内部存款和储蓄器分配新闻

#echo t > /proc/sysrq-trigger 导出线程状态音信

#echo  p
> /proc/sysrq-trigger 导出当前CPU寄存器音信和标识位的音信

#echo w >
/proc/sysrq-trigger将进入uninterrupted状态的天职的消息dump出来

Mem:          2026       1973         52          0         36      
1303

[root@localhost ~]# cat /proc/zoneinfo |grep -E “zone|
free|managed”
Node 0, zone      DMA
美高梅手机版4858,  pages free    3700
        managed  3975
Node 0, zone    DMA32
  pages free    291250
        managed  326897
Node 0, zone  Normal
  pages free    3232166
        managed  3604347
Node 1, zone  Normal
  pages free    3980110
        managed  4128056

5.三.一对echo m > /proc/sysrq-trigger输出的辨析

 

root@ubuntu:/home/linux# echo m >/proc/sysrq-trigger

root@ubuntu:/home/linux# dmesg -c

SysRq : Show Memory

Mem-Info:

DMA per-cpu:

CPU   0: hi:    0, btch:   1 usd:  0

CPU   1: hi:    0, btch:   1 usd:  0

Normal per-cpu:

CPU   0: hi:  186, btch:  31 usd: 93

CPU   1: hi:  186, btch:  31 usd: 140

HighMem per-cpu:

CPU   0: hi:  186, btch:  31 usd: 185

CPU   1: hi:  186, btch:  31 usd: 13

active_anon:22129 inactive_anon:645isolated_anon:0

active_file:52387 inactive_file:81072isolated_file:0

unevictable:0 dirty:6 writeback:0unstable:0

free:336695 slab_reclaimable:12052slab_unreclaimable:2825

mapped:11208 shmem:892 pagetables:795bounce:0

free_cma:0

DMA free:15900kB min:788kB low:984kBhigh:1180kB active_anon:0kB
inactive_anon:0kB active_file:0kB inactive_file:0kBunevictable:0kB
isolated(anon):0kB isolated(file):0kB present:15992kBmanaged:15916kB
mlocked:0kB dirty:0kB writeback:0kB mapped:0kB
shmem:0kBslab_reclaimable:0kB slab_unreclaimable:16kB
kernel_stack:0kB pagetables:0kBunstable:0kB bounce:0kB free_cma:0kB
writeback_tmp:0kB pages_scanned:0all_unreclaimable? no

lowmem_reserve[]: 0 843 1999 1999

Normal free:635940kB min:42908kBlow:53632kB high:64360kB
active_anon:0kB inactive_anon:0kB
active_file:75608kBinactive_file:85104kB unevictable:0kB
isolated(anon):0kB isolated(file):0kBpresent:897016kB managed:864652kB
mlocked:0kB dirty:24kB writeback:0kBmapped:4kB shmem:0kB
slab_reclaimable:48208kB
slab_unreclaimable:11284kBkernel_stack:1696kB pagetables:0kB
unstable:0kB bounce:0kB free_cma:0kBwriteback_tmp:0kB pages_scanned:0
all_unreclaimable? no

lowmem_reserve[]: 0 0 9247 9247

HighMem free:694940kB min:512kBlow:15208kB high:29908kB
active_anon:88516kB inactive_anon:2580kBactive_file:133940kB
inactive_file:239184kB unevictable:0kB
isolated(anon):0kBisolated(file):0kB present:1183624kB managed:1183624kB
mlocked:0kB dirty:0kBwriteback:0kB mapped:44828kB shmem:3568kB
slab_reclaimable:0kBslab_unreclaimable:0kB kernel_stack:0kB
pagetables:3180kB unstable:0kBbounce:0kB free_cma:0kB
writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no

lowmem_reserve[]: 0 0 0 0

DMA: 1*4kB (U) 1*8kB (U) 1*16kB (U)0*32kB 2*64kB (U) 1*128kB (U)
1*256kB (U) 0*512kB 1*1024kB (U) 1*2048kB (R)3*4096kB (M) = 15900kB

Normal: 1*4kB (M) 6*8kB (UEM)3*16kB (UM) 2*32kB (EM) 2*64kB (UE)
2*128kB (UE) 2*256kB (UM) 2*512kB (UE)1*1024kB (M) 1*2048kB (U)
154*4096kB (MR) = 635940kB

HighMem: 59*4kB (UM) 10*8kB (UM) 2*16kB(M) 58*32kB (UM) 48*64kB
(UM) 4*128kB (UM) 2*256kB (UM) 1*512kB (M) 0*1024kB0*2048kB
168*4096kB (UMR) = 694940kB

Node 0 hugepages_total=0hugepages_free=0 hugepages_surp=0
hugepages_size=2048kB

134350 total pagecache pages

0 pages in swap cache

Swap cache stats: add 0, delete 0, find0/0

Free swap  = 1045500kB

Total swap = 1045500kB

524287 pages RAM

295938 pages HighMem

8303 pages reserved

647658 pages shared

93503 pages non-shared

root@ubuntu:/home/linux#

重要关怀如下多少个参数:

active_anon:无名映射的页,这几个映射是与公事非亲非故的

active_file:文件映射的页,这个映射和文件有关

mapped:设备和文件映射的轻重

slab_reclaimable:内核数据结构缓存的大大小小,可削减申请和假释内部存款和储蓄器带来的损耗

active_anon + active_file + mapped = 应用所利用的大小

active_anon + active_file + mapped +slab_reclaimable =
近期所使用的富有内部存款和储蓄器大小

除此以外我们一般还有可能会关怀:

Normal: 1*4kB (M) 6*8kB (UEM)3*16kB (UM) 2*32kB (EM) 2*64kB (UE)
2*128kB (UE) 2*256kB (UM) 2*512kB (UE)1*1024kB (M) 1*2048kB (U)
154*4096kB (MR) = 635940kB

此间是buddy
system(伙伴体系)的内部存款和储蓄器音讯,假若这里不小个的内部存款和储蓄器相当的少,也很轻易并发内存申请倒闭,或许触发OOM难点

Low:           874        823         51

Page

5.4 cat /proc/slabinfo

貌似的话基本程序中对小于1页的小块内部存款和储蓄器的伏乞才通过Slab分配器提供的接口Kmalloc来变成。因为slab分配的缓存都是不大块的缓存,所以一般景况下大家解析内部存款和储蓄器性能时,对此间不会太关爱,因为其对系统一整合体内部存款和储蓄器性能影响不会太大,并且内核中的kmalloc相对难点较少,应用层的题目较多。

但是能够通过如下音讯得到slab缓存的运用景况:

root@ubuntu:/home/linux# cat/proc/slabinfo

翻看slab音讯,除了看slabinfo文件外,还是可以进行/usr/bin/slabtop命令:

上述是一个/proc/slabinfo文件的音讯

root@ubuntu:/home/linux#/usr/bin/slabtop

 Active / Total Objects (% used)    : 311009 / 312759 (99.4%)

 Active / Total Slabs (% used)      : 7308 / 7308 (100.0%)

 Active / Total Caches (% used)     : 66 / 100 (66.0%)

 Active / Total Size (% used)       : 58479.13K / 58915.22K (99.3%)

 Minimum / Average / Maximum Object : 0.01K /0.19K / 8.00K

 

 OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE
NAME                  

 73949 73949 100%    0.05K   1013      73      4052K buffer_head

 66976 66686  99%    0.12K  2093       32      8372K dentry

 47100 47100 100%    0.63K   1884      25     30144K ext4_inode_cache

该命令的出口字段的含义:

OBJS — The total number of objects(memory blocks), including those in
use (allocated), and some spares not inuse.

ACTIVE — The number of objects (memoryblocks) that are in use
(allocated).

USE — Percentage of total objects thatare active. ((ACTIVE/OBJS)(100))

OBJ SIZE — The size of the objects.

SLABS — The total number of slabs.

OBJ/SLAB — The number of objects thatfit into a slab.

CACHE SIZE — The cache size of theslab.

NAME — The name of the slab.

High:         1151       1150          1

Page是Linux底层内部存款和储蓄器管理的基本单位,大小为4KB。二个Page映射为1段连接的大要内部存款和储蓄器,内部存储器的分配和自由都要以Page为单位举办。进度虚拟地址到概略地址的投射也是经过Page
Table页表举行,页表的每1项记录四个Page的虚拟地址对应的大要地址。

5.5 cat /proc/meminfo

-/+ buffers/cache:        633       1392

TLB

伍.伍.壹 首要信息

对于该文件,相比重大的是Active、Active(anon)、Active(file)、Mapped、Slab,类似于sysrq-trigger中所说,存在如下总计关系:

Active = Active(anon) + Active(file)

Active(anon)+Ac tive(file)+Mapped = 应用

Active(anon)+Ac tive(file)+Mapped +Slab= 系统累计使用内部存款和储蓄器

5.5.2 meminfo文件各字段说明

$cat /proc/meminfo

MemTotal:        2052440 kB //总内存

MemFree:           陆仟四 kB //空闲内部存款和储蓄器

Buffers:           1九9七陆 kB //给文件的缓冲大小

Cached:           43641二 kB
//高速缓冲存款和储蓄器(

SwapCached:        1987四 kB //被高速缓冲存款和储蓄用的置换空间尺寸

Active:          114451二 kB //活跃使用中的高速缓冲存款和储蓄器页面文件大小

Inactive:         73278八 kB //不时常使用的高速缓冲存款和储蓄器页面文件大小

Active(anon):     987640 kB //anon:不久

Inactive(anon):   572512 kB

Active(file):     156872 kB

Inactive(file):   160276 kB

Unevictable:           8 kB

Mlocked:               8 kB

HighTotal:       1177160 kB //The total and free amountof memory, in
kilobytes, that is not directly mapped into kernel space.

HighFree:           7396 kB // The HighTotal value canvary based on the
type of kernel used.

LowTotal:         875280 kB // The total and free amountof memory, in
kilobytes, that is directly mapped into kernel space.  used.

LowFree:           42608 kB //The LowTotal value canvary based on the
type of kernel

SwapTotal:        489940 kB //交换空间总大小

SwapFree:         45032八 kB //空闲调换空间

Dirty:               十四 kB //等待被写回到磁盘的轻重缓急

Writeback:             0 kB //正在被写回的尺寸

AnonPages:       1408256 kB //未映射的页的高低

Mapped:           131965 kB //设备和文书映射的大大小小

Slab:              37368 kB
//内核数据结构缓存的轻重,可削减申请和刑释内部存储器带来的损耗

SReclaimable:      14164 kB //可收回slab的大小

SUnreclaim:        23204 kB //不可收回的slab的大大小小2320四+1416四=3736捌

PageTables:        1330捌 kB //管理内存分页的索引表的深浅

NFS_Unstable:          0 kB //不稳定页表的大小

Bounce:                0 kB //bounce:退回

WritebackTmp:          0 kB //

CommitLimit:     1516160 kB

Committed_AS:    2511900 kB

VmallocTotal:     122880 kB //虚拟内存大小

VmallocUsed:       2868八 kB //已经被运用的虚拟内存大小

VmallocChunk:      92204 kB

HugePages_Total:       0//大页面包车型客车分配

HugePages_Free:        0

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:       2048 kB

DirectMap4k:       10232 kB

DirectMap2M:      899072 kB

Swap:         3067        142       2924

内存访问时须要探求地址对应的Page结构,那一个数目记录在页表里。全部对内存地址的访问都要先查询页表,由此页表的拜访次数是功能最高的。为了巩固对页表的访问速度,引进了TLB(Translation
Lookaside
Buffer)机制,将拜访较多页表缓存在CPU的cache里。由此CPU的品质总括里很关键的1项便是L1/L二cache的TLB
miss总计项。在内部存款和储蓄器一点都不小的系统里,如25陆GB内部存款和储蓄器全量的页表项有256GB/4KB=67108864条,各种条目款项占用16字节以来,须要壹GB,明显是CPU
cache不能够全量缓存的。那时候假如访问的内部存款和储蓄器范围较广很轻松并发TLB
miss导致访问延时的增加。

5.6 top信息

VIRT:virtual memory usage 虚拟内部存款和储蓄器
一、进度“须要的”虚拟内部存款和储蓄器大小,包涵进程使用的库、代码、数据等
二、若是进程申请十0m的内部存款和储蓄器,但实质上只使用了拾m,那么它会增高十0m,而不是实际上的使用量

RES:resident memory usage常驻内部存款和储蓄器(物理内部存储器)
1、进度如今选拔的内部存款和储蓄器大小,但不包罗swap out
贰、包罗其余进度的共享
三、若是申请100m的内部存款和储蓄器,实际选用十m,它只提升拾m,与VIRT相反
四、关于库占用内部存款和储蓄器的图景,它只计算加载的库文件所占内部存储器大小

SHEscort:shared memory 共享内部存款和储蓄器
一、除了自个儿进程的共享内部存款和储蓄器,也包含别的进程的共享内部存款和储蓄器
二、尽管经过只利用了多少个共享库的函数,但它富含了方方面面共享库的大大小小
三、总结有个别进度所占的概况内部存款和储蓄器大小公式:RES – SHTiguan
肆、swap out后,它将会降下来

DATA
一、数据占用的内部存款和储蓄器。即使top未有展现,按f键能够呈现出来。
二、真正的该程序供给的数目空间,是实在在运行中要利用的。

top 运营中得以因此 top
的在这之中命令对进程的呈现格局进行支配。内部命令如下:

s – 退换画面更新频率
l – 关闭或打开第一有的第3行 top 新闻的象征
t – 关闭或开启第一部分次之行 Tasks 和第二行Cpus 音讯的象征
m – 关闭或开启第贰片段第陆行 Mem 和 第六行 Swap音信的象征
N – 以 PID 的分寸的顺序排列表示经过列表
P – 以 CPU 占用率大小的顺序排列进度列表
M – 以内部存储器占用率大小的顺序排列进度列表
h – 突显扶助
n – 设置在进度列表所展现进程的数额
q – 退出 top
s – 改变画面更新周期

序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进度全数者的用户id
e USEXC60 进度全体者的用户名
f GROUP 进度全部者的组名
g TTY 运转进度的终极名。不是从终端运维的历程则体现为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最终动用的CPU,仅在多CPU情形下有意义
k %CPU 上次翻新到方今的CPU时间攻克百分比
l TIME 进度使用的CPU时间一齐,单位秒
m TIME+ 进度使用的CPU时间一齐,单位百分之拾0秒
n %MEM 进度使用的情理内部存款和储蓄器百分比
o VIRT 进程使用的虚拟内部存款和储蓄器总的数量,单位kb。VIRT=SWAP+RES
p SWAP 进度使用的虚构内部存款和储蓄器中,被换出的高低,单位kb。
q RES 过程使用的、未被换出的物理内部存款和储蓄器大小,单位kb。RES=CODE+DATA
r CODE 可实行代码占用的物理内部存款和储蓄器大小,单位kb
s DATA 可奉行代码以外的一对(数据段+栈)占用的大意内部存款和储蓄器大小,单位kb
t SHLAND 共享内部存款和储蓄器大小,单位kb
u nFLT 页面错误次数
v nDRT 最终三回写入到今天,被修改过的页面数。
w S
进度景况。(D=不可中断的上床情况,凯雷德=运营,S=睡眠,T=追踪/截至,Z=僵尸进度)
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 职责标识,参照他事他说加以考察 sched.h

暗中同意意况下仅展现相比根本的
PID、USEOdyssey、P猎豹CS陆、NI、VIRT、RES、SH奥迪Q7、S、%CPU、%MEM、TIME+、COMMAND
列。可以经过上边的神速键来改动彰显内容。

透过 f 键能够挑选呈现的内容。按 f 键之后会议及展览示列的列表,按 a-z
就可以呈现或隐藏对应的列,最后按回车键显著。
按 o 键能够退换列的显得顺序。按小写的 a-z
能够将相应的列向右移动,而大写的 A-Z
能够将相应的列向左移动。最终按回车键分明。
按大写的 F 或 O 键,然后按 a-z 能够将经过根据相应的列进行排序。而大写的
卡宴 键能够将近来的排序倒转。

 

Hugepages

5.7 free命令

 

 

free的出口壹共有肆行,第五行事沟通区的音讯,分别是换来的总的数量(total),使用量(used)和有多少空闲的交换区(free)

free输出地第三行和第二行都是注明内部存款和储蓄器使用意况的。第一列是总的数量(total),第叁列是使用量(used),第一列是可用量(free)。

第三行的输出时从操作系统(OS)来看的。也正是说,从OS的角度来看,Computer上累计有:

24677460KB(缺省时free的单位为KB)物理内部存储器;

在那个物理内部存款和储蓄器中有23276064KB被运用了;

还用14013九6KB是可用的;

第3行:

-buffers/cache,表示2个应用程序认为系统被用掉多少内部存款和储蓄器;

+buffers/cache,表示一个应用程序认为系统还应该有多少内存;

四.
所以大家须要维护LowMem,在2.6内核引进了lower_zone_protection,那将让内核愿意珍惜low
memory,从而在分配内部存款和储蓄器时优先考虑从high memory分配。

为了降低TLB
miss的票房价值,Linux引进了Hugepages机制,可以设定Page大小为2MB只怕一GB。2MB的Hugepages机制下,同样256GB内部存款和储蓄器须要的页表项下落为25六GB/二MB=13107二,仅供给2MB。因而Hugepages的页表能够全量缓存在CPU
cache中。
 通过sysctl -w
vm.nr_hugepages=十24足以安装hugepages的个数为十二4,总大小为肆GB。须要注意是,设置huagepages会从系统报名一而再2MB的内部存款和储蓄器块并开始展览封存(不能够用来常常内部存储器申请),要是系统运营1段时间导致内部存款和储蓄器碎片较多时,再提请hugepages会失利。
 如下所示为hugepages的设置和mount方法,mount之后应用程序供给在mount路线下通过mmap实行文件映射来利用这几个hugepages。

5.八 /proc/sys/vm/目录下的其余文件

1. /proc/sys/vm/block_dump
该文件表示是不是打开Block
Debug方式,用于记录全部的读写及DirtyBlock写回动作。
缺省安装:0,禁止使用BlockDebug情势

2. /proc/sys/vm/dirty_background_ratio
该公文表示脏数据达到系统完全内部存款和储蓄器的百分比,此时触发pdflush进度把脏数据写回磁盘。
缺省设置:10

**

  1. /proc/sys/vm/dirty_expire_centisecs**
    该公文表示只要脏数据在内存中驻留时间超过该值,pdflush进度在下二次将把那个数量写回磁盘。
    缺省安装:3000(10%0秒)

4. /proc/sys/vm/dirty_ratio
该公文表示假若经过产生的脏数据达到系统完整内部存款和储蓄器的比例,此时进度自行把脏数据写回磁盘。
缺省设置:40

5./proc/sys/vm/dirty_writeback_centisecs
该公文表示pdflush进程周期性间隔多长期把脏数据写回磁盘。
缺省安装:500(10%0秒)

6. /proc/sys/vm/vfs_cache_pressure
该公文表示内核回收用于directory和inode
cache内部存款和储蓄器的倾向;缺省值十0意味着内核将依据pagecache和swapcache,把directory和inode
cache保持在1个合理的百分比;下降该值低于十0,将导致基本倾向于保留directory和inode
cache;扩充该值当先十0,将促成基本倾向于回收directory和inode cache
缺省安装:100

7. /proc/sys/vm/min_free_kbytes
该文件表示强制Linux VM最低保留多少空闲内部存款和储蓄器(Kbytes)。
缺省设置:7二四(51二M物理内部存款和储蓄器)

8. /proc/sys/vm/nr_pdflush_threads
该文件表示方今正值周转的pdflush进程数量,在I/O负载高的动静下,内核会自动扩大越多的pdflush进度。
缺省设置:二(只读)

9. /proc/sys/vm/overcommit_memory
该公文内定了基石针对内部存款和储蓄器分配的国策,其值可以是0、一、二。
0,
表示内核将检查是不是有丰硕的可用内部存款和储蓄器供应用进程使用;借使有丰盛的可用内部存款和储蓄器,内部存款和储蓄器申请允许;不然,内存申请停业,并把错误再次来到给使用进程。
一, 表示内核允许分配全数的大意内部存款和储蓄器,而不论当前的内部存款和储蓄器状态怎样。
二,
表示内核允许分配超越持有物理内部存款和储蓄器和调换空间总和的内部存款和储蓄器(参照overcommit_ratio)。
缺省安装:0

10. /proc/sys/vm/overcommit_ratio
该文件表示,假若overcommit_memory=二,能够过载内部存储器的百分比,通过以下公式来计算种类全部可用内部存储器。
系统可分配内部存款和储蓄器=沟通空间+物理内部存款和储蓄器*overcommit_ratio/100
缺省设置:50(%)

11. /proc/sys/vm/page-cluster
该文件表示在写三次到swap区的时候写入的页面数量,0表示1页,一象征2页,2象征4页。
缺省安装:三(二的贰回方,八页)

12. /proc/sys/vm/swapiness
该公文表示系统举办交换行为的等级次序,数值(0-十0)越高,越恐怕爆发磁盘调换。

 

sysctl -w vm.nr_hugepages=1024
mkdir -p /mnt/hugepages
mount -t hugetlbfs hugetlbfs /mnt/hugepages

-bash-3.00# cat /proc/sys/vm/lower_zone_protection 

Buddy System

Linux BuddySystem是为着消除以Page为单位的内存分配导致外内部存款和储蓄器碎片难点:即系统远远不够再三再四的Page页导致急需连接Page页的内部存款和储蓄器申请不恐怕赢得满足。原理很轻易,将不相同个数的连年Pages组合成Block进行分红,Block按2的幂次方个Pages划分为十个Block链表,分别对应一,二,四,8,1陆,3二,64,12八,256,51二和十贰四个一而再的Pages。调用BuddySystem进行内部存储器分配时,根据报名的深浅找最合适的Block。
 如下所示为种种Zone上的BuddySystem基本音信,后边11列为13个Block链表里可用的Block个数。

-bash-3.00#echo 400 > /proc/sys/vm/lower_zone_protection

[root@localhost ~]# cat /proc/buddyinfo
Node 0, zone      DMA      0      0      1      0      1      1      1 
    0      0      1      3
Node 0, zone    DMA32    102    79    179    229    230    166    251   
168    107    78    169
Node 0, zone  Normal  1328    900  1985  1920  2261  1388    798    972 
  539    324  2578
Node 1, zone  Normal    466  1476  2133  7715  6026  4737  2883  1532   
778    490  2760

 

Slab

另一路难题是二4G内部存款和储蓄器的系统,空闲内部存款和储蓄器已经不到50M

BuddySystem的内部存储器都以大块申请,不过半数以上施用须要的内部存款和储蓄器都相当小,比方大规模的几百个Bytes的数据结构,借使也申请三个Page,将会充裕浪费。为了知足小而窘迫的内部存储器分配要求,Linux设计了Slab分配器。原理简单说就是为一定的数据结构构建memcache,从BuddySystem里申请Pages,将各种Page按数据结构的尺寸划分为多少个Objects,使用者从memcache里申请数据结构时分配2个Object。
 如下所示为Linux查看slab音信的格局:

  1. 肯定该系统的版本是陆十一人

[root@localhost ~]# cat /proc/slabinfo
slabinfo – version: 2.1
# name            <active_objs> <num_objs>
<objsize> <objperslab> <pagesperslab> : tunables
<limit> <batchcount> <sharedfactor> : slabdata
<active_slabs> <num_slabs> <sharedavail>
fat_inode_cache      90    90    720  45    8 : tunables    0    0   
0 : slabdata      2      2      0
fat_cache              0      0    40  102    1 : tunables    0    0   
0 : slabdata      0      0      0
kvm_vcpu              0      0  16576    1    8 : tunables    0    0   
0 : slabdata      0      0      0
kvm_mmu_page_header      0      0    168  48    2 : tunables    0   
0    0 : slabdata      0      0      0
ext4_groupinfo_4k  4440  4440    136  30    1 : tunables    0    0   
0 : slabdata    148    148      0
ext4_inode_cache  63816  65100  1032  31    8 : tunables    0    0   
0 : slabdata  2100  2100      0
ext4_xattr          1012  1012    88  46    1 : tunables    0    0    0
: slabdata    22    22      0
ext4_free_data    16896  17600    64  64    1 : tunables    0    0   
0 : slabdata    275    275      0

 

平时我们都以因而slabtop命令查看排序后的slab消息:

# uname -a 

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME             
   
352014 352014 100%    0.10K  9026  39    36104K buffer_head
 93492  93435  99%    0.19K  2226  42    17808K dentry
 65100  63816  98%    1.01K  2100  31    67200K ext4_inode_cache
 48128  47638  98%    0.06K    752  64  3008K kmalloc-64
 47090  43684  92%    0.05K    554  85  2216K shared_policy_node
 44892  44892 100%    0.11K  1247  36  4988K sysfs_dir_cache
 43624  43177  98%    0.07K    779  56  3116K Acpi-ParseExt
 43146  42842  99%    0.04K    423  102  1692K ext4_extent_status

Linux gxgd-nms-app 2.6.18-194.el5xen #1 SMP Tue Mar 16 22:01:26 EDT
2010 x86_64 x86_64 x86_64 GNU/Linux

kmalloc

  1. 用ps查看各进度的内部存款和储蓄器,大约就占用了四G, 绝大多数内部存款和储蓄器都以被Page
    Cache所占用。Linux内核的方针是最大程度的选取内部存款和储蓄器cache
    文件系统的数目,进步IO速度,即便在机制上是有进程要求越来越大的内部存款和储蓄器时,会自动释放Page
    Cache,但不拔除释放不立时可能释放的内部存款和储蓄器由于存在碎片不满足进度的内部存款和储蓄器须要。

和glibc的malloc()同样,内核也提供kmalloc()用于分配任性大小的内部存款和储蓄器空间。同样,若是任凭应用程序随便从Page里申请大4大小的内部存款和储蓄器也会招致Page内���内部存款和储蓄器碎片化。为了化解在那之中碎片难题,Linux使用Slab机制来达成kmalloc内存分配。原理和BuddySystem类似,即开立二的幂次方的Slab池用于kmalloc根据大小适配最好的Slab进行分红。
 如下所示为用于kmalloc分配的Slabs:

   所以大家要求3个主意,能够范围PageCache的上限。

[root@localhost ~]# cat /proc/slabinfo
slabinfo – version: 2.1
# name            <active_objs> <num_objs>
<objsize> <objperslab> <pagesperslab> : tunables
<limit> <batchcount> <sharedfactor> : slabdata
<active_slabs> <num_slabs> <sharedavail>
kmalloc-8192        196    200  8192    4    8 : tunables    0    0    0
: slabdata    50    50      0
kmalloc-4096        1214  1288  4096    8    8 : tunables    0    0    0
: slabdata    161    161      0
kmalloc-2048        2861  2928  2048  16    8 : tunables    0    0    0
: slabdata    183    183      0
kmalloc-1024        7993  8320  1024  32    8 : tunables    0    0    0
: slabdata    260    260      0
kmalloc-512        6030  6144    512  32    4 : tunables    0    0    0
: slabdata    192    192      0
kmalloc-256        7813  8576    256  32    2 : tunables    0    0    0
: slabdata    268    268      0
kmalloc-192        15542  15750    192  42    2 : tunables    0    0   
0 : slabdata    375    375      0
kmalloc-128        16814  16896    128  32    1 : tunables    0    0   
0 : slabdata    528    528      0
kmalloc-96        17507  17934    96  42    1 : tunables    0    0    0
: slabdata    427    427      0
kmalloc-64        48590  48704    64  64    1 : tunables    0    0    0
: slabdata    761    761      0
kmalloc-32          7296  7296    32  128    1 : tunables    0    0    0
: slabdata    57    57      0
kmalloc-16        14336  14336    16  256    1 : tunables    0    0    0
: slabdata    56    56      0
kmalloc-8          21504  21504      8  512    1 : tunables    0    0   
0 : slabdata    42    42      0

Linux
提供了如此3个参数min_free_kbytes,用来规定系统起头回收内部存储器的阀值,调控连串的空余内存。值越高,内核越早开始回收内部存款和储蓄器,空闲内部存款和储蓄器越高。

基础参数

 

Linux提供了一部分内部存款和储蓄器管理有关的基础参数,在/proc/sys/vm目录下能够查阅只怕经过sysctl
-a |grep vm查看:

[[email protected]
root]# cat /proc/sys/vm/min_free_kbytes 

[root@localhost vm]# sysctl -a |grep vm
vm.admin_reserve_kbytes = 8192
vm.block_dump = 0
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 20
vm.dirty_writeback_centisecs = 500
vm.drop_caches = 1
vm.extfrag_threshold = 500
vm.hugepages_treat_as_movable = 0
vm.hugetlb_shm_group = 0
vm.laptop_mode = 0
vm.legacy_va_layout = 0
vm.lowmem_reserve_ratio = 256  256 32
vm.max_map_count = 65530
vm.memory_failure_early_kill = 0
vm.memory_failure_recovery = 1
vm.min_free_kbytes = 1024000
vm.min_slab_ratio = 1
vm.min_unmapped_ratio = 1
vm.mmap_min_addr = 4096
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.nr_overcommit_hugepages = 0
vm.nr_pdflush_threads = 0
vm.numa_zonelist_order = default
vm.oom_dump_tasks = 1
vm.oom_kill_allocating_task = 0
vm.overcommit_kbytes = 0
vm.overcommit_memory = 0
vm.overcommit_ratio = 50
vm.page-cluster = 3
vm.panic_on_oom = 0
vm.percpu_pagelist_fraction = 0
vm.stat_interval = 1
vm.swappiness = 60
vm.user_reserve_kbytes = 131072
vm.vfs_cache_pressure = 100
vm.zone_reclaim_mode = 0

163840 

vm.drop_caches

echo 963840 > /proc/sys/vm/min_free_kbytes

vm.drop_caches是最常用到的参数,因为Linux的Page
cache(文件系统缓存)机制会导致大气的内部存款和储蓄器被用来文件系统缓存,蕴涵数据缓存和元数据(dentry、inode)缓存。当内部存储器不足时,我们由此该参数能够飞速释放文件系统缓存:

其它可选的不经常化解方式:

To free pagecache:
    echo 1 > /proc/sys/vm/drop_caches
To free reclaimable slab objects (includes dentries and inodes):
    echo 2 > /proc/sys/vm/drop_caches
To free slab objects and pagecache:
    echo 3 > /proc/sys/vm/drop_caches

关闭oom-killer

vm.min_free_kbytes

cat /proc/sys/vm/oom-kill

vm.min_free_kbytes用于决定内部存款和储蓄器低于多少时起步内部存储器回收机制(包蕴地点提到的文件系统缓存和下面会涉嫌的可回收的Slab),该值默许值十分的小,在内部存储器较多的种类装置为贰个相当大的值(如一GB)能够在内部存款和储蓄器还不会太少时自动触发内存回收。但也无法安装太大,导致频繁应用程序平日被OOM
killed。

echo “0” > /proc/sys/vm/oom-kill

sysctl -w vm.min_free_kbytes=1024000

vi /etc/sysctl.conf

vm.min_slab_ratio

vm.oom-kill = 0

vm.min_slab_ratio用于决定Slab池里可回收的Slab空间在该Zone里的占比直达多少时张开回收,暗中同意是五%。但透过小编试验,当内部存款和储蓄器丰盛时一直不会触发Slab回收,也只有在内部存储器水位线到达地点min_free_kbytes时才会触发Slab回收。该值最小能够设置为壹%:

  1. 清空cache (可选)

sysctl -w vm.min_slab_ratio=1

echo 1 > /proc/sys/vm/drop_caches

总结

 

上述轻巧描述了Linux内存管理机制和多少个常用的内部存款和储蓄器管理基础参数。

一.
第3料定该系统的版本是30个人 #uname -a Linux alarm 2.6.9-67.ELsmp #1 SMP
Wed Nov 7 13:58:04 EST 2007 i686 i686 i386 2. 我们…

参谋资料

Understanding The Linux Kernel 3rd
Edition
[Linux Physical Memory
Description]]()

本文长久更新链接地址

美高梅手机版4858 2

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有