Linux 内核调优

简介:

以nginx 10k并发连接为优化目标,附简单介绍,不一一解释。


一、tcp容量规划


1
2
3
4
5
6
7
net.ipv4.tcp_mem  = 262144  524288 786432
net.core.wmem_max = 16777216
net.core.wmem_default = 131072
net.core.rmem_max = 16777216
net.core.rmem_default = 131072
net.ipv4.tcp_wmem = 4096    131072  16777216
net.ipv4.tcp_rmem = 4096    131072  16777216


net.ipv4.tcp_mem  

单位是内存页,一般是4k,三个值分别代表tcp内存使用的水平,低、中、高,

低表示无内存压力,中级表示内存压力状态,高表示内存吃紧,最高峰时系统将会拒绝分配内存。

262144 代表1G内存,即(262144x4/1024/1024),其他类推。


下面的参数单位都是字节

net.core.wmem_max 和net.core.wmem_default 会覆盖net.ipv4.tcp_wmem 的第二第三个值,

同理,net.core.rmem_max 和 net.core.rmem_default 会覆盖net.ipv4.tcp_rmem 的第二第三个值。


稍微提高tcp读写缓冲区的容量,可以增加tcp传输效率,比如上文默认值131072=128k,现有一个1M的文件传输,只需8次传输即可,比较适合图片类传输。但也不是越大越好,比如一个文字页面只有15k,使用128k的内存显然有些浪费。


上文tcp压力状态下的容量为2G,对应tcp读写缓冲区128k,可应对的连接数为16384 (2048x1024/128),可满足10k要求。



二、tcp连接行为管理


1
2
3
4
5
6
7
8
9
10
11
12
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 8192
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_orphans = 262144


上面主要是tcp连接行为的伴随的参数,主要是tcp重用,增加队列,减少等待重试频率等等来提升效率。



三、内存管理


1
2
3
4
vm.swappiness =  5
vm.dirty_ratio =  40
vm.min_free_kbytes =  524288
vm.vfs_cache_pressure =  100


vm.swappiness = 5 表示物理内存剩余5%时,才考虑使用swap,默认60,这显然非常不合理


vm.dirty_ratio = 40 表示拿出物理内存的40%用于写缓存,而不立即将数据写入硬盘。由于硬盘是众所周知的瓶颈,扩大它可提升写的效率,40%是个比较合适的比例。


vm.min_free_kbytes = 524288   这个用于控制剩余内存的大小,524288=512M,可根据需要调整。如果某些任务临时需要大量内存,可临时将它调大然后调小,回收页面缓存。它比vm.drop_caches 要温和得多,后者更粗暴。


vm.vfs_cache_pressure = 100 ,如果要尽快将脏数据刷进硬盘,提高它,比如150 。


四、内核其他行为


1
2
3
4
5
6
7
8
net.core.somaxconn = 8192
net.core.netdev_max_backlog = 8192
net.ipv4.ip_local_port_range = 15000 65000
net.netfilter.nf_conntrack_max = 131072
net.nf_conntrack_max = 131072
net.ipv6.conf.all.disable_ipv6 = 1
net.netfilter.nf_conntrack_tcp_timeout_established = 3600
net.core.rps_sock_flow_entries = 32768


net.core.somaxconn 表示socket的最大连接数,默认128,对于php-fpm使用unix socket情况下,需要调大。


net.netfilter.nf_conntrack_tcp_timeout_established = 3600   默认2天时间,多数情况下,调小这个参数是有益的,如果是tcp长连接,这个参数可能不太合适。


net.core.rps_sock_flow_entries 这个参数启用RPS,自动将网卡中断均匀分配到多个CPU,改进网卡性能和系统负载。


RPS还需要脚本配合

for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt);do echo 2048 > $fileRfc;done










本文转自 紫色葡萄 51CTO博客,原文链接:http://blog.51cto.com/purplegrape/1353861,如需转载请自行联系原作者
目录
相关文章
|
10月前
|
安全 网络协议 Linux
深入理解Linux内核模块:加载机制、参数传递与实战开发
本文深入解析了Linux内核模块的加载机制、参数传递方式及实战开发技巧。内容涵盖模块基础概念、加载与卸载流程、生命周期管理、参数配置方法,并通过“Hello World”模块和字符设备驱动实例,带领读者逐步掌握模块开发技能。同时,介绍了调试手段、常见问题排查、开发规范及高级特性,如内核线程、模块间通信与性能优化策略。适合希望深入理解Linux内核机制、提升系统编程能力的技术人员阅读与实践。
923 1
|
10月前
|
Ubuntu Linux
Ubuntu 23.04 用上 Linux 6.2 内核,预计下放到 22.04 LTS 版本
Linux 6.2 带来了多项内容更新,修复了 AMD 锐龙处理器设备在启用 fTPM 后的运行卡顿问题,还增强了文件系统。
|
10月前
|
Ubuntu Linux
Ubuntu 23.10 现在由Linux内核6.3提供支持
如果你想在你的个人电脑上测试一下Ubuntu 23.10的最新开发快照,你可以从官方下载服务器下载最新的每日构建ISO。然而,请记住,这是一个预发布版本,所以不要在生产机器上使用或安装它。
|
10月前
|
传感器 监控 Ubuntu
10 月发布,Ubuntu 23.10 已升级到 Linux Kernel 6.3 内核
硬件方面,Linux 6.3 引入了在 HID 中引入了原生的 Steam Deck 控制器接口,允许罗技 G923 Xbox 版赛车方向盘在 Linux 上运行;改善 8BitDo Pro 2 有线控制器的行为;并为一系列华硕 Ryzen 主板添加传感器监控。
|
10月前
|
Ubuntu Linux
Ubuntu24.04LTS默认采用Linux 6.8内核,实验性版本可通过PPA获得
IT之家提醒,当下的 Ubuntu 23.10 也是一个“短期支持版本”,该版本将在今年 7 月终止支持,而今年 4 月推出的 Ubuntu 24.04 LTS 长期支持版本将获得 5 年的更新支持。
|
10月前
|
监控 Ubuntu Linux
什么Linux,Linux内核及Linux操作系统
上面只是简单的介绍了一下Linux操作系统的几个核心组件,其实Linux的整体架构要复杂的多。单纯从Linux内核的角度,它要管理CPU、内存、网卡、硬盘和输入输出等设备,因此内核本身分为进程调度,内存管理,虚拟文件系统,网络接口等4个核心子系统。
1049 0
|
10月前
|
Web App开发 缓存 Rust
|
10月前
|
Ubuntu 安全 Linux
Ubuntu 发行版更新 Linux 内核,修复 17 个安全漏洞
本地攻击者可以利用上述漏洞,攻击 Ubuntu 22.10、Ubuntu 22.04、Ubuntu 20.04 LTS 发行版,导致拒绝服务(系统崩溃)或执行任意代码。
|
10月前
|
Ubuntu 机器人 物联网
Linux Ubuntu 22.04 LTS 测试版实时内核已可申请
请注意,在启用实时内核后您需要手动配置 grub 以恢复到原始内核。更多内容请参考: