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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `/proc/zoneinfo`是一个针对Linux内存管理的虚拟文件系统,它提供了对系统内存分配、使用和释放的详细信息。该目录下的文件或目录含义如下: - `numa_info`:此文件提供有关NUMA(非一致性内存访问)的信息,如节点数量、最大节点ID等。 - `buddyinfo`:此文件提供关于伙伴系统的信息,伙伴系统是一种用于分配内存的算法。它显示了每个优先级可用的空闲页面数量,以及它们的物理地址。 - `vmstat`:此文件提供了有关内存使用情况的信息,如内存总量、空闲内存、缓存、交换、页错误等。 - `zoneinfo`:此目录包含了每个内存区域的详细信息,每个内存区域都包含了一个或多个页面。 - `/proc/zoneinfo/lowmem_reserve_ratio`:此文件包含了用于低内存保留的比率。 - `/proc/zoneinfo/watermark_scale_factor`:此文件包含了用于内存水印标记的比率。 - `/proc/zoneinfo/min_unmapped_ratio`:此文件包含了用于未映射页面的最小比率。 - `/proc/zoneinfo/lowmem_reserve_pfn`:此文件包含了用于低内存保留的页面帧编号。 - `/proc/zoneinfo/zone_name`:此文件包含了内存区域的名称。 - `/proc/zoneinfo/pages_scanned`:此文件包含了用于扫描内存页面的数量。 - `/proc/zoneinfo/active_anon`:此文件包含了活动匿名页面的数量。 - `/proc/zoneinfo/inactive_anon`:此文件包含了非活动匿名页面的数量。 - `/proc/zoneinfo/active_file`:此文件包含了活动文件页面的数量。 - `/proc/zoneinfo/inactive_file`:此文件包含了非活动文件页面的数量。 - `/proc/zoneinfo/unevictable`:此文件包含了不能被清除的页面数量。 - `/proc/zoneinfo/mapped`:此文件包含了被映射的页面数量。 - `/proc/zoneinfo/present_pages`:此文件包含了内存区域中的页面数量。 - `/proc/zoneinfo/managed_pages`:此文件包含了管理的页面数量。 - `/proc/zoneinfo/lowmem_reserve`:此文件包含了低内存保留的页面数量。 - `/proc/zoneinfo/pagesets`:此目录包含了有关页面集的信息,如活动页面、非活动页面、LRU链等。 ### 回答2: `/proc/zoneinfo`是一个特殊的文件或目录,它提供了有关系统内存分配及其使用情况的重要信息。在Linux系统中,内存被细分为不同的区域(zones),每个区域对应于不同的内存用途。 在`/proc/zoneinfo`目录下,有若干个以数字命名的文件或子目录,每个文件或目录代表着一个特定的内存区域(zone)。下面是一些关键内容的解释: - ``DMA``:表示Direct Memory Access(直接内存访问)区域,这是用于处理低端硬件设备的内存区域。 - ``DMA32``:也是表示用于Direct Memory Access的内存区域,但它适用于32位系统,可以提供更多的物理内存地址。 - ``Normal``:这是一个常规的内存区域,用于大多数应用程序和进程的内存需求。 - ``HighMem``:该区域包含高端内存(High Memory),它是一种在物理内存较少时用于处理额外内存需求的技术。 - ``movable``:这是一个可移动内存区域,用于存储由内核自动管理的可移动页面(Page)。 - ``reclaimable``:这个目录包含可以被重新分配或释放的内存页面,可降低系统内存负载。 - ``Unreclaimable``:该目录包含无法被重新分配或释放的内存页面,这些页面可能是内核数据结构或设备驱动程序使用的。 除了上述关键词下的目录和文件,还存在其他名称的目录和文件,每个具体的目录和文件都提供了相应内存区域的更详细的统计信息,包括分配的页数、空闲的页数、用于页缓存的页数等等。 通过分析`/proc/zoneinfo`目录下的文件或目录,系统管理员能够深入了解系统的内存使用情况和性能瓶颈,从而有效地进行内存管理和优化。 ### 回答3: 在Linux系统中,``/proc/zoneinfo``是一个目录,它记录了系统内存分配的有关信息。下面是该目录中一些重要文件的含义: ``/proc/zoneinfo/unnamed``:这个文件记录了内核使用的非NUMA(Non-Uniform Memory Access)区的相关信息。在非NUMA系统中,系统中所有的内存都是对等的,不会因为物理位置的不同而导致数据访问延迟的不同。 ``/proc/zoneinfo/zone``:这个文件记录了系统中每个NUMA节点的相关信息。NUMA是一种非均匀内存访问模型,在这种系统中,内存被划分成多个节点,每个节点被连接到一个或多个处理器上。这个文件提供了每个节点的名称、标志、内存大小、内存分配器的相关信息以及每个节点所包含的内存页的详细信息。 ``/proc/zoneinfo/pgdat``:这个文件记录了全局数据的相关信息。在NUMA系统中,每个节点都有一个pg_data数据结构,这个文件提供了全局数据的总结,包括系统中所有NUMA节点的数量、内存总大小、每个节点的起始pfn(Page Frame Number)值等。 ``/proc/zoneinfo/numa``:这个文件记录了每个NUMA节点之间的关系,以及内存访问分布情况。对于NUMA系统,内存访问的延迟和带宽取决于所使用的节点,这个文件提供了详细的内存访问分布统计数据,有助于优化程序的性能。 总之,``/proc/zoneinfo``目录下的文件记录了系统内存分配的相关信息,包括对等内存区的信息和NUMA节点相关信息。这些信息对于系统管理员、开发人员和性能优化工作者来说是非常重要的,可以帮助他们深入了解系统内存的分布情况,优化系统的性能和资源利用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值