《Linux从小白到高手》综合应用篇:深入理解Linux常用关键内核参数及其调优

1. 题记

有关Linux关键内核参数的调整,我前面的调优文章其实就有涉及到,只是比较零散,本篇集中深入介绍Linux常用关键内核参数及其调优,Linux调优80%以上都涉及到内核的这些参数的调整。
在这里插入图片描述

2. 文件系统相关参数

  1. fs.file-max
    参数说明::控制系统中打开文件描述符的数量上限。
    默认值:通常为65535。
    优化建议:对于高负载服务器,可以增加此限制,以防止文件句柄耗尽的问题。例如,可以设置为6553560。
    设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。
  2. fs.nr_open
    参数说明::定义了每个进程可以打开的文件描述符的最大数量。
    优化建议:可以根据具体需求进行调整,尤其是对于需要打开大量文件的应用程序。例如,可以设置为1048576。
    设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。
  3. 优化建议:
    根据系统的负载和应用需求,适当增加这2个参数的值。对于高并发的服务器应用,可能需要将其设置为一个较大的数值,以避免出现 “Too many open files” 错误。
    可以通过编辑 /etc/sysctl.conf 文件来修改这个参数,例如:fs.file-max = 655360。修改后需要执行 sysctl -p 命令使更改生效。

3. 内存管理参数

  1. 物理内存大小
    查看:通过/proc/meminfo文件查看系统的总内存和可用内存。
    设置:使用sysctl命令设置物理内存大小(实际上,直接设置物理内存大小通常不是由用户进行的,这里主要是为了展示如何使用sysctl命令设置参数)。例如,要将物理内存大小相关的某个参数(注意,并非直接设置物理内存总量)进行调整,可以使用类似sudo sysctl -w vm.some_memory_parameter=value的命令(这里的vm.some_memory_parameter和value需要替换为实际的参数名和值)。
  2. 虚拟内存大小(swappiness)
    查看:通过/proc/sys/vm/swappiness文件查看系统的交换分区比例。
    优化建议:降低vm.swappiness值可以减少系统对交换分区的使用,提升性能。对于需要高性能的应用服务器,可以设置为10或更低。
    例如:sudo sysctl -w vm.swappiness=10(或修改/etc/sysctl.conf文件并重启系统以永久生效)。
  3. 内存缓存(cache)大小
    调整:虽然不能直接设置内存缓存的具体大小,但可以通过调整相关参数来影响缓存的行为。例如,vm.vfs_cache_pressure参数可以控制内核回收inode和dentry缓存的倾向。
    优化建议:对于需要频繁访问文件系统的应用,可以适当降低vm.vfs_cache_pressure的值以减少缓存回收。

4. 进程管理参数

  1. 最大进程数
    查看:通过/proc/sys/kernel/pid_max文件查看系统的进程最大数量。
    设置:使用sysctl命令设置最大进程数。
    优化建议:对于需要启动大量进程的服务器,可以增加此值。
    例:sudo sysctl -w kernel.pid_max=100000(或修改/etc/sysctl.conf文件并重启系统以永久生效)。
  2. 文件描述符限制
    查看:通过/proc/sys/fs/file-max文件查看系统的文件描述符最大数量。
    设置:使用sysctl命令或ulimit命令设置文件描述符限制。
    优化建议:增加文件描述符限制有助于服务器在高并发连接情况下保持稳定。
    例:sudo sysctl -w fs.file-max=1000000(或修改/etc/sysctl.conf文件并重启系统以永久生效),或使用ulimit -n 65536临时设置当前会话的文件描述符限制。
  3. kernel.pid_max
    参数说明:控制系统中可以同时存在的进程数量的上限。
    默认值:32768。
    优化建议:对于需要启动大量进程的系统中,可以增加此值。例如,可以设置为4194303。
    设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。
  4. kernel.threads-max
    参数说明:定义了系统中进程数量(包括线程)的最大值。
    优化建议:对于多线程应用程序,适当增加此值以支持更多的线程。例如,可以设置为2097152。
    设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。

5. 内存管理参数

  1. vm.swappiness
    参数说明:
    这个参数控制内核将内存页换出到交换分区的倾向程度。取值范围从 0 到 100,值越低表示内核越倾向于保留内存中的页,而不是将其换出到交换分区。
    优化建议:
    对于具有足够物理内存的服务器,通常可以将这个参数设置为一个较低的值,如 vm.swappiness = 10。这样可以减少对交换分区的使用,提高系统性能。
  2. vm.overcommit_memory
    参数说明:
    控制内存分配的策略。有三个取值:0(默认)表示内核在分配内存时进行谨慎的检查,确保不会过度分配导致系统内存不足;1 表示内核允许过度分配内存;2 表示内核严格按照系统的交换空间大小来限制内存分配。
    优化建议:
    对于某些需要大量内存分配的应用,可以考虑将这个参数设置为 1,以允许内核过度分配内存。但这也可能导致系统在内存不足时出现不稳定的情况,需要谨慎使用。在 /etc/sysctl.conf 中添加:vm.overcommit_memory = 1。
  3. vm.max_map_count
    参数说明:控制单个进程可以拥有的内存映射区域的最大数量。
    默认值:65536。
    优化建议:增加此值可以允许更多的内存映射,适用于需要大量内存映射的应用。例如,可以设置为262144。
    设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。
  4. vm.swappiness
    参数说明:控制系统使用交换空间的倾向。值越高,系统越倾向于使用交换空间。
    默认值:60。
    优化建议:对于需要高性能的应用服务器,可以设置为10或更低,以减少交换的频率,提升系统性能。
    设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。
  5. vm.dirty_ratio和vm.dirty_background_ratio
    参数说明:这两个参数控制内核回写脏(已修改但尚未写入磁盘)页的阈值。
    优化建议:适当调整这两个参数可以优化磁盘I/O性能。例如,可以将vm.dirty_ratio设置为15,将vm.dirty_background_ratio设置为5。
    设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。

6. 网络相关参数

  1. net.ipv4.tcp_max_tw_buckets
    参数说明:控制系统中TIME_WAIT套接字的最大数量。
    优化建议:增加该值可以减少TIME_WAIT套接字的数量,适用于高并发的服务器。例如,可以设置为5000。
    设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。
  2. net.ipv4.tcp_tw_reuse和net.ipv4.tcp_tw_recycle
    参数说明:这两个参数控制TCP TIME-WAIT快速重用。
    优化建议:开启这些参数可以允许快速重用TIME_WAIT状态的连接,提高连接重用率。
    设置方法:使用sysctl命令或修改/etc/sysctl.conf文件,将值设置为1。
  3. net.ipv4.tcp_fin_timeout和net.ipv4.tcp_keepalive_time
    参数说明:分别控制TCP连接的关闭时限和空闲超时时间。
    优化建议:适当减少这些时间可以加快资源的回收。例如,可以将tcp_fin_timeout设置为10,将tcp_keepalive_time设置为150。
    设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。
  4. net.ipv4.ip_local_port_range
    参数说明:定义UDP和TCP连接的本地端口的取值范围。
    优化建议:扩大端口范围以支持更多的并发连接。例如,可以设置为“1024 65000”。
    设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。
  5. tcp_tw_reuse 和 tcp_tw_recycle
    参数说明:
    tcp_tw_reuse 允许将 TIME_WAIT 状态的套接字重新用于新的连接。
    tcp_tw_recycle 快速回收 TIME_WAIT 状态的连接。
    优化建议:
    在高并发的服务器环境中,可以考虑启用这两个参数以提高 TCP 连接的复用率,减少 TIME_WAIT 状态的连接数量。但在某些网络环境下,启用 tcp_tw_recycle 可能会导致连接问题,因此需要谨慎使用。
    在 /etc/sysctl.conf 中添加:net.ipv4.tcp_tw_reuse = 1 和 net.ipv4.tcp_tw_recycle = 1。
  6. tcp_max_syn_backlog
    参数说明:
    定义了 TCP 连接请求队列的最大长度。当服务器收到大量的连接请求时,这些请求会在队列中等待被处理。
    优化建议:
    如果服务器面临大量的并发连接请求,可以适当增加这个参数的值。例如,对于高并发的 Web 服务器,可以将其设置为一个较大的数值,如 tcp_max_syn_backlog = 8192。

7. 磁盘 I/O 参数

  1. vm.dirty_background_ratio 和 vm.dirty_ratio
    参数说明:
    vm.dirty_background_ratio 定义了系统内存中可以被内核的后台进程异步写入磁盘的脏页比例。
    vm.dirty_ratio 定义了系统内存中可以被进程主动写入磁盘的脏页比例。
    优化建议:
    根据系统的磁盘写入性能和内存大小,调整这两个参数的值。如果系统的磁盘写入速度较快,可以适当增加这两个参数的值,以减少磁盘写入的频率,提高系统性能。例如,vm.dirty_background_ratio = 5 和 vm.dirty_ratio = 10。
  2. elevator
    参数说明:
    这个参数指定了磁盘 I/O 调度算法。常见的调度算法有 CFQ(完全公平队列)、Deadline(截止时间调度)和 NOOP(简单调度)。
    优化建议:
    不同的调度算法适用于不同的工作负载。例如,对于数据库服务器等对 I/O 响应时间要求较高的应用,可以考虑使用 Deadline 调度算法。可以通过在 /etc/grub.conf 文件中添加 elevator=deadline 来更改调度算法。

8. 其他参数

  1. kernel.msgmnb、kernel.msgmax和kernel.msgmni
    参数说明:分别控制消息队列的最大长度、单个消息的最大长度和系统中同时运行的消息队列的个数。
    优化建议:根据具体需求调整这些参数,以优化消息队列的性能。
    设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。
  2. kernel.shmmax和kernel.shmall
    参数说明:分别控制单个共享内存段的最大值和系统上可以使用的共享内存的总量。
    优化建议:在需要大量共享内存的应用中,如数据库服务器,适当增加这些值。
    设置方法:使用sysctl命令或修改/etc/sysctl.conf文件。

注:Linux内核参数有很多,以上介绍的是常用而且关键的。
本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel 对数据进行脱敏

身份证号脱敏:LEFT(A2,6)&REPT("*",6)&RIGHT(A2,6) 手机号脱敏:LEFT(B2,3)&REPT("*",5)&RIGHT(B2,3) 姓名脱敏:LEFT(C2,1)&REPT("*",1)&RIGHT(C2,1) 参考: excel匹配替换…

STM32F103C8T6 IO 操作

1.开启相关时钟 在 STM32 微控制器中,开启 GPIO 端口的时钟是确保 IO 口可以正常工作的第一步。 查找 RCC 寄存器使能时钟 在 STM32 中,时钟控制的寄存器通常位于 RCC (Reset and Clock Control) 模块中。不同的 STM32 系列(如 STM32F1、STM…

【Flutter】Dart:异步

在现代应用开发中,异步编程是不可或缺的部分,尤其是在开发用户界面、网络请求、文件操作等涉及长时间执行的操作时,异步能避免阻塞主线程,从而提升应用的响应速度和用户体验。在 Dart 中,异步编程主要依靠 Future 和 S…

【单元测试】深入解剖单元测试的思维逻辑

目录 一、前言二、准备环境三、 常用的mock语句3.1 模拟指定类的对象实例,用于模拟依赖对象(类成员)3.2 定义被测试对象3.3 模拟枚举类型/静态方法3.4 模拟依赖方法3.5 模拟构造方法3.6 验证方法调用次数3.7 验证返回值3.8 验证异常对象 四、…

10. 异常处理器

一、通过 注解 注册异常处理器 <?php namespace App\Exception\Handler;use App\Exception\FooException; use Hyperf\ExceptionHandler\ExceptionHandler; use Hyperf\HttpMessage\Stream\SwooleStream; use Swow\Psr7\Message\ResponsePlusInterface; use Throwable;use…

第十六周:机器学习笔记

第十六周周报 摘要Abstratc一、机器学习1. Pointer Network&#xff08;指针网络&#xff09;2. 生成式对抗网络&#xff08;Generative Adversarial Networks | GAN&#xff09;——&#xff08;上&#xff09;2.1 Generator&#xff08;生成器&#xff09;2.2 Discriminator&…

ssm企业库存管理微信小程序-计算机毕业设计源码82704

摘 要 本文基于SSM框架&#xff0c;设计与实现了一个企业库存管理微信小程序。该小程序主要包括用户登录、库存查询、入库操作、出库操作等功能模块。在设计过程中&#xff0c;采用了前后端分离的架构&#xff0c;前端使用了微信小程序原生开发工具进行开发&#xff0c;后端使用…

【C++篇】探索STL之美:熟悉使用String类

CSDN 文章目录 前言 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&…

【跨平台】ReactNative 入门初探

【跨平台】ReactNative 入门初探 环境搭建与资料基础知识JS/TS Html基础React 基础异步编程处理PromiseGeneratorasync UI 组件定义和使用style宽度和高度FlexBox触摸组件常用交互 Redux基础概念 与安卓通信参考相关类注解等 构建打包示例常用参数自定义RN插件 环境搭建与资料 …

no.977有序数组的平方 python

一、题目 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c…

.NETCore Blazor使用localStorage存储登录信息

目录 1. JWT 登录并存储到 localStorage 2. 读取 JWT 3. 删除 JWT&#xff08;用户退出&#xff09; 4. 修改 JWT 5. 处理 JWT 过期 总结 在使用 JWT&#xff08;JSON Web Token&#xff09;进行身份验证时&#xff0c;除了生成和存储 JWT&#xff0c;还需要处理读取、删…

ApacheShiro反序列化 550 721漏洞

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理个漏洞被称为 Shiro550 是因为在Apache Shiro的GitHub问题跟踪器中&#xff0c;该漏洞最初被标记为第550个问题,721漏洞名称也是由此而来 Shiro-550 CVE-2016-4437 Shiro反序列化Docker复现 …

JavaScript 第30章:综合项目

看起来您想要了解如何在一个JavaScript为主的项目中进行项目规划、技术选型、开发流程以及维护等方面的内容&#xff0c;并且希望结合Java的源代码来进行详细的讲解。不过&#xff0c;JavaScript和Java是两种不同的编程语言&#xff0c;通常它们的应用场景也不同。JavaScript 主…

运动监测网站毕设基于SpringBootSSM框架的计算机毕业设计

目录 ‌一、引言 ‌ 1. 开发背景 2. 开发目标 ‌二、系统设计与实现‌ ‌技术选型‌&#xff1a; ‌功能模块‌&#xff1a; ‌技术挑战与解决方案‌&#xff1a; 4. 测试与评估‌ ‌三、需求分析 1.用户需求分析‌ 2. 功能需求‌ 3.非功能需求‌ ‌四、成果与展…

Android GPU Inspector分析帧数据快速入门

使用 谷歌官方工具Android GPU Inspector (AGI) 可以对Android 应用进行深入和全面的系统性能分析和帧性能分析 。AGI 是一个非常强大的分析工具&#xff0c;尤其是在需要诊断 GPU 性能问题和优化应用时&#xff0c;可以帮助你精准找到性能瓶颈。本文介绍如何使用该工具对帧数据…

HTTP Proxy环境下部署Microsoft Entra Connect和Health Agents

在企业环境中&#xff0c;时常需要通过使用HTTP Proxy访问Internet&#xff0c;在使用HTTP Proxy访问Internet的环境中部署Microsoft Entra Connect和Microsoft Entra Connect Health Agents可能会遇到一些额外的配置步骤&#xff0c;以便这些服务能够正常连接到Internet。 一…

Windows系统PyCharm右键运行.sh文件

在参考了Windows系统下pycharm运行.sh文件&#xff0c;执行shell命令_shell在pycharm-CSDN博客 和深度学习&#xff1a;PyCharm中运行Bash脚本_pycharm bash-CSDN博客 配置了右键执行.sh文件之后&#xff0c;发现在Windows的PyCharm中直接右键运行sh文件&#xff0c;存在如下…

git取消被跟踪的文件并忽略

起因是博主需要忽略python缓存.pyc文件&#xff0c;但是由于git已经跟踪过&#xff0c;所以需要重新取消跟踪&#xff0c;然后让.gitignore文件生效 1. 在 .gitignore 中忽略 .pyc 文件 首先&#xff0c;确保在 .gitignore 文件中添加了忽略 .pyc 文件的规则&#xff1a; # …

【MyBatis】MyBatis-config标签详解

目录 MyBatis配置文件标签详解configuration标签properties标签typeAliases标签environments标签environment标签transactionManager标签dataSource标签mappers标签 MyBatis配置文件标签详解 我们在使用MyBatis框架的时候需要一个配置文件——MyBatis-config.xml来告诉MyBatis…

gbn,sr和tcp的区别

这是关于三种不同协议&#xff08;GBN、SR、TCP&#xff09;处理传输时序和丢包的行为比较。我们可以分别填充并解释它们的处理机制&#xff1a; GBN&#xff08;Go-Back-N&#xff09;协议&#xff1a; 类型发送方的计时器保存的是啥接收方收到失序的分组怎么办超时的时候发…