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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VMware虚拟机的下载安装与使用

目录 一、下载VMware虚拟机 步骤1---找到需要的虚拟机下载位置 步骤2---找到下载的安装包安装程序 二、删除干净VMware虚拟机 步骤1--进去服务里面关闭虚拟机服务 步骤2---控制面板里面删除 步骤3---注册表删除HKEY_CURRENT_USER\Software\VMware, Inc. 步骤4---安装在…

政安晨【零基础玩转各类开源AI项目】基于本地Ubuntu (Linux ) 系统应用Gradio-Lite:无服务器 Gradio 完全在浏览器中运行

目录 简介 什么是gradio/lite? 入门 1.导入 JS 和 CSS 2. 创建标签 3. 在标签内编写你的 Gradio 应用程序 更多示例:添加其他文件和要求 多个文件 其他要求 SharedWorker 模式 代码和演示playground 1.无服务器部署 2.低延迟 3. 隐私和安全…

【C语言】文件操作(1)(文件打开关闭和顺序读写函数的万字笔记)

文章目录 一、什么是文件1.程序文件2.数据文件 二、数据文件1.文件名2.数据文件的分类文本文件二进制文件 三、文件的打开和关闭1.流和标准流流标准流 2.文件指针3.文件的打开和关闭文件的打开文件的关闭 四、文件的顺序读写1.fgetc函数2.fputc函数3.fgets函数4.fputs函数5.fsc…

AI开发-三方库-Hugging Face-Pipelines

1 需求 需求1:pipeline支持的任务类型 需求2:推理加速使用CPU还是GPU 需求3:基于pipeline的文本分类示例 需求4:pipeline实现原理 模型使用步骤(Raw text -》Input IDs -》Logits -》Predictions)&…

k8s 1.28.2 集群部署 harbor v2.11.1 接入 MinIO 对象存储

文章目录 [toc]提前准备什么是 HarborHarbor 架构描述Harbor 安装的先决条件硬件资源软件依赖端口依赖 Harbor 在 k8s 的高可用Harbor 部署Helm 编排YAML 编排创建 namespace导入镜像部署 Redis部署 PostgreSQL部署 Harbor core部署 Harbor trivy部署 Harbor jobservice部署 Ha…

前端考试总结

1HTML标签 h标题标签 块级标签 独占一行 p段落标签 同上 br换行标签 单标签 img图片标签 内联标签:不独占一行(src图片地址 alt图片的替代文字 title鼠标悬停提示文字) a超链接标签 同上 (href跳转路径 target属性{_blank新窗口打开 _self在当前窗口打开}) 列表标签(ul无…

VSCODE 导入cubeide工程

1.下载vscode及插件STM32 VS Code Ectersion 版本号1.0.0,之后这个有导入功能。 2.等待自动安装对应插件,提示缺少什么就补什么 3.在左侧出现stm32图标。点击Import a local project导入本地项目。 4.报错 [{"resource": "/f:V11/cmak…

前端html,css 样式巩固1

想做这样 一个效果 点击图片切换 当前的选中图片 我们使用 原生的js html 来开发这个 直接粘贴代码 相信大家 都能看懂的 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" …

抖音视频制作怎么暂停画面,抖音视频怎么让它有暂停的效果

千万别滥用视频特效&#xff0c;不然它能毁掉你的抖音作品。在创作过程中&#xff0c;应尽量使用类似暂停画面、隐形字幕这样的视觉特效&#xff0c;可以显著提高作品的视觉体验。增强视频表现力的同时&#xff0c;也不会让画面看起来过于夸张。有关抖音视频制作怎么暂停画面的…

Springboot 整合 Java DL4J 实现文物保护系统

&#x1f9d1; 博主简介&#xff1a;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编程&#xff0c;…

2011年国赛高教杯数学建模A题城市表层土壤重金属污染分析解题全过程文档及程序

2011年国赛高教杯数学建模 A题 城市表层土壤重金属污染分析 随着城市经济的快速发展和城市人口的不断增加&#xff0c;人类活动对城市环境质量的影响日显突出。对城市土壤地质环境异常的查证&#xff0c;以及如何应用查证获得的海量数据资料开展城市环境质量评价&#xff0c;研…

应用层协议 序列化

自定义应用层协议 例子&#xff1a;网络版本计算器 序列化反序列化 序列化&#xff1a;将消息&#xff0c;昵称&#xff0c;日期整合成消息-昵称-日期 反序列化&#xff1a;消息-昵称-日期->消息&#xff0c;昵称&#xff0c;日期 在序列化中&#xff0c;定义一个结构体…

【Pycharm默认解释器配置文件】怎样删除配置解释器的无效历史记录?

有时候我们希望删除无效的解释器路径&#xff0c;可以找到这个文件&#xff0c;进行删除修改。 C:\Users\你的用户名\AppData\Roaming\JetBrains\PyCharm2022.3\options\jdk.table.xml直接删除解释器名称对应的一整个<jdk version"2">节点即可&#xff01; …

2023年ICPC亚洲合肥赛区赛 C. Cyclic Substrings

题目 题解 #include<bits/stdc.h> using namespace std; // #define int long long #define ll long long const int maxn 6e6 5; const int mod 998244353; int fail[maxn];//fail[i]表示i结点代表的回文串的最大回文后缀的编号 int len[maxn]; //len[i]表示结点i代…

大模型涌现判定

什么是大模型&#xff1f; 大模型&#xff1a;是“规模足够大&#xff0c;训练足够充分&#xff0c;出现了涌现”的深度学习系统&#xff1b; 大模型技术的革命性&#xff1a;延申了人的器官的功能&#xff0c;带来了生产效率量级提升&#xff0c;展现了AGI的可行路径&#x…

UDP/TCP协议

网络层只负责将数据包送达至目标主机&#xff0c;并不负责将数据包上交给上层的哪一个应用程序&#xff0c;这是传输层需要干的事&#xff0c;传输层通过端口来区分不同的应用程序。传输层协议主要分为UDP&#xff08;用户数据报协议&#xff09;和TCP&#xff08;传输控制协议…

mongodb-7.0.14分片副本集超详细部署

mongodb介绍&#xff1a; 是最常用的nosql数据库&#xff0c;在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的mongodb&#xff08;分片副本&#xff09;集群。 环境准备 系统系统 BC 21.10 三台服务器&#xff1a;192.168.123.247/248/249 安装包&#xff1a…

Javaweb基础-vue

Vue.js Vue是一套用于构建用户界面的渐进式框架。 起步 引入vue <head><script src"static/js/vue2.6.12.min.js"></script> </head> 创建vue应用 <body> <div id"index"><p>{{message}}</p> </div>…

Java的walkFileTree方法用法【FileVisitor接口】

在Java旧版本中遍历文件系统只能通过File类通过递归来实现&#xff0c;但是这种方法不仅消耗资源大而且效率低。 NIO.2的Files工具类提供了两个静态工具方法walk()和walkFileTree()可用来高效并优雅地遍历文件系统。walkFileTree()功能更强&#xff0c;可自定义实现更多功能&am…

5.3章节python中字典:字典创建、元素访问、相关操作

1.字典的创建和删除 2.字典的访问和遍历 3.字典的相关操作 4.字典的生成式 一、字典的创建和删除 字典&#xff08;dictionary&#xff09;是一种用于存储键值对&#xff08;key-value pairs&#xff09;的数据结构。每个键&#xff08;key&#xff09;都映射到一个值&#xf…