linux lowmem使用情况,linux参数之/proc/sys/vm详解

/proc/sys/vm

该目录下的文件用来优化虚拟内存

比较重要的参数如下

justin_$ uname -a

Linux justin 2.6.32-100.26.2.el5 #1 SMP Tue Jan 18 20:11:49 EST 2011 x86_64 x86_64 x86_64 GNU/Linux

Swappiness

justin_$ more swappiness

60

--范围从0—100,因为即便有足够空余物理内存,linux也会将部分长期没有用到的页swap,该值越高则linux越倾向于此;

vfs_cache_pressure

默认值100,用于控制回收cache频率,值越小则越倾向于保留cache,0表示从不回收cache容易导致out-of-memory

注:cache用于缓存inode/dentry,而buffer用于缓存data

justin_$ more vfs_cache_pressure

100

stat_interval

VM信息更新频率,默认每1秒更新一次

justin_$ more stat_interval

1

hugetlb_shm_group指定group id,拥有该gid的用户可以使用huge page创建SysV共享内存段;

注:用户可通过2种方式使用huge page

Mmap:使用此API时,如果没有指定MAP_HUGETLB选项,系统必须加载hugetlbfs文件系统到/mnt/huge

SYSV共享内存system call(shmget/shmat):调用此API则需要配置hugetlb_shm_group

如果oracle使用了huge page且通过shm*调用,则将该值设为oracle用户的gid,否则可能会遭遇ORA-27125

ORA-27125: unable to create shared memory segment

Cause: shmget() call failed

Action: contact Oracle support

justin_$ more hugetlb_shm_group

0

nr_hugepages

huge页的最小数目,需要连续的物理内存;oracle使用hugepage可以降低TLB的开销,节约内存和CPU资源,但要同时设置memlock且保证其大于hugepage;其与11gAMM不兼容;

#        - memlock - max locked-in-memory address space (KB)

显然此系统分配了hugepage但没有程序使用

justin_$ more nr_hugepages

5120

justin_$ more /proc/meminfo | grep -i huge

HugePages_Total:    5120

HugePages_Free:     5120

HugePages_Rsvd:        0

HugePages_Surp:        0–当请求的页数超过nr_hugepages时可额外申请的页数,最大值由nv_overcommit_hugepages参数控制

Hugepagesize:       2048

nr_overcommit_hugepages

系统可分配最大huge page数= nr_hugepages + nr_overcommit_hugepages

justin_$ more nr_overcommit_hugepages

0

mmap_min_addr

指定用户进程通过mmap可使用的最小虚拟内存地址,以避免其在低地址空间产生映射导致安全问题;如果非0,则不允许mmap到NULL页,而此功能可在出现NULL指针时调试Kernel;mmap用于将文件映射至内存;

该设置意味着禁止用户进程访问low 4k地址空间

justin_$ more mmap_min_addr

4096

panic_on_oom

用于控制如何处理out-of-memory,可选值包括0/1/2,默认为0

0:当内存不足时内核调用OOM killer杀死一些rogue进程,每个进程描述符都有一个oom_score标示,oom killer会选择oom_score较大的进程

1/2:内存不足时不杀死进程,但具体策略有所差异

justin_$ more panic_on_oom

0

oom_kill_allocating_task

控制如何kill触发OOM的进程,可选值包括0/non-0,受panic_on_oom值影响

0:OOM killer扫描所有的进程寻找oom_score最高的,可通过将其kill释放大量内存

Non-0:kill出发out-of-memory的那个进程,避免进程队列扫描

justin_$ more oom_kill_allocating_task

0

lowmem_reserve_ratio

保留的lowmem,3列分别为DMA/normal/HighMem

justin_$ more  lowmem_reserve_ratio

256     256     32

dirty_background_bytes/ dirty_background_ratio

当内存中脏页达到一定数量或比例时,启用pdflush将其刷新至磁盘,两者只能取其一;

[oracle@usuwsoadb05 vm]$ more dirty_background_bytes

0

[oracle@usuwsoadb05 vm]$ more dirty_background_ratio

10

dirty_bytes/ dirty_ratio

当进程的脏数据达到某个临界点则该进程自动将其刷新至磁盘,dirty_ratio是与整个系统内存相除

justin_$ more dirty_bytes

0

justin_$ more dirty_ratio

20

drop_caches

默认为0,可选值包括1/2/3

1:释放页缓存,即buffer

2:是否inode和dentries缓存,即cache

3:包含1和2

注:由于buffer/cache里的值

justin_$ more drop_caches

0

max_map_count

一个进程最多可用于的内存映射区(memory map areas),在调用malloc会用到,由mmap/mprotect生成

Memory map areas are used as a side-effect of calling malloc, directly by mmap and mprotect, and also when loading shared libraries.

大部分程序使用数量不会超过1000,默认值65536

注:该值若太小某些情况下会导致ora-4030,详情参照ID 1325100.1,

当4030跟踪文件的process map dump记录如下,此时max_map_cout设置为65536导致资源不足,可适当调大

----- Process Map Dump -----

00400000-0954f000 r-xp 00000000 fd:09 3131376 /e00/oracle/prod/v11.2.0/bin/oracle <<

0974e000-0a2be000 rwxp 0914e000 fd:09 3131376 /e00/oracle/prod/v11.2.0/bin/oracle

0a2be000-0a304000 rwxp 0a2be000 00:00 0

0c8c9000-0c950000 rwxp 0c8c9000 00:00 0 [heap]

60000000-60001000 r-xs 00000000 00:13 9374560 /dev/shm/ora_DSSP_11698195_0

60001000-70000000 rwxs 00001000 00:13 9374560 /dev/shm/ora_DSSP_11698195_0

70000000-80000000 rwxs 00000000 00:13 9374561 /dev/shm/ora_DSSP_11698195_1

80000000-90000000 rwxs 00000000 00:13 9374565 /dev/shm/ora_DSSP_11730964_0

90000000-a0000000 rwxs 00000000 00:13 9374566 /dev/shm/ora_DSSP_11730964_1

a0000000-b0000000 rwxs 00000000 00:13 9374569 /dev/shm/ora_DSSP_11763733_0

b00

2aed84a4f000-2aed86e5f000 rwxp febe2000 00:11 29160 /dev/zero

7fffea3ca000-7fffea418000 rwxp 7ffffffb1000 00:00 0 [stack]

ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0 [vdso] <

******************* End of process map dump ***********

justin_$ more max_map_count

65530

nr_pdflush_threads

当前pdfflush线程数量,为read-only,系统会根据脏页数自动调整,1秒增加1个直至nr_pdflush_threads_max;

justin_$ more nr_pdflush_threads

0

overcommit_memory

为一个flag,可选值包括0/1/2,用于控制内存过度分配

0:当用户空间请求更多内存时,内核则评估当前空闲内存量,如果足够则分配

1:内核假定系统中始终有足够的内存直至耗尽为止

2:内核采用”never overcommit”策略,以避免内存被耗尽

有很多程序调用malloc()请求大量内存却很少使用,该参数则十分有用

justin_$ more overcommit_memory

0

overcommit_ratio

该值为物理内存比率,当overcommit_memory=2时,进程可使用的swap空间不可超过PM * overcommit_ratio/100

justin_$ more  overcommit_ratio

50

page-cluster

一次写入swap的内存页数=2的page-cluster次方,若该值为0则一次写入1个页,为1

justin_$ more page-cluster

3

你可能感兴趣的:(linux,lowmem使用情况)