当前位置: 首页 > news >正文

Linux内核调优实战指南

内核调优通常通过修改内核运行时参数来实现,这些参数的配置文件是 Linux 系统中核心的性能调整点。

内核调优配置文件名称

  1. /etc/sysctl.conf: 这是最传统和主要的内核参数配置文件。系统启动时或手动执行 sysctl -p 命令时会读取并应用其中的设置。
  2. /etc/sysctl.d/*.conf: 这是一个现代的、推荐使用的目录。你可以将不同的调优需求(如网络优化、内存优化)放在单独的 .conf 文件中(例如 99-net-tuning.conf, 99-memory.conf)。这样做的好处是:
    • 模块化: 易于管理和维护不同方面的配置。
    • 避免冲突: 升级系统或软件包时,它们通常会将配置放到 /usr/lib/sysctl.d//run/sysctl.d/,而用户的自定义配置放在 /etc/sysctl.d/ 可以覆盖它们,且不会被升级覆盖掉。
    • 加载顺序: 系统会按字母顺序加载 /etc/sysctl.d//run/sysctl.d//usr/lib/sysctl.d/ 目录下的 .conf 文件,后加载的文件中的参数值会覆盖先加载文件中相同参数的值(因此通常用户自定义文件以 99- 开头确保最后加载)。

如何生效?

  • 修改上述文件后,需要执行以下命令之一使配置生效(无需重启):
    • sysctl -p: 重新加载 /etc/sysctl.conf
    • sysctl -p /etc/sysctl.d/99-my-tuning.conf: 重新加载特定文件。
    • sysctl --system: 重新加载所有配置文件(包括 /etc/sysctl.conf/etc/sysctl.d/*.conf 等)。这是推荐的做法
  • 如果想临时测试参数效果(重启失效),可以直接使用 sysctl -w parameter=value 命令。

常见需要优化的内核参数举例

内核需要优化的参数非常多且高度依赖于具体应用场景(Web服务器、数据库、文件服务器、高并发负载、虚拟化等)。以下是一些非常常见且普遍适用的参数类别和具体例子:

1. 网络性能相关

  • net.core.somaxconn:
    • 作用: 定义系统中每个监听套接字(socket)的最大连接请求队列长度。当服务器瞬间收到大量连接请求时,超过 somaxconn 的请求会被丢弃或忽略。
    • 优化场景: 高并发服务器(Web Server如 Nginx/Apache,数据库等)。默认值通常较低(128 或 1024),对于高并发可能需要提高到 4096 或 8192,甚至更高。
    • 注意: 应用层(如 Nginx 的 listen backlog 参数)也需要相应调整,不能超过内核的这个值。
  • net.ipv4.tcp_max_syn_backlog:
    • 作用: 定义系统中尚未收到客户端最终 ACK 的 SYN 半连接请求的最大队列长度。
    • 优化场景: 防御 SYN Flood 攻击或应对瞬间高 SYN 连接请求。通常需要配合 net.core.somaxconn 调整,建议等于或略大于 somaxconn
  • net.ipv4.tcp_tw_reuse (TIME_WAIT 优化):
    • 作用: 允许内核将处于 TIME_WAIT 状态的套接字重新用于新的 OUTGOING (出站) TCP 连接。默认通常是 0 (禁用)。
    • 优化场景: 服务器需要频繁主动向外部建立大量短连接(例如作为客户端连接后端服务、爬虫等),导致本地端口耗尽(大量 TIME_WAIT 状态)。设置为 1 可以缓解端口压力。注意:主要用于解决主动关闭连接方的问题
  • net.ipv4.tcp_tw_recycle (TIME_WAIT 优化 - 谨慎使用!):
    • 作用: 启用对 TIME_WAIT 套接字的快速回收
    • 风险: 在 NAT 网络环境下极易导致连接问题(如移动客户端通过 NAT 网关访问服务器)。在 Linux 4.10+ 内核中已被移除,现代内核不再建议也不应使用此参数。 优先考虑 tcp_tw_reuse 和增加端口范围。
  • net.ipv4.ip_local_port_range:
    • 作用: 定义本地(作为客户端发起连接时)使用的 TCP/UDP 端口号范围
    • 优化场景: 服务器需要作为客户端发起大量连接时(如代理服务器、微服务调用),默认范围(32768-60999)可能不够用,可以扩大(例如 1024 65000)。注意不要和知名端口(<1024)冲突。
  • net.ipv4.tcp_fin_timeout:
    • 作用: 控制套接字保持在 FIN_WAIT_2 状态的最长时间(秒)。默认通常是 60 秒。
    • 优化场景: 可以适当降低(如 30 秒)以更快释放资源,特别是在连接非常频繁的情况下。但降低过多可能导致连接异常终止。
  • net.core.netdev_max_backlog:
    • 作用: 定义当内核处理网络包的速度跟不上网卡接收速度时,每个网络接口接收队列的最大包数
    • 优化场景: 在网络流量非常大的服务器上,增加此值(如 10000)可以减少因接收队列满而导致的丢包。需要结合 net.core.somaxconn 考虑。

2. 虚拟内存管理相关

  • vm.swappiness:
    • 作用: 控制内核将内存页交换(swap)到磁盘的积极程度。值范围 0-100。值越高,内核越积极地使用交换空间;值越低,内核尽量避免交换,更倾向于回收文件系统缓存(page cache)。默认值通常是 60。
    • 优化场景
      • 数据库服务器/内存密集型应用: 通常建议设置为较低值(如 10 甚至 1 或 0),以尽量减少对性能影响巨大的磁盘交换,优先释放文件缓存。
      • 内存充足但希望更多内存用于缓存: 降低 swappiness
      • 内存不足且希望避免 OOM Killer频繁触发: 可适当提高(但这是治标不治本,加内存才是根本)。
    • 注意: 设置为 0 并不代表完全禁止交换,极端内存压力下还是会发生的。
  • vm.vfs_cache_pressure:
    • 作用: 控制内核回收用于 目录项(dentry) 和 inode 对象缓存积极程度。默认值通常是 100。值越高,回收越积极(释放越快);值越低,回收越保守(保留缓存更久)。
    • 优化场景: 对于文件密集型应用(如文件服务器、Web 静态资源服务器),如果发现 dentryinode 缓存频繁被回收导致文件访问变慢,可以尝试适当降低此值(如 50)。

3. 文件系统相关

  • vm.dirty_background_ratio / vm.dirty_background_bytes:
    • 作用: 当系统中脏页(被修改过但尚未写入磁盘的内存页)占总内存的百分比 (dirty_background_ratio) 或达到指定字节数 (dirty_background_bytes) 时,系统在后台开始写回脏页。
    • 优化场景: 控制后台刷盘的阈值。降低此值(如设为 5 或 10)可以让后台刷盘更早开始,避免脏页累积过多导致后续同步刷盘阻塞应用。...bytes 优先级高于 ...ratio
  • vm.dirty_ratio / vm.dirty_bytes:
    • 作用: 当脏页占总内存的百分比 (dirty_ratio) 或达到指定字节数 (dirty_bytes) 时,生成脏页的应用程序会被阻塞(同步地),直到脏页被写入磁盘一部分为止。
    • 优化场景: 控制应用被阻塞的阈值。增大此值(如 30 或 40)可以减少写入密集型应用(如数据库事务日志写入)被阻塞的频率,提高吞吐,但风险是系统崩溃时丢失的数据增多。...bytes 优先级高于 ...ratio
  • vm.dirty_expire_centisecs:
    • 作用: 定义脏页在内存中可停留的最长时间(以百分之一秒计),超过时间的脏页会被周期性刷盘线程写回磁盘。
    • 优化场景: 控制脏页存活时间。减少此值(如设为 500,即 5 秒)可以减少崩溃时潜在的数据丢失量;增大此值(如 3000,即 30 秒)可能合并更多写操作,减少磁盘I/O次数(适合对数据一致性要求不那么极端实时、且写入非常零碎的场景)。
  • fs.file-max / fs.nr_open:
    • fs.file-max: 系统级别允许打开的文件描述符最大总数。
    • fs.nr_open: 单个进程允许打开的文件描述符最大数。
    • 优化场景: 需要处理大量并发连接或打开大量文件的服务器(数据库、Web服务器、代理服务器)。需要将此值调大(例如设置为几十万甚至上百万),并且同时需要调整用户进程的 ulimit (nofile) 限制

重要提示

  1. 没有万能配置: 最佳配置极其依赖你的具体硬件、工作负载(是 CPU 密集型、内存密集型、网络 I/O 密集型还是磁盘 I/O 密集型?)、应用类型(数据库、Web 服务器、文件服务器、虚拟化宿主机?)。
  2. 循序渐进: 不要一次性修改大量参数。理解每个参数的作用,一次修改一两个,并密切监控系统性能指标(使用 top, vmstat, iostat, netstat, ss, sar, dstat 等工具)和应用表现。
  3. 基准测试: 在应用重要变更前后进行基准测试,量化调整的效果。
  4. 备份: 修改关键配置文件前进行备份。
  5. 默认值: 大多数参数的默认值对于通用场景是合理的。优化通常是为了解决特定负载下的瓶颈。
  6. 文档: 参考内核文档 (/usr/share/doc/kernel-doc-<version>/Documentation/sysctl/ 或在线资源) 了解每个参数的详细描述。
  7. 发行版差异: 不同 Linux 发行版及其不同版本的默认参数值可能有差异。
  8. 监控与验证: 使用 sysctl -a | grep parameter_namecat /proc/sys/path/to/parameter 查看参数的当前运行值。

总结来说,内核调优的核心在于理解 /etc/sysctl.conf/etc/sysctl.d/ 目录下的 .conf 文件的作用,并且根据你的服务器承担的角色(Web服务器、数据库、文件服务器等),有针对性地调整如网络连接数参数 (somaxconn, tcp_max_syn_backlog)、TCP 连接复用参数 (tcp_tw_reuse)、内存交换倾向 (vm.swappiness)、脏页刷盘策略 (dirty_ratio, dirty_background_ratio) 以及文件描述符限制 (file-max) 等关键参数。务必在调整前后进行性能监控和测试。


文章转载自:

http://L0CYElMX.rqhdt.cn
http://PxUQhKh6.rqhdt.cn
http://jH0vmpYf.rqhdt.cn
http://urCfojMB.rqhdt.cn
http://PGPtqujk.rqhdt.cn
http://P4kB5IF9.rqhdt.cn
http://cUbmnclA.rqhdt.cn
http://1fYeRntH.rqhdt.cn
http://sO8zYlVw.rqhdt.cn
http://88poWlSz.rqhdt.cn
http://BdHgyAEP.rqhdt.cn
http://Bq3TWwRH.rqhdt.cn
http://1xciJrU7.rqhdt.cn
http://O0W7zZtO.rqhdt.cn
http://cm05whlT.rqhdt.cn
http://D3zJlMtc.rqhdt.cn
http://KSRxvJir.rqhdt.cn
http://SPl3KGkQ.rqhdt.cn
http://vew9P3j3.rqhdt.cn
http://Rs01CRtD.rqhdt.cn
http://03Hg96YZ.rqhdt.cn
http://6kRclVoe.rqhdt.cn
http://lGrrt4RU.rqhdt.cn
http://W4arsDLf.rqhdt.cn
http://GNaFV7SC.rqhdt.cn
http://1o1Dw4mh.rqhdt.cn
http://8rOfPvSZ.rqhdt.cn
http://2rZ9TZrL.rqhdt.cn
http://P9McEQyF.rqhdt.cn
http://0fNbkrzj.rqhdt.cn
http://www.dtcms.com/a/381612.html

相关文章:

  • Debezium日常分享系列之:深入解析SQL Server事务日志
  • PostgreSQL——并行查询
  • CTFHub SSRF通关笔记10:DNS重绑定 Bypass 原理详解与渗透实战
  • Nginx 优化与防盗链实践
  • Altium Designer(AD)PCB丝印批量修改
  • MySQL在Centos 7环境下安装
  • MLLM学习~M3-Agent Prompt学习
  • ARM 架构的存储器模型
  • MongoDB C# .NetCore 驱动程序 序列化忽略属性
  • 【个人项目】【前端实用工具】OpenAPI到TypeScript转换工具 - 技术指南
  • 简单了解一下GraphRAG
  • 系统架构设计师——【2024年上半年案例题】真题模拟与解析(一)
  • LINUX中USB驱动架构—USB驱动程序框架
  • 【Web】ImaginaryCTF 2025 wp
  • [Windows] (思源笔记首发ai辅助工具)叶归 AI 辅助精美笔记工具
  • 多线程详解
  • ArcGIS(Pro)在线地图服务被禁?提示感叹号?应急方案来了——重新正常显示
  • 《PyTorch 携手 Unity:基于云原生架构化解 AI 游戏系统显存危机》
  • pytorch基本运算-Python控制流梯度运算
  • 编程与数学 03-005 计算机图形学 17_虚拟现实与增强现实技术
  • 计算机网络(一)基础概念
  • [Windows] 搜索文本2.6.2(从word、wps、excel、pdf和txt文件中查找文本的工具)
  • 【iOS】设计模式复习
  • RNN,GRU和LSTM的简单实现
  • 无人机如何实现图传:从原理到实战的全景解读
  • 多旋翼无人机开发方案
  • 基于MATLAB的无人机三维路径规划与避障算法实现
  • Web基础学习笔记02
  • Spring Boot 项目启动报错:MongoSocketOpenException 连接被拒绝排查日记
  • OpenCV(cv2)学习笔记:从模板匹配入门到常用函数