《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…

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

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

第十六周:机器学习笔记

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

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

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

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

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

ApacheShiro反序列化 550 721漏洞

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

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

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

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

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

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

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

【MyBatis】MyBatis-config标签详解

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

Android按钮Button

Button是程序用于和用户进行交互的一个重要控件。Button也是继承自TextView,既可以显示文本,又可以显示图片,二者在UI上的区别主要是 Button 控件有个按钮外观,提示用户单击。 图1 Button示意图 Button最主要的功能是通过单击来执…

K折交叉验证代码实现——详细注释版

正常方法 #---------------------------------Torch Modules -------------------------------------------------------- from __future__ import print_function import numpy as np import pandas as pd import torch.nn as nn import math import torch.nn.functional as …

基于潜空间搜索的策略自适应组合优化(NeurIPS2023)(未完)

文章目录 Abstract1 Introduction2 Related work3 Methods3.1 预备知识3.2 COMPASS4 Experiments4.1 TSP、CVRP和JSSP的标准基准测试4.2 对泛化的鲁棒性:解决变异实例4.3 搜索策略分析5 ConclusionAbstract 组合优化是许多现实应用的基础,但设计高效算法以解决这些复杂的、通…

MongoDB Shell 基本命令(三)生成学生脚本信息和简单查询

一、生成学生信息脚本 利用该脚本可以生成任意个学生信息,包括学号、姓名、班级、年级、专业、课程名称、课程成绩等信息,此处生成2万名学生,学生所有信息都是给定范围后随机生成。 生成学生信息后,再来对学生信息进行简单查询。…

关于武汉芯景科技有限公司的限流开关芯片XJ6241开发指南(兼容LTC4411)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 1.CTL引脚控制VIN和VOUT的通断 2.CTL引脚控制STAT引脚的状态 3.输出电压高于输入电压加上–VRTO的值,芯片处于关断状态

Artistic Oil Paint 艺术油画着色器插件

只需轻轻一点,即可将您的视频游戏转化为艺术品!(也许更多…)。 ✓ 整个商店中最可配置的选项。 ✓ 六种先进算法。 ✓ 细节增强算法。 ✓ 完整的源代码(脚本和着色器)。 ✓ 包含在“艺术包”中。 &#x1f…

【数组知识的扩展①】

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” ArrayList在Java数组中的使用技巧 这篇博客灵感来源于某一天Aileen(🤫)遇到了一道数组合并的题&…

python 文件防感染扫描

一、安装 首先,你需要安装 secplugs-python-client 库。你可以通过 pip 命令来安装: pip install secplugs-python-client确保你的 Python 环境已经正确设置,并且网络连接畅通,以便能够顺利安装。 二、基本用法 1. 初始化客户…

【记录】Windows|Windows 修改字体大全(Windows 桌面、VSCode、浏览器)

【记录】Windows|Windows 修改字体大全(Windows 桌面、VSCode、浏览器) 前言 最近从学长那里发现了一款非常美观的衡水体字体——Maple Mono SC NF。您可以通过以下链接下载该字体:https://github.com/subframe7536/maple-font/…