《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.rhkb.cn/news/455044.html

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

相关文章

SpringBoot3 + MyBatisPlus 快速整合

一、前言 MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。 这个发展到目前阶段已经很成熟了,社区也比较活跃,可以放心使用。官网地址:https://baomidou.com 二、快速开始 引入依赖 这里我引入了核心…

stm32单片机个人学习笔记11(ADC模数转换器)

前言 本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 STM32入门教程-2023版 细…

Linux系列-Linux的常见指令(三)

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” mv 1.剪切文件,目录 2.重命名 首先,我们先来看第一个作用 假如说,我们原先存在一个hello.txt,我们如果想要将这个文件移动到其他的…

上拉电阻和下拉电阻在电路中的作用(一)

上拉电阻和下拉电阻在电路中的作用(一) 1.什么是上下拉电阻2.上下拉电阻的作用:2.1.维持输入引脚处于稳定状态。2.2.配合三极管和MOS进行电平转换电路设计2.3.OC、OD电路(Open Collector集电极开路、Open Drain漏电极开路&#xf…

什么是分库分表?为什么要分库分表?什么时候需要分库分表?怎么样拆分?(数据库分库分表详解)

文章目录 1、什么是分库分表?1.1、分库分表的概念1.2、分库分表的方式1.2.1、垂直分库1.2.2、垂直分表1.2.3、水平分库1.2.4、水平分表 2、为什么要分库分表?3、什么时候需要分库分表?4、分库分表的数据路由4.1、数据路由的目的4.2、数据路由…

class 9: vue.js 3 组件化基础(2)父子组件间通信

目录 父子组件之间的相互通信父组件传递数据给子组件Prop为字符串类型的数组Prop为对象类型 子组件传递数据给父组件 父子组件之间的相互通信 开发过程中,我们通常会将一个页面拆分成多个组件,然后将这些组件通过组合或者嵌套的方式构建页面。组件的嵌套…

2024开放原子开源生态大会 | 麒麟信安携手openEuler共建开源生态,共塑产业未来

9月25日-27日,由开放原子开源基金会主办的2024开放原子开源生态大会在北京开幕,大会以“开源赋能产业,生态共筑未来”为主题。工业和信息化部党组书记、部长金壮龙,北京市委副书记、市长殷勇,工业和信息化部总经济师、…

汇川机器人与PLC通信-ModbusTCP超详细案例

#SCARA机器人与H5UPLC通过ModbusTCP通信,HMI界面手动操作# 应用背景: 本项目案例部分软件界面已被更新,如机器人示教软件旧版本S01.19R03。但通信的原理基本一致,废话少说,我们直接上图。 一、PLC端配置 1.添加ROB通讯表(自定义),变量表内容包括ROB系统变量,IN区和…

Cadence元件A属性和B属性相互覆盖

最近在使用第三方插件集成到Cadence,协助导出BOM到平台上,方便对BOM进行管理和修改,结果因为属性A和属性B不相同,导致导出的BOM错误。如下图: ​​ 本来我们需要导出Q12,结果给我们导出了Q13,或者反之&…

基于opencv的人脸闭眼识别疲劳监测

1. 项目简介 本项目旨在实现基于眼部特征的眨眼检测,通过监测眼睛开闭状态来计算眨眼次数,从而应用于疲劳监测、注意力检测等场景。使用了面部特征点检测算法,以及眼部特征比率(EAR, Eye Aspect Ratio)来判断眼睛的闭…

Python 实现 excel 数据过滤

一、场景分析 假设有如下一份 excel 数据 shop.xlsx, 写一段 python 程序,实现对于车牌的分组数据过滤。 并以车牌为文件名,把店名输出到 车牌.txt 文件中。 比如 闽A.txt 文件内容为: 小林书店福州店1 小林书店福州店2 二、依赖安装 程序依…

【C++】拆分详解 - 模板

文章目录 一、泛型编程二、函数模板1. 概念2. 语法3. 函数模板的原理4. 函数模板的实例化5. 模板参数的匹配原则 三、类模板1. 语法2. 实例化 四、模板的特化1. 概念2. 函数模板特化3. 类模板特化3.1 全特化3.2 偏特化 / 半特化3.3 应用示例 4. 小结 五、模板的分离编译1. 分离…

Java:抽象类和接口

一.抽象类 1.抽象类概念和语法 ⨀概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 ⨀语…

JMeter使用不同方式传递接口参数

1、使用 HTTP 请求中的参数: 在 JMeter 的测试计划中,添加一个 "HTTP 请求" 元件。 在 "HTTP 请求" 元件的参数化选项中,可以添加参数的名称和值。可以手动输入参数,也可以使用变量来传递参数值。 如果要使…

Golang | Leetcode Golang题解之第497题非重叠矩形中的随机点

题目: 题解: type Solution struct {rects [][]intsum []int }func Constructor(rects [][]int) Solution {sum : make([]int, len(rects)1)for i, r : range rects {a, b, x, y : r[0], r[1], r[2], r[3]sum[i1] sum[i] (x-a1)*(y-b1)}return Sol…

自定义多级联动选择器指南(uni-app)

多端支持:可以运行在H5、APP、微信小程序还是支付宝小程序,都可以轻松使用改组件。自定义配置:您可以根据需要配置选择器的级数,使其适应不同的数据结构和用例。无限级联:此组件支持无限级联选择,使您能够创…

最好的ppt模板网站是哪个?做PPT不可错过的18个网站!

现在有很多PPT模板网站,但真正免费且高质量的不多,今天我就分享主流的国内外PPT模板下载网站,并且会详细分析这些网站的优缺点,这些网站都是基于个人实际使用经验的,免费站点会特别标注,让你可以放心下载&a…

信息安全工程师(64)其他恶意代码分析与防护

前言 恶意代码是指那些能够损害系统用户和系统所有者利益的软件,是故意在计算机系统上执行恶意任务的恶意代码的集合。 一、恶意代码分析 病毒(Virus) 定义:病毒是一种人为制造的、能够进行自我复制的、具有对计算机资源的破坏作用…

国家信息安全水平考试(NISP一级)最新题库-第十七章

目录 另外免费为大家准备了刷题小程序和docx文档,有需要的可以私信获取 1 受到了ARP欺骗的计算机,发出的数据包,     地址是错误的() A.源IP;B.目的IP;C.源MAC;D.目的MAC 正…

rust入门基础总结

文章目录 前言1、输出格式规范一、占位符相关(一){}与{:?} 二、参数替换方式(一)位置参数(二)具名参数 三、格式化参数(一)宽度(二)对齐(三&…