1. 首页 > Linux教程 > 正文

Linux教程FG521-Linux高级系统调优实战

内容简介:本文风哥教程参考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调度器优化

# 查看当前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性能优化

# 查看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

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息