内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。
本文档介绍Linux系统高级调优技术和实战应用。
风哥提示:
Part01-内核参数调优
1.1 网络参数优化
[root@fgedu-server ~]# sysctl -a | grep net.core
net.core.somaxconn = 128
net.core.netdev_max_ba更多学习教程公众号风哥教程itpux_comcklog = 1000
net.core.rmem_default = 212992
net.core.rmem_max = 212992
net.core.wmem_default = 212992
net.core.wmem_max = 212992
# 优化网络参数
[root@fgedu-server ~]# cat > /etc/sysctl.d/99-network-tuning.conf << 'EOF'
# TCP连接优化
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_default = 8388608
net.core.wmem_max = 16777216
# TCP缓冲区优化
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_mem = 786432 1048576 1572864
# TCP连接复用
net.ipv4.tcp_tw_reuse = 1
net.ipv4.t学习交流加群风哥微信: itpux-comcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
# TCP保活
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
# SYN队列优化
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
# 连接跟踪优化
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 7200
# 本地端口范围
net.ipv4.ip_local_port_range = 1024 65535
EOF
# 应用参数
[root@fgedu-server ~]# sysctl -p /etc/sysctl.d/99-network-tuning.conf
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
...
# 验证参数
[root@fgedu-server ~]# sysctl net.core.somaxconn
net.core.somaxconn = 65535
Part02-内存调优
2.1 内存管理优化
[root@fgedu-server ~]# free -h
total used free shared buff/cache available
Mem: 31Gi 8.2Gi 15Gi 1.2Gi 8.5Gi 21Gi
Swap: 8.0Gi 0B 8.0Gi
# 配置内存参数
[root@fgedu-server ~]# cat > /etc/sysctl.d/99-memory-tuning.conf << 'EOF'
# 交换分区使用策略
vm.swappiness = 10
# 脏页比例
vm.dirty_ratio = 20
vm.dirty_background_ratio = 5
# 脏页过期时间
vm.dirty_expire_centisecs = 3000
vm.dirty_writeback_centisecs =学习交流加群风哥QQ113257174 500
# 内存过量分配
vm.overcommit_memory = 1
vm.overcommit_ratio = 80
# 大页内存
vm.nr_hugepages = 1024
# 最小空闲内存
vm.min_free_kbytes = 524288
# 内存碎片整理
vm.compaction_proactiveness = 20
vm.page-Cluster = 3
# 透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
EOF
# 应用内存参数
[root@fgedu-server ~]# sysctl -p /etc/sysctl.d/99-memory-tuning.conf
# 配置大页内存
[root@fgedu-server ~]# cat >> /etc/rc.local << 'EOF'
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
EOF
# 查看大页内存状态
[root@fgedu-server ~]# cat /proc/meminfo | grep Huge
HugePages_Total: 1024
HugePages_Free: 1024
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Part03-磁盘I/O调优
3.1 I/O调度器优化
[root@fgedu-server ~]# cat /sys/block/sda/queue/scheduler
[mq-deadline] kyber bfq none
# 查看磁盘信息
[root@fgedu-server ~]# lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,ROTA
NAME SIZE TYPE FSTYPE MOUNTPOINT ROTA
sda 500G disk 1
├─sda1 1G part xfs /boot 1
├─sda2 100G part LVM2_member 1
│ └─root 100G lvm xfs / 1
└─sda3 399G part LVM2_member 1
# 配置I/O调度器(SSD使用none/mq-deadline,HDD使用bfq)
[root@fgedu-server ~]# echo none > /sys/block/sda/queue/scheduler
# 配置队列深度
[root@fgedu-server ~]# echo 256 > /sys/block/sda/queue/nr_requests
[root@fgedu-server ~]# echo 128 > /sys/block/sda/queue/read_ahead_kb
# 永久配置
[root@fgedu-server ~]# cat > /etc/udev/rules.d/60-scheduler.rules << 'EOF'
# SSD使用none调度器
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/scheduler}="none"
# HDD使用bfq调度器
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"
EOF
# 优化文件系统
[root@fgedu-server ~]# tune2fs -o journal_data_writeback /dev/sda2
tune2fs 1.45.6 (20-Mar-2020)
# 挂载选项优化
[root@fgedu-server ~]# cat >> /etc/fstab << 'EOF'
/dev/mapper/root / xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k 0 0
EOF
# 测试磁盘性能
[root@fgedu-server ~]# fio --name=randread --ioengine=libaio --iodepth=64 --rw=randread --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --time_based --group_reporting
randread: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=64
...
read: IOPS=50.2k, BW=196MiB/s (205MB/s)(11.5GiB/60001msec)
Part04-CPU调优
4.1 CPU性能优化
[root@fgedu-server ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 32
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
NUMA node(s): 2
Model name: Intel(R) Xeon(R) Gold 6248R CPU @ 3.00GHz
# 查看NUMA拓扑
[root@fgedu-server ~]# numactl –hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
node 0 size: 16384 MB
node 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
node 1 size: 16384 MB
# 配置CPU性能模式
[root@fgedu-server ~]# for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
echo performance > $cpu
done
# 配置IRQ亲和性
[root@fgedu-server ~]# cat > /etc/systemd/system/irqbalance.service.d/override.conf << 'EOF'
[Service]
ExecStart=
ExecStart=/usr/sbin/irqbalance --foreground --oneshot
EOF
# CPU隔离配置
[root@fgedu-server ~]# cat >> /etc/default/grub << 'EOF'
GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX isolcpus=16-31 nohz_full=16-31 rcu_nocbs=16-31"
EOF
[root@fgedu-server ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
# 进程CPU绑定
[root@fgedu-server ~]# taskset -cp 0-7 12345
pid 12345's current affinity list: 0-31
pid 12345's new affinity list: 0-7
# NUMA内存绑定
[root@fgedu-server ~]# numactl --cpunodebind=0 --membind=0 -- python3 app.py
# 查看进程CPU使用
[root@fgedu-server ~]# pidstat -p ALL 1 5
Linux 5.14.0-284.el9.x86_64 (fgedu-server) 04/04/2026 _x86_64_ (32 CPU)
Average: PID %usr %system %guest %CPU CPU Command
Average: 1 0.00 0.00 0.00 0.00 - systemd
Average: 456 0.20 0.10 0.00 0.30 - nginx
- 根据业务场景选择调优策略
- 测试调优前后性能对比
- 记录所有调优参数变更
- 定期监控调优效果
- 避免过度调优
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
