热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

procsysvm该目录下的文件用来优化虚拟内存比较重要的参数如下justin_$uname-aLinuxjustin2.6.32-100.26.2.el5#1SMPTueJan1

/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线程数量&#xff0c;为read-only&#xff0c;系统会根据脏页数自动调整&#xff0c;1秒增加1个直至nr_pdflush_threads_max&#xff1b;

justin_$ more nr_pdflush_threads

0

overcommit_memory

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

0&#xff1a;当用户空间请求更多内存时&#xff0c;内核则评估当前空闲内存量&#xff0c;如果足够则分配

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

2&#xff1a;内核采用”never overcommit”策略&#xff0c;以避免内存被耗尽

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

justin_$ more overcommit_memory

0

overcommit_ratio

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

justin_$ more  overcommit_ratio

50

page-cluster

一次写入swap的内存页数&#61;2的page-cluster次方&#xff0c;若该值为0则一次写入1个页&#xff0c;为1

justin_$ more page-cluster

3



推荐阅读
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文深入探讨了如何通过调整InnoDB的关键配置参数来优化MySQL的随机IO性能,涵盖了缓存、日志文件、预读机制等多个方面,帮助读者全面提升数据库系统的性能。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
author-avatar
情若自已_650
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有