观察项目
- 使用率 使用百分比,可用内存推断
- 饱和度 换页,交换,OOM
常用工具
- free
- vmstat
超大TLB
/usr/share/doc/kerneldoc-version/Documentation/vm/hugetlbpage.txt
大页和透明大页
- 2M
- 1G
容量调整
下参数位于 proc 文件系统的 /proc/sys/vm/ 目录
参数 | 含义 |
---|---|
overcommit_memory | 规定决定是否接受超大内存请求的条件。0(默认设置)内核执行启发式内存过量使用处理,方法是估算可用内存量,并拒绝明显无效 的请求。遗憾的是因为内存是使用启发式而非准确算法计算进行部署,这个设置有时可能会造 成系统中的可用内存超载。 1(内核执行无内存过量使用处理)使用这个设置会增大内存超载的可能性,但也可以增强大 量使用内存任务的性能。2(内存拒绝等于或者大于总可用)swap 大小以及 overcommit_ratio 指定的物理 RAM 比例 的内存请求。如果您希望减小内存过度使用的风险,这个设置就是最好的。 |
overcommit_ratio | 将 overcommit_memory 设定为 2 时,指定所考虑的物理 RAM 比例。默认为 50 |
max_map_count | 规定某个进程可能使用的最大内存映射区域。在大多数情况下,默认值 65530 就很合适。如果您 的程序需要映射比这个文件数更多的文件可增大这个值。 |
nr_hugepages | 规定在内核中配置的超大页数。默认值为 0。只有系统中有足够的连续可用页时方可分配(或者取 消分配)超大页。为这个参数保留的页无法用于其他目的。 |
/proc/sys/kernel/ 目录
参数 | 含义 |
---|---|
msgmax | 以字节为单位规定信息队列中任意信息的最大允许大小。这个值一定不能超过该队列的大小 (msgmnb)。默认值为 65536。 |
msgmnb | 以字节为单位规定单一信息队列的最大值。默认为 65536 字节 |
msgmni | 规定信息队列识别符的最大数量(以及队列的最大数量)。64 位架构机器的默认值为 1985;32 位架构机器的默认值为 1736。 |
shmall | 以字节为单位规定一次在该系统中可以使用的共享内存总量。64 位架构机器的默认值为 4294967296;32 位架构机器的默认值为 268435456。 |
shmmax | 以字节为单位规定内核可允许的最大共享内存片段。64 位架构机器的默认值为 68719476736; 32 位架构机器的默认值为 4294967295。注:但内核支持的值比这个值要多得多。 |
shmmni | 规定系统范围内最大共享内存片段。在 64 位和 32 位架构机器中的默认值都是 4096。 |
threads-max | 规定一次内核使用的最大线程(任务)数。默认值与 max_threads 相同。使用的方程式是:max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE ) |
/proc/sys/fs/
参数 | 含义 |
---|---|
aio-max-nr | 规定在所有活动异步 I/O 上下文中可允许的最多事件数。默认值为 65536。注:更改这个值不会预 先分配或者重新定义内核数据结构大小。 |
file-max | 列出内核分配的文件句柄最大值。默认值与内核中的 files_stat.max_files 映射,该参数可将 最大值设定为 (mempages * (PAGE_SIZE / 1024)) / 10 或者 NR_FILE(在红帽企业版 Linux 中是 8192)。增大这个值可解决由于缺少文件句柄而造成的错误。 |
Out-of-Memory Kill 可调参数
- /proc/sys/vm/panic_on_oom = 0, oom时自动杀死pro
- /proc/pid/oom_adj -16~15,-17禁用
调整虚拟内存
参数 | 说明 |
---|---|
swappiness | 参数值可为 0-100,控制系统 swap 的程序。高数值可优先系统性能,在进程不活跃时主动将其转 换出物理内存。低数值可优先互动性并尽量避免将进程转换处物理内存,并降低反应延迟。默认值 为 60。 |
min_free_kbytes | 保证系统间可用的最小 KB 数。这个值可用来计算每个低内存区的水印值,然后为其大小按比例分 配保留的可用页。 |
dirty_ratio | 规定百分比值。当脏数据组成达到系统内存总数的这个百分比值后开始写下脏数据(pdflush)。 默认值为 20。 |
dirty_background_ratio | 规定百分比值。当脏数据组成达到系统内存总数的这个百分比值后开始在后端写下脏数据 (pdflush)。默认值为 10。 |
drop_caches | 1 系统无效并释放所有页缓冲内存。 2 系统释放所有未使用的 slab 缓冲内存。 3 系统释放所有页缓冲和 slab 缓冲内存。 |
sync && echo 3 > /proc/sys/vm/drop_caches && echo 0 > /proc/sys/vm/drop_caches