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内核参数的调整,往往是调整与系统运行最相关的部分。
相关推荐
明明跟你说过24 分钟前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump
Komorebi.py1 小时前
【Linux】-学习笔记05
linux·笔记·学习
Mr_Xuhhh2 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
内核程序员kevin5 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
朝九晚五ฺ9 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
自由的dream9 小时前
Linux的桌面
linux
xiaozhiwise10 小时前
Makefile 之 自动化变量
linux
Kkooe10 小时前
GitLab|数据迁移
运维·服务器·git
久醉不在酒11 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql