Linux内核参数调优
Linux 内核参数的调优和分类是一个复杂的主题,这涉及到系统性能、稳定性和安全性等多个方面。
内核参数主要可以分为以下几类:
1. 内核参数的分类
1.1 系统性能参数
这些参数影响系统的整体性能,包括 CPU 调度、内存管理和文件系统性能。
- vm.swappiness: 决定内核在使用交换空间时的倾向性。值范围从 0 到 100,0 表示只在物理内存用尽时使用交换空间,100表示尽可能多地使用交换空间。
- vm.dirty_ratio: 设置文件系统在内存中缓存脏数据的最大比例(以百分比表示),超过该比例时将启动数据写入磁盘的过程。
- fs.file-max: 系统允许的最大文件描述符数量。
1.2 网络参数
这些参数控制网络协议栈的行为,如 TCP/IP 设置、连接限制等。
- net.ipv4.ip_forward: 控制系统是否允许 IP 数据包转发。设置为 1 表示启用 IP 转发,0 表示禁用。
- net.core.somaxconn: 设置系统可以接受的最大连接数,控制待处理的 TCP 连接队列的大小。
- net.ipv4.tcp_keepalive_time: 设置 TCP 连接保持活动的时间间隔。
1.3 安全性参数
这些参数影响系统的安全性,包括访问控制 和资源限制。
- kernel.randomize_va_space: 控制地址空间布局随机化(ASLR)的程度。值为 0(关闭)、1(启用部分随机化)或 2(启用完全随机化)。
- fs.suid_dumpable: 控制是否允许以 SUID 权限运行的程序生成 core dump 文件。值为 0(禁用)、1(启用)或 2(仅 root 用户允许)。
1.4 内存管理参数
这些参数用于控制内存分配和使用策略。
- vm.overcommit_memory: 决定内存超额分配策略。值为 0(启用标准的内存分配策略)、1(总是允许超额分配)或 2(禁止超额分配)。
- vm.max_map_count: 设置每个进程允许的最大内存映射区域数。
1.5 文件系统参数
这些参数影响文件系统的行为和性能。
- fs.inotify.max_user_watches: 设置 inotify 监视器的最大数量,适用于监视大量文件的场景。
- fs.sync: 控制文件系统同步操作的行为。
1.6. 用户进程资源限制参数
一、参数分类如下:
1. 文件描述符限制 (nofile)
用途:限制一个进程可以打开的最大文件描述符数量。
命令查看当前限制:
ulimit -n
优化方法:
提高文件描述符的限制,适用于需要同时处理大量文件或网络连接的应用。
临时调整:
ulimit -n <new_limit>
永久调整:
编辑 /etc/security/limits.conf 文件并添加:
* soft nofile 65536
* hard nofile 65536
2. 进程数限制 (nproc)
用途:限制每个用户可以创建的最大进程数。
命令查看当前限制:
ulimit -u
优化方法:
增加进程数限制,适用于需要启动大量进程的应用(如高并发服务)。
临时调整:
ulimit -u <new_limit>
永久调整:
编辑 /etc/security/limits.conf 文件并添加:
* soft nproc 65536
* hard nproc 65536
3. 虚拟内存限制 (as)
用途:限制进程可以使用的最大虚拟内存量。
命令查看当前限制:
ulimit -v
优化方法:
增加虚拟内存限制,适用于内存密集型应用。
临时调整:
ulimit -v <new_limit>
4. 核心文件大小限制 (core)
用途:限制进程生成的 core dump 文件的最大大小。
命令查看当前限制:
ulimit -c
优化方法:
启用 core dump 文件生成以便调试程序崩溃问题。
临时调整:
ulimit -c unlimited
二、配置文件调整
要永久调整 ulimit 设置,需要修改系统配置文件:
/etc/security/limits.conf
设置软限制和硬限制:
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
/etc/pam.d/common-session 和 /etc/pam.d/common-session-noninteractive
确保 PAM 模块加载 limits.conf 配置:
session required pam_limits.so
系统级限制
修改 /etc/sysctl.conf 来调整系统级别的限制,如文件句柄数(如果相关):
fs.file-max = 65536
2. 调优策略
调优内核参数通常需要根据系统的实际工作负载、硬件配置以及业务需求来进行。
以下是一些通用的调优策略:
确定需求:了解系统的工作负载和瓶颈,例如网络流量、文件访问模式、内存使用情况等。
测试和监控:在调整参数之前,使用性能监控工具(如 top、vmstat、iostat、netstat 等)来收集系统性能数据。
调整参数 :基于需求和监控数据进行调整。可以通过 /etc/sysctl.conf 文件或 sysctl 命令来临时或永久修改内核参数。
例如:
sysctl -w net.ipv4.ip_forward=1
或编辑 /etc/sysctl.conf 文件并添加:
net.ipv4.ip_forward = 1
应用修改:对于通过 sysctl 命令修改的参数,可以使用以下命令使其生效:
sysctl -p
监控效果:调整参数后,继续监控系统的性能,确保调整带来了预期的改进。
3. 内核参数的用途示例
- vm.swappiness: 调整此参数可以优化系统在内存压力下的行为,减少或增加交换空间的使用,以提高性能。
- net.core.somaxconn: 在高负载的网络服务器上,增加此值可以提高系统接受的连接数,从而提升服务能力。
- kernel.randomize_va_space: 启用地址空间布局随机化(ASLR)可以提高系统的安全性,减少潜在的安全漏洞风险。
调优内核参数是一项涉及系统调试和优化的高级操作,建议在有经验的系统管理员或运维人员的指导下进行,以避免对系统稳定性和性能造成负面影响。
4、优化思路
- 一般优化的调整的方向都是与磁盘文件IO、网络通信、内存管理、线程数量有关。
- 中间件系统需要开启大量的线程(跟vm.max_map_count有关)
- 进行大量的网络通信和磁盘IO(跟ulimit有关)
- 大量使用内存(vm.swappiness和vm.overcommit_memory有关)
所以对于OS内核参数的调整,往往是调整与系统运行最相关的部分。