内核参数优化记录

文章目录

  • 参数查看和修改
  • 网络
    • net.core.netdev_max_backlog
    • net.core.netdev_budget_usecs
    • net.core.netdev_budget
    • net.ipv4.conf.all.rp_filter=0
    • net.ipv4.conf.default.rp_filter=0
    • net.ipv4.conf.default.arp_announce=2
    • net.ipv4.conf.lo.arp_announce=2
    • net.ipv4.conf.all.arp_announce=2
    • net.ipv4.tcp_max_tw_buckets=5000
    • net.ipv4.tcp_syncookies=1
    • net.ipv4.tcp_max_syn_backlog=1024
    • net.ipv4.tcp_synack_retries=2
    • net.ipv4.tcp_keepalive_time=1800
    • net.ipv4.tcp_keepalive_probes=3
    • net.ipv4.tcp_keepalive_intvl=15
    • net.core.rmem_max = 128000000
    • net.core.somaxconn = 10000
    • net.core.busy_poll = 0
    • net.core.busy_read = 0
    • 准备看代码了解参数作用
  • 文件系统
    • fs.file-max = 655350
  • 进程资源
    • kernel.pid_max = 655350
  • 内核
    • kernel.randomize_va_space
  • 调试
    • kernel.core_pattern = core.%e

参数查看和修改

全部参数查看:

sysctl -a 

参数修改临时示例:

$ sudo sysctl -w net.core.netdev_budget=3600

参数永久修改可以写入/etc/sysctl.conf 文件。

网络

net.core.netdev_max_backlog

net.core.netdev_max_backlog 是 Linux 内核中的一个参数,它定义了允许送到队列的数据包的最大数目,也就是网卡设备将请求放入队列的长度。

  • 值通常是 1000
    在高速链路上,如果网络流量非常大,可能需要增加这个值以避免数据包丢失。可以通过查看 /proc/net/softnet_stat 文件来确定是否发生了 netdev backlog 队列溢出,其中第二列代表了由于 netdev_max_backlog 队列溢出而被丢弃的包总数。

net.core.netdev_budget_usecs

netdev_budget_usecs 是 Linux 内核中的一个参数,用于控制 NAPI(New API)轮询周期的最大时长。

  • 值通常是 2000 表示 2000 微秒(2 毫秒)

如果网络环境需要更快的数据处理,可以适当增加这个值;反之,如果需要减少网络数据处理对 CPU 的占用,可以减小这个值。

net.core.netdev_budget

netdev_budget 是 Linux 内核中的一个参数,用于控制网络设备在 NAPI(New API)轮询模式下,每次软中断(softirq)处理过程中允许处理的最大数据包数量。

  • 值通常是 300

net.ipv4.conf.all.rp_filter=0

net.ipv4.conf.all.rp_filter 是一个网络配置参数,用于设置反向路径过滤(Reverse Path Filtering)的行为。反向路径过滤是一种网络安全特性,用于防止IP地址欺骗和保护网络不受某些类型的攻击。
默认是1:

  • 值1(严格模式):仅当数据包的源地址可以通过路由器的反向路径到达时,数据包才会被接受。这是最安全的模式,但可能会误杀一些合法的流量。
  • 值0(宽松模式):数据包的源地址不经过反向路径过滤检查,可能会接受一些伪造的IP地址数据包。
  • 值2(松散模式):仅当数据包的源地址严格匹配反向路径时,数据包才会被接受。这比严格模式更宽松,但比宽松模式更严格。

在路由器或防火墙上启用反向路径过滤,可以提高网络的安全性,防止外部的攻击。在内部网络中,反向路径过滤可以帮助防止内部主机之间的IP地址欺骗。反向路径过滤可能会对网络性能产生一定影响,因为它需要额外的路径检查。在某些情况下,严格的反向路径过滤可能会误杀一些合法的流量,比如通过NAT转换的流量。

net.ipv4.conf.default.rp_filter=0

同上。

net.ipv4.conf.default.arp_announce=2

net.ipv4.conf.default.arp_announce 是Linux内核中的一个网络配置参数,用于设置默认的ARP(地址解析协议)宣告行为。这个参数影响系统如何处理发送ARP请求和响应ARP请求的行为。用于控制ARP宣告、防止ARP泛洪、地址冲突检测。
默认是1:

  • 0:允许频繁地发送ARP宣告,适用于某些特殊网络环境。
  • 1(默认):限制ARP宣告的速率,以防止ARP泛洪。
  • 2:进一步限制ARP宣告,只在确认地址冲突时才发送。

性能影响:较低的arp_announce值可能会增加网络上的ARP流量,从而影响网络性能。
安全性:较高的arp_announce值可以帮助检测和解决地址冲突,但也可能被用于某些类型的网络攻击

net.ipv4.conf.lo.arp_announce=2

同上。

net.ipv4.conf.all.arp_announce=2

同上。

net.ipv4.tcp_max_tw_buckets=5000

net.ipv4.tcp_max_tw_buckets 是Linux内核中的一个网络配置参数,用于设置TCP协议的"Time Wait"套接字(sockets)的最大数量。这个参数对系统如何处理TCP连接的关闭过程有直接影响。作用:限制Time Wait套接字数量、避免资源耗尽、调整网络性能。
默认值:32768

高并发服务器:在高并发的网络服务器环境中,限制"Time Wait"套接字的数量可以防止系统资源耗尽。
性能调优:在需要优化TCP连接性能的场景下,可能需要调整这个参数以适应特定的网络流量模式。

net.ipv4.tcp_syncookies=1

net.ipv4.tcp_syncookies 是 Linux 内核中的一个网络配置参数,它用于启用或禁用 TCP 同步 cookies(也称为 SYN cookies)。这是一种安全特性,旨在减轻 SYN 洪泛(SYN flood)攻击的影响。
默认值:1,表示启用

高风险服务器:对于容易受到 SYN 洪泛攻击的服务器(如 Web 服务器、邮件服务器等),启用 TCP 同步 cookies 是一种有效的防御措施。
资源受限环境:在资源有限的环境中,启用 TCP 同步 cookies 可以帮助服务器更好地处理大量的连接请求。

net.ipv4.tcp_max_syn_backlog=1024

net.ipv4.tcp_max_syn_backlog 是Linux内核中的一个网络配置参数,用于设置TCP协议在三次握手过程中,对于尚未完成握手的连接请求(即处于SYN接收状态的连接)的最大队列长度。
默认值:512
资源限制:如果设置的值过高,可能会导致服务器因为跟踪太多半打开的连接而耗尽资源。
安全风险:如果设置的值过低,可能会使服务器容易受到SYN洪泛攻击的影响。
性能影响:较大的值可能会提高服务器处理连接请求的能力,但也可能会增加内存的使用量。
系统默认值:大多数Linux发行版的默认值已经适合大多数场景,但根据具体的网络环境和需求,可能需要进行调整。

net.ipv4.tcp_synack_retries=2

net.ipv4.tcp_synack_retries 是Linux内核中的一个网络配置参数,用于设置在TCP三次握手过程中,内核在接收到初始SYN请求后,重传SYN-ACK(同步确认)数据包的最大次数。
默认值:5
网络不稳定环境:在网络连接不稳定或延迟较高的环境中,适当增加重传次数可以帮助确保TCP连接的成功建立。
性能调优:在某些性能敏感的应用中,可能需要调整重传次数以优化连接建立的响应时间

net.ipv4.tcp_keepalive_time=1800

net.ipv4.tcp_keepalive_time 是Linux内核中的一个网络配置参数,它定义了TCP连接在没有任何数据交换的情况下,内核在发送keepalive探测之前等待的时间长度。
默认值:7200,表示7200分钟

长时间连接:对于需要维持长时间连接的应用(如数据库连接、远程桌面等),keepalive可以帮助确保连接的活跃性。
网络不稳定环境:在网络连接可能不稳定的环境中,适当调整keepalive时间可以帮助快速发现并关闭无效连接。

net.ipv4.tcp_keepalive_probes=3

net.ipv4.tcp_keepalive_probes 是Linux内核中的一个网络配置参数,它定义了当TCP连接在一段时间内没有任何数据交换后,内核在放弃连接之前发送的keepalive探测包的最大数量。
默认值:9
过多的keepalive探测可能会增加网络流量和系统负载,但过少的探测可能不足以确保及时检测到死连接。
长时间空闲连接:对于可能长时间空闲但仍需要维持的连接,keepalive探测可以帮助确保连接的及时检测和关闭。
网络不稳定环境:在网络连接可能不稳定的环境中,适当调整keepalive探测次数可以帮助快速发现并关闭无效连接。

net.ipv4.tcp_keepalive_intvl=15

net.ipv4.tcp_keepalive_intvl 是 Linux 内核中的一个网络配置参数,它定义了在 TCP 连接的 keepalive 探测过程中,内核发送连续的 keepalive 探测包之间的时间间隔。
默认值:75
过短的探测间隔可能会增加网络流量和系统负载,但过长的间隔可能不足以及时检测到死连接。
长时间空闲连接:对于需要长时间保持活跃状态的连接,适当调整探测间隔可以确保连接的及时检测和维护。
网络不稳定环境:在网络连接可能不稳定的环境中,增加探测频率可以帮助快速发现并处理无效连接。

net.core.rmem_max = 128000000

net.core.rmem_max 是 Linux 内核中的一个网络配置参数,用于设置 socket 接收缓冲区的最大大小。这个参数影响 TCP 接收窗口的最大尺寸,进而影响网络数据传输的效率。
默认值:212992
高带宽网络:在高带宽网络连接上,增加 rmem_max 值可以提高数据接收的效率。
网络性能调优:在进行网络性能调优时,可能需要根据网络条件和应用需求调整接收缓冲区的大小。

net.core.somaxconn = 10000

net.core.somaxconn 是 Linux 内核中的一个网络配置参数,用于设置监听队列(listen queue)的最大长度。这个参数影响 TCP 服务器在处理大量并发连接请求时的行为。
默认值:4096
高并发服务器:在 Web 服务器、数据库服务器或其他需要处理大量并发连接请求的服务器上,可能需要调整 somaxconn 的值以提高性能。
性能调优:在进行网络性能调优时,可能需要根据服务器的负载和并发连接需求调整监听队列的长度。

net.core.busy_poll = 0

net.core.busy_poll 是 Linux 内核中的一个网络配置参数,它用于控制忙轮询(busy polling)的特性。忙轮询是一种网络接口卡(NIC)的驱动程序策略,它允许驱动程序连续检查接收到的数据包,而不是依赖于中断处理。
默认值:0,表示忙轮询默认被禁用
其他正数值表示在设备队列上忙轮询等待数据包的近似时间(以微秒为单位)。
较小的值(如10微秒)意味着忙轮询会更快地返回,因此CPU的使用率可能会相对较低。但这也可能导致错过一些数据包,从而影响性能。较大的值(如100微秒)意味着忙轮询会持续更长时间,可能会增加CPU的使用率,但也更有可能捕获到数据包,减少延迟。
启用忙轮询可能会提高网络性能,但也可能会增加 CPU 利用率,因为 CPU 需要更频繁地轮询网络接口卡。不适当的忙轮询级别可能会导致 CPU 过载,反而降低系统性能。
高性能网络应用:在需要最小化网络延迟和最大化吞吐量的应用中,如高频交易系统或某些类型的在线游戏,忙轮询可能提供性能优势。
网络性能调优:在进行网络性能调优时,可能需要根据网络硬件和应用需求调整忙轮询级别。

net.core.busy_read = 0

net.core.busy_read 是 Linux 内核中的一个网络配置参数,它与网络设备驱动程序的忙轮询(busy polling)特性相关。忙轮询是一种技术,允许驱动程序持续检查网络接口卡(NIC)是否有数据包到达,而不是依赖于传统的中断驱动方式。
默认值:0,表示忙轮询默认被禁用
其他正数值表示在设备队列上忙轮询等待数据包的近似时间(以微秒为单位)。
较小的值(如10微秒)意味着忙轮询会更快地返回,因此CPU的使用率可能会相对较低。但这也可能导致错过一些数据包,从而影响性能。较大的值(如100微秒)意味着忙轮询会持续更长时间,可能会增加CPU的使用率,但也更有可能捕获到数据包,减少延迟。
高性能网络设备:在高性能网络设备上,忙轮询可以显著提高数据包的处理速度和吞吐量。
实时系统:在需要严格实时响应的系统中,忙轮询可以减少数据包处理的延迟。

准备看代码了解参数作用

net.core.rmem_default = 8388608
net.core.wmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 16384 16777216

文件系统

fs.file-max = 655350

fs.file-max 是Linux内核的一个参数,用于设置系统级别的文件描述符(file descriptors)的最大数量。文件描述符是Linux系统中用于表示打开文件或其他输入/输出资源的抽象指标,它们被用于各种系统调用中。
默认值:9223372036854775807
服务器环境:在服务器上,尤其是Web服务器或数据库服务器,可能会需要打开大量的文件描述符来处理多个客户端连接。
性能监控:在系统性能监控和调优过程中,可能需要根据系统负载调整文件描述符的限制。

进程资源

kernel.pid_max = 655350

kernel.pid_max 是 Linux 内核中的一个参数,用于设置系统可以生成的最大进程标识符(Process Identifier,PID)的值。在 Linux 系统中,每个运行的进程都会被分配一个唯一的 PID。
默认值:4194304
高并发系统:在需要同时运行大量进程的系统中,可能需要增加 kernel.pid_max 的值。
系统调优:在系统性能调优过程中,可能需要根据系统负载和资源使用情况调整 kernel.pid_max 的值。

内核

kernel.randomize_va_space

randomize_va_space 是 Linux 内核的一个安全功能,用于实现地址空间布局随机化(ASLR, Address Space Layout Randomization)。这个功能通过随机化进程的内存地址空间来增加攻击者预测程序内存布局的难度,从而提高系统的安全性。

  • 0:关闭进程地址空间随机化。这是默认值,对于不支持此功能的架构或者使用 norandmaps 参数启动的内核来说,ASLR 会被禁用。
  • 1:开启部分随机化,包括 mmap 基地址、栈和 VDSO 页面的地址会被随机化。这意味着共享库将被加载到随机地址,对于使用位置无关可执行文件(PIE)链接的二进制文件,代码起始位置也会被随机化。
  • 2:开启完全随机化,在级别 1 的基础上,进一步开启堆的随机化。
    内核配置中启用了 CONFIG_COMPAT_BRK 选项,默认值是1;如果 CONFIG_COMPAT_BRK 被禁用默认值是2。

调试

kernel.core_pattern = core.%e

kernel.core_pattern 是 Linux 内核中的一个参数,用于定义内核转储(core dump)文件的命名规则和存储位置。当一个进程由于某些原因(如段错误)崩溃时,内核可以选择生成一个核心转储文件,这个文件包含了进程崩溃时的内存映像和寄存器状态等信息,这对于调试和分析程序错误非常有用。

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

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

相关文章

Docker 安装Postgres和PostGIS,并制作镜像

1. 查找postgres和postgis现有的镜像和版本号 镜像搜索网站:https://docker.aityp.com/ 测试使用的是postgres:15.4 和 postgis:15-3.4 2、镜像拉取 docker pull postgres:15.4docker pull postgis/postgis:15-3.4镜像下载完成,docker images 查看如…

konvajs -基础图形-标签-箭头,动画,学习笔记

官网: Konva 框架概述 |Konva - JavaScript 2d 画布 图书馆 (konvajs.org)https://konvajs.org/docs/overview.html konva是canvas的一个库,可快速画出想要的图形。 基础创建步骤: // 第一步,创建一个Stage舞台 var stage new…

element设置时间和日期框早于现在的时间和日期禁用

效果: 今日此时此刻之前的日期、时间禁止选用,切换日期和时间为“2024-10-19 00:00:00",再切换为”2024-10-18 00:00:00"时, 会给form.time默认赋值为今日此时此刻(日期时间少于今日此时此刻则重新赋值) 安…

Go语言基础学习(Go安装配置、基础语法)

一、简介及安装教程 1、为什么学习Go? 简单好记的关键词和语法;更高的效率;生态强大;语法检查严格,安全性高;严格的依赖管理, go mod 命令;强大的编译检查、严格的编码规范和完整的…

【优选算法】探索双指针之美(一):双指针与单调性的完美邂逅

文章目录 前言:1.盛水最多的容器2.有效三角形个数3. 和为s的两个数字4. 三数之和5. 四数之和 最后想说: 前言: 在上一章中我们已经认识到了双指针,在这章里我们就来探索一下当双指针和单调性遇见后会擦出怎样的火花呢&#xff1f…

几何算法系列:空间实体体积计算公式推导

1.前言 面积和体积的计算是常见和基础的几何算法话题,面积和体积通常作为面或构件的基本信息参与相关的建模、计算、分析等过程。 有关面积的计算,可以参考博主此前的文章, 一种误差较小的轮廓面积计算算法_轮廓面积计算原理-CSDN博客文章…

深入理解Qt中的QTableView、Model与Delegate机制

文章目录 显示效果QTableViewModel(模型)Delegate(委托)ITEM控件主函数调用项目下载在Qt中,视图(View)、模型(Model)和委托(Delegate)机制是一种非常强大的架构,它们实现了MVC(模型-视图-控制器)设计模式。这种架构分离了数据存储(模型)、数据展示(视图)和数据操作(委托),使…

Apple 新品发布会亮点有哪些 | Swift 周报 issue 61

文章目录 前言新闻和社区苹果据称正洽谈投资 OpenAI 英伟达也有意跟投消息称苹果公司服务部门将裁员约百人,波及 Apple Books / Apple News 等业务苹果拟 9 月 10 日举行今年最重磅新品发布会,iPhone 16 亮相?都有哪些看点? 提案正…

京东笔试题

和谐敏感词 🔗 题目地址 🎉 模拟 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();String s scanner.next();String[] words new String[…

【Spring篇】Spring中的Bean管理

🧸安清h:个人主页 🎥个人专栏:【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯Spring IOC容器 &#x1f6a…

如何开启华为交换机 http

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

kafka自定义配置信息踩坑

org.apache.kafka.common.config.ConfigException: Invalid value 0 for configuration acks: Expected value to be a string, but it was a java.lang.Integer 场景描述: 单个kafka使用springboot框架自带的 yml 配置完全OK(因为底层会帮我们处理好类…

QGraphics类型学习使用【Qt】【C++】

QGraphics类型学习使用 需求过程全部完整代码 首先已知,QGraphicsView,QGraphicsScene, QGraphicsItem,分别称为:视图,场景,图元,图表就是各种各样的元素,图片元素,线条元…

排序算法 —— 归并排序(理论+代码)

目录 1.归并排序的认识 归并排序的思想 归并排序动图演示 2.归并排序的递归实现 归并排序的遍历方式 归并排序的归并流程 归并排序的递归代码实现 3.归并排序的非递归实现 非递归实现分析 边界分析 非递归实现代码 4.归并排序总结 时间复杂度 空间复杂度 稳定性…

Postman使用-基础篇

前言 本教程将结合业界广为推崇和使用的RestAPI设计典范Github API,详细介绍Postman接口测试工具的使用方法和实战技巧。 在开始这个教程之前,先聊一下为什么接口测试在现软件行业如此重要? 为什么我们要学习Postman? 现代软件…

ubuntu 安装keepalived+haproxy

一、安装keepalived sudo apt update sudo apt install keepalived sudo systemctl start keepalived sudo systemctl enable keepalived sudo systemctl status keepalived#配置Keepalived sudo cp /etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf …

Jmeter 实战 JDBC配置

​ JDBC JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API。通过这个API,可以直接连接并执行SQL脚本,与数据库进行交互。 使用JMeter压力测试时,操作数据库的场景 在使用JMeter进行接口压力测试时…

大规模多传感器滑坡检测数据集,利用landsat,哨兵2,planet,无人机图像等多种传感器采集数据共2w余副图像,mask准确标注滑坡位置

大规模多传感器滑坡检测数据集,利用landsat,哨兵2,planet,无人机图像等多种传感器采集数据共2w余副图像,mask准确标注滑坡位置 大规模多传感器滑坡检测数据集介绍 数据集概述 名称:大规模多传感器滑坡检测…

R语言建模线性回归

一、 a. # 给定的 (x, y) 数据 x <- c(2, 9, 10, 7) y <- c(3, 13, 12, 11)# 线性回归模型 y a bx model1 <- lm(y ~ x) summary(model1) # 查看回归结果# 提取系数 a 和 b a <- coef(model1)[1] b <- coef(model1)[2]# 预测值 y_pred <- predict(mode…

数据字典是什么?和数据库、数据仓库有什么关系?

一、数据字典的定义及作用 数据字典是一种对数据的定义和描述的集合&#xff0c;它包含了数据的名称、类型、长度、取值范围、业务含义、数据来源等详细信息。 数据字典的主要作用如下&#xff1a; 1. 对于数据开发者来说&#xff0c;数据字典包含了关于数据结构和内容的清晰…