Centos系统内核优化参数列表

本文详细介绍了CentOS系统中内核参数的优化,包括内存管理、内核、网络和文件系统等方面的关键参数。这些参数对系统的性能、稳定性及内存使用效率有重要影响。例如,`vm.dirty_ratio`和`vm.dirty_background_ratio`控制脏页回写策略,`vm.swappiness`影响内存与交换空间的使用平衡,`kernel.panic_on_oom`设定系统在内存不足时的行为。了解并适当地调整这些参数,有助于提升系统的整体性能。
摘要由CSDN通过智能技术生成

前言

在centos中 sysctl -a 显示当前系统中可用的内核参数
Linux修改内核参数有三种方式:
(1)修改 /etc/sysctl.conf 文件,加入配置选项,格式为 key = value ,修改保存后调用 sysctl -p 加载新配置(此种方式在系统重新启动时不会丢失)
(2)使用sysctl命令临时修改,例如 sysctl -w kernel.hostname=XX 修改主机名
(3)修改/proc/sys目录中的文件,如: echo “379008 505344 758016” > /proc/sys/net/ipv4/tcp_mem
注:第二三种方式会使机器在重启之后就失效

一、内存参数列表 /proc/sys/vm/*

vm.admin_reserve_kbytes 给有cap_sys_admin权限的用户保留的内存数量(默认值是 min(free_page * 0.03, 8MB)) vm.block_dump 如果设置的是非零值,则会启用块I/O调试。
vm.compact_memory 进行内存压缩,只有在启用了CONFIG_COMPACTION选项才有效 1:开始进行内存压缩
vm.dirty_background_bytes 当脏页所占的内存数量超过dirty_background_bytes时,内核的flusher线程开始回写脏页。
vm.dirty_background_ratio 当脏页所占的百分比(相对于所有可用内存,即空闲内存页+可回收内存页)达到dirty_background_ratio时,write调用会唤醒内核的flusher线程开始回写脏页数据,直到脏页比例低于此值,与dirty_ratio不同,write调用此时并不会阻塞。
vm.dirty_bytes 当脏页所占的内存数量达到dirty_bytes时,执行磁盘写操作的进程自己开始回写脏数据。 注意:
dirty_bytes参数和
dirty_ratio参数是相对的,只能指定其中一个。当其中一个参数文件被写入时,会立即开始计算脏页限制,并且会将另一个参数的值清零
vm.dirty_expire_centisecs 脏数据的过期时间,超过该时间后内核的flusher线程被唤醒时会将脏数据回写到磁盘上,单位是百分之一秒。 vm.dirty_ratio 脏页所占的百分比(相对于所有可用内存,即空闲内存页+可回收内存页)达到dirty_ratio时,write调用会唤醒内核的flusher线程开始回写脏页数据,直到脏页比例低于此值,注意write调用此时会阻塞。
vm.dirty_writeback_centisecs 设置flusher内核线程唤醒的间隔,此线程用于将脏页回写到磁盘,单位是百分之一秒
vm.drop_caches 写入数值可以使内核释放page_cache,dentries和inodes缓存所占的内存。
1:只释放page_cache 2:只释放dentries和inodes缓存
3:释放page_cache、dentries和inodes缓存 vm.extfrag_threshold
vm.hugepages_treat_as_movable 用来控制是否可以从ZONE_MOVABLE内存域中分配大页面。如果设置为非零,大页面可以从ZONE_MOVABLE内存域分配。ZONE_MOVABLE内存域只有在指定了kernelcore启动参数的情况下才会创建,如果没有指定kernelcore启动参数,
hugepages_treat_as_movable参数则没有效果。
vm.hugetlb_shm_group 指定组ID,拥有该gid的用户可以使用大页创建SysV共享内存段
vm.laptop_mode 设置开启laptop mode,此模式主要是通过降低硬盘的转速来延长电池的续航时间。 0:关闭 1:启动
vm.legacy_va_layout 进程地址空间内存布局模式 0:经典布局 1:新布局 对于64位系统,默认采用经典布局
vm.lowmem_reserve_ratio 决定了内核保护这些低端内存域的强度。预留的内存值和lowmem_reserve_ratio数组中的值是倒数关系,如果值是256,则代表1/256,即为0.39%的zone内存大小。如果想要预留更多页,应该设更小一点的值。
vm.max_map_count 定义了一个进程能拥有的最多的内存区域
vm.memory_failure_early_kill 控制发生某个内核无法处理的内存错误发生的时候,如何去杀掉这个进程。当这些错误页有swap镜像的时候,内核会很好的处理这个错误,不会影响任何应用程序,但是如果没有的话,内核会把进程杀掉,避免内存错误的扩大
1:在发现内存错误的时候,就会把所有拥有此内存页的进程都杀掉 0:只是对这部分页进行unmap,然后把第一个试图进入这个页的进程杀掉
vm.memory_failure_recovery 是否开启内存错误恢复机制 1:开启 0:一旦出现内存错误,就panic
vm.min_free_kbytes 每个内存区保留的内存大小(以KB计算)
vm.min_slab_ratio 只在numa架构上使用,如果一个内存域中可以回收的slab页面所占的百分比(应该是相对于当前内存域的所有页面)超过min_slab_ratio,在回收区的slabs会被回收。这样可以确保即使在很少执行全局回收的NUMA系统中,slab的增长也是可控的。
vm.min_unmapped_ratio 只有在当前内存域中处于zone_reclaim_mode允许回收状态的内存页所占的百分比超过min_unmapped_ratio时,内存域才会执行回收操作。
vm.mmap_min_addr 指定用户进程通过mmap可使用的最小虚拟内存地址,以避免其在低地址空间产生映射导致安全问题;如果非0,则不允许mmap到NULL页,而此功能可在出现NULL指针时调试Kernel;mmap用于将文件映射至内存;
该设置意味着禁止用户进程访问low 4k地址空间
vm.nr_hugepages 大页的最小数目,需要连续的物理内存;oracle使用大页可以降低TLB的开销,节约内存和CPU资源,但要同时设置memlock且保证其大于大页;其与11gAMM不兼容
vm.nr_hugepages_mempolicy 与nr_hugepages类似,但只用于numa架构,配合numactl调整每个node的大页数量 vm.nr_overcommit_hugepages 保留于紧急使用的大页数,系统可分配最大大页数= nr_hugepages +
nr_overcommit_hugepages
vm.nr_pdflush_threads 只读文件,保存了当前正在运行的pdflush线程的数量
vm.numa_zonelist_order 设置内核选择zonelist的模式:
0:让内核智能选择使用Node或Zone方式的zonelist 1:选择Node方式的zonelist,Node(0)
ZONE_NORMAL -> Node(0) ZONE_DMA -> Node(1) ZONE_NORMAL
2:选择Zone方式的,Node(0) ZONE_NORMAL -> Node(1) ZONE_NORMAL -> Node(0)
ZONE_DMA
vm.oom_dump_tasks 如果启用,在内核执行OOM-killing时会打印系统内进程的信息(不包括内核线程),信息包括pid、uid、tgid、vm
size、rss、nr_ptes,swapents,oom_score_adj和进程名称。这些信息可以帮助找出为什么OOM
killer被执行,找到导致OOM的进程,以及了解为什么进程会被选中。 0:不打印系统内进程信息 1:打印系统内进程信息
vm.oom_kill_allocating_task 决定在oom的时候,oom killer杀哪些进程
非0:它会扫描进程队列,然后将可能导致内存溢出的进程杀掉,也就是占用内存最大的进程
0:它只杀掉导致oom的那个进程,避免了进程队列的扫描,但是释放的内存大小有限
vm.overcommit_kbytes 内存可过量分配的数量(单位为KB)
vm.overcommit_memory 是否允许内存的过量分配,允许进程分配比它实际使用的更多的内存。
0:当用户申请内存的时候,内核会去检查是否有这么大的内存空间,当超过地址空间会被拒绝 1:内核始终认为,有足够大的内存空间,直到它用完了位置
2:内核禁止任何形式的过量分配内存 Memory allocation limit = swapspace + physmem *
(overcommit_ratio / 100) vm.overcommit_ratio 内存可过量分配的百分比。
vm.page-cluster 参数控制一次写入或读出swap分区的页面数量。它是一个对数值,如果设置为0,表示1页;如果设置为1,表示2页;如果设置为2,则表示4页。
vm.panic_on_oom 用于控制如何处理out-of-memory,可选值包括0/1/2 0:当内存不足时内核调用OOM
killer杀死一些rogue进程,每个进程描述符都有一个oom_score标示,oom killer会选择oom_score较大的进程
1:发生了OOM以后,如果有mempolicy/cpusets的进程限制,而这些nodes导致了内存问题的时候,OOM
Killer会干掉这些中的一个,系统也会恢复 2:OOM后必然panic
vm.percpu_pagelist_fraction 每个CPU能从每个zone所能分配到的pages的最大值(单位每个zone的1/X),0为不限制
vm.stat_interval VM信息更新频率(以秒为单位)
vm.swappiness 该值越高则linux越倾向于将部分长期没有用到的页swap,即便有足够空余物理内存(1~100)
vm.user_reserve_kbytes vm.vfs_cache_pressure 表示内核回收用于directory和inode
cache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inode
cache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inode
cache;增加该值超过100,将导致内核倾向于回收directory和inode cache
vm.zone_reclaim_mode 参数只有在启用CONFIG_NUMA选项时才有效,zone_reclaim_mode用来控制在内存域OOM时,如何来回收内存。
0:禁止内存域回收,从其他zone分配内存 1:启用内存域回收 2:通过回写脏页回收内存 4:通过swap回收内存

二、内核参数列表 /proc/sys/kernel/*

kernel.acct acct功能用于系统记录进程信息,正常结束的进程都会在该文件尾添加对应的信息。异常结束是指重启或其它致命的系统问题,不能够记录永不停止的进程。该设置需要配置三个值,分别是:
1.如果文件系统可用空间低于这个百分比值,则停止记录进程信息。
2.如果文件系统可用空间高于这个百分比值,则开始记录进程信息。
3.检查上面两个值的频率(以秒为单位)。 kernel.auto_msgmni 系统自动设置同时运行的消息队列个数。 0:不自动 1:自动 kernel.blk_iopoll kernel.cad_pid 接收Ctrl-alt-del操作的INT信号的进程的PID
kernel.cap_last_cap 系统capabilities最高支持的权限等级。
详见:http://www.cnblogs.com/iamfy/archive/2012/09/20/2694977.html
kernel.compat-log
kernel.core_pattern 设置core文件保存位置或文件名,只有文件名时,则保存在应用程序运行的目录下
kernel.core_pipe_limit 定义了可以有多少个并发的崩溃程序可以通过管道模式传递给指定的core信息收集程序。如果超过了指定数,则后续的程序将不会处理,只在内核日志中做记录。0是个特殊的值,当设置为0时,不限制并行捕捉崩溃的进程,但不会等待用户程序搜集完毕方才回收/proc/pid目录(就是说,崩溃程序的相关信息可能随时被回收,搜集的信息可能不全)。
kernel.core_uses_pid Core文件的文件名是否添加应用程序pid做为扩展 0:不添加 1:添加
kernel.ctrl-alt-del 该值控制系统在接收到 ctrl+alt+delete 按键组合时如何反应:
1:不捕获ctrl-alt-del,将系统类似于直接关闭电源
0:捕获ctrl-alt-del,并将此信号传至cad_pid保存的PID号进程进行处理
kernel.dmesg_restrict 限制哪些用户可以查看syslog日志 0:不限制 1:只有特权用户能够查看
kernel.domainname 网络域名(重启失效)
kernel.ftrace_dump_on_oops 确定是否将ftrace的缓冲区的信息打印出来,是通过printk来打印的 0:不打印
1:在系统oops时,自动dump堆栈信息到输出终端 kernel.hostname 主机名(重启失效)
kernel.hotplug 该文件给出了当前系统支持热插拔(hotplug)时接收热插拔事件的程序的名字(包括路径)。
kernel.hung_task_check_count hung_task检查的进程数量最大值
hung_task用于检测一个进程是否在TASK_UNINTERRUPTIBLE状态过长,只有在等待IO的时候进程才会处于TASK_UNINTERRUPTIBLE状态,这个状态的进程内核不能够通过信号将其唤醒并杀死。
kernel.hung_task_panic 设置hung_task发生后是否引发panic 1:触发 0:不触发
kernel.hung_task_timeout_secs hung_task超时时间(以秒为单位),当一个进程在TASK_UNINTERRUPTIBLE状态超过这个时间后,会发生一个hung_task
linux会设置40%的可用内存用来做系统cache,当flush数据时这40%内存中的数据由于和IO同步问题导致超时。
kernel.hung_task_warnings 最大产生警告数量,当发生一次hung_task时会产生一次警告,但警告数量到达此值后之后的hung_task就不会发生警告
kernel.kexec_load_disabled 表示kexec_load系统调用是否被禁止,此系统调用用于kdump。当发生了一次kexec_load后,此值会自动设置为1。
0:开启kexec_load系统调用 1:禁止kexec_load系统调用 kernel.keys.gc_delay
kernel.keys.maxbytes kernel.keys.maxkeys
kernel.keys.persistent_keyring_expiry kernel.keys.root_maxbytes
kernel.keys.root_maxkeys
kernel.kptr_restrict 是否启用kptr_restrice,此功能为安全性功能,用于屏蔽内核指针。 0:该特性被完全禁止;
1:那些使用“%pk”打印出来的内核指针被隐藏(会以一长串0替换掉),除非用户有CAP_SYSLOG权限,并且没有改变他们的UID/GID(防止在撤销权限之前打开的文件泄露指针信息);
2:所有内核指使用“%pk”打印的都被隐藏。 kernel.max_lock_depth 触发死锁检查的嵌套深度值
kernel.modprobe 该文件给出了当系统支持module时完成modprobe功能的程序的名字(包括路径)。
kernel.modules_disabled 表示是否禁止内核运行时可加载模块 0:不禁止 1:禁止
kernel.msgmax 消息队列中单个消息的最大字节数
kernel.msgmnb 单个消息队列中允许的最大字节长度(限制单个消息队列中所有消息包含的字节数之和)
kernel.msgmni 系统中同时运行的消息队列的个数 kernel.ngroups_max 每个用户最大的组数
kernel.nmi_watchdog 使能nmi_watchdog 0:禁止 1:开启
kernel.numa_balancing 是否开启numa_balancing?这块具体看代码
kernel.numa_balancing_scan_delay_ms 单个进程每次进行numa_balancing扫描的间隔时间
kernel.numa_balancing_scan_period_max_ms 每次扫描最多花费的时间?
kernel.numa_balancing_scan_period_min_ms 每次扫描最少花费的时间?
kernel.numa_balancing_scan_size_mb 一次扫描进程多少MB的虚拟地址空间内存
kernel.numa_balancing_settle_count
kernel.osrelease 内核版本(例:3.10.0-229.7.2.rs1.2.ppc64)
kernel.ostype 操作系统的类型(例:Linux)
kernel.overflowgid Linux的GID为32位,但有些文件系统只支持16位的GID,此时若进行写操作会出错;当GID超过65535时会自动被转换为一个固定值,这个固定值保存在这个文件中
kernel.overflowuid Linux的UID为32位,但有些文件系统只支持16位的UID,此时若进行写操作会出错;当UID超过65535时会自动被转换为一个固定值,这个固定值保存在这个文件中
kernel.panic 系统发生panic时内核重新引导之前的等待时间 0:禁止重新引导 >0:重新引导前的等待时间(秒)
kernel.panic_on_oops 当系统发生oops或BUG时,所采取的措施 0:继续运行
1:让klog记录oops的输出,然后panic,若kernel.panic不为0,则等待后重新引导内核
kernel.panic_on_warn 0:只警告,不发生panic 1:发生panic
kernel.perf_cpu_time_max_percent perf分析工具最大能够占用CPU性能的百分比 0:不限制
1~100:百分比值
kernel.perf_event_max_sample_rate 设置perf_event的最大取样速率,默认值为100000
kernel.perf_event_mlock_kb 设置非特权用户能够允许常驻内存的内存大小。默认为516(KB)
kernel.perf_event_paranoid 用于限制访问性能计数器的权限 0:仅允许访问用户空间的性能计数器
1:内核与用户空间的性能计数器都可以访问 2:仅允许访问特殊的CPU数据(不包括跟踪点)
-1:不限制 kernel.pid_max 进程pid号的最大值 kernel.poweroff_cmd 执行关机命令的进程(包括路径) kernel.powersave-nap PPC专用,如果开启,则使用nap节能模式,关闭则使用doze节能模式 0:关闭 1:开启
kernel.print-fatal-signals
kernel.printk 该文件有四个数字值,它们根据日志记录消息的重要性,定义将其发送到何处。按顺序是:
1.控制台日志级别:优先级高于该值的消息将被打印至控制台
2.默认的消息日志级别:将用该优先级来打印没有优先级的消息
3.最低的控制台日志级别:控制台日志级别可被设置的最小值(最高优先级)
4.默认的控制台日志级别:控制台日志级别的缺省值 数值越小,优先级越高,级别有(0~7) kernel.printk_delay printk 消息之间的延迟毫秒数,此值不可设置
kernel.printk_ratelimit 等待允许再次printk的时间(以秒为单位),与printk_ratelimit()函数有关
详见&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值