Linux篇之OS层内核参数的调优

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内核参数的调整,往往是调整与系统运行最相关的部分。
相关推荐
特立独行的猫a2 分钟前
redis客户端库redis++在嵌入式Linux下的交叉编译及使用
linux·数据库·c++·redis·redis客户端库
无敌小茶28 分钟前
Linux学习笔记之环境变量
linux·笔记
Harbor Lau41 分钟前
Linux常用中间件命令大全
linux·运维·中间件
漫谈网络1 小时前
基于 Netmiko 的网络设备自动化操作
运维·自动化·netdevops·netmiko
꧁坚持很酷꧂1 小时前
Linux Ubuntu18.04下安装Qt Craeator 5.12.9(图文详解)
linux·运维·qt
凉、介2 小时前
PCI 总线学习笔记(五)
android·linux·笔记·学习·pcie·pci
电鱼智能的电小鱼2 小时前
EFISH-SBC-RK3588无人机地面基准站项目
linux·网络·嵌入式硬件·机器人·无人机·边缘计算
电鱼智能的电小鱼2 小时前
基于 EFISH-SBC-RK3588 的无人机环境感知与数据采集方案
linux·网络·嵌入式硬件·数码相机·无人机·边缘计算
小诸葛的博客3 小时前
详解Linux中的定时任务管理工具crond
linux·运维·chrome
一默19913 小时前
CentOS 7.9升级OpenSSH到9.9p2
linux·运维·centos