系统优化配置
系统优化是提升Linux服务器性能和稳定性的重要手段。通过合理的配置调优,可以显著改善系统响应速度和资源利用率。
内核参数优化
网络参数调优
# 编辑/etc/sysctl.conf文件
vim /etc/sysctl.conf
# 网络优化参数
net.core.rmem_default = 8388608
net.core.rmem_max = 134217728
net.core.wmem_default = 65536
net.core.wmem_max = 134217728
net.core.netdev_max_backlog = 5000
net.core.netdev_budget = 600
net.core.somaxconn = 65535
# TCP参数优化
net.ipv4.tcp_rmem = 4096 8192 134217728
net.ipv4.tcp_wmem = 4096 8192 134217728
net.ipv4.tcp_mem = 786432 1048576 26777216
net.ipv4.tcp_max_tw_buckets = 360000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 131072
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_syn_backlog = 65536
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
# 应用配置
sysctl -p
文件系统参数
# 文件句柄数优化
fs.file-max = 6815744
fs.nr_open = 20480000
# 虚拟内存参数
vm.swappiness = 10
vm.dirty_ratio = 20
vm.dirty_background_ratio = 10
vm.vfs_cache_pressure = 50
vm.max_map_count = 262144
# 进程数限制
kernel.pid_max = 4194304
kernel.threads-max = 4194304
安全参数
# 禁用IP转发
net.ipv4.ip_forward = 0
# 禁用源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 启用SYN Cookies
net.ipv4.tcp_syncookies = 1
# 禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
文件描述符限制
系统级限制
# 编辑/etc/security/limits.conf
vim /etc/security/limits.conf
# 添加以下内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 32768
* hard nproc 32768
# 编辑/etc/systemd/system.conf (systemd系统)
vim /etc/systemd/system.conf
# 添加以下内容
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32768
用户级限制
# 查看当前限制
ulimit -a
# 临时修改限制
ulimit -n 65536
ulimit -u 32768
# 永久修改(添加到.bashrc)
echo "ulimit -n 65536" >> ~/.bashrc
echo "ulimit -u 32768" >> ~/.bashrc
磁盘I/O优化
文件系统挂载优化
# 编辑/etc/fstab
vim /etc/fstab
# 优化挂载选项
/dev/sda1 / ext4 defaults,noatime,nodiratime 0 1
/dev/sda2 /home ext4 defaults,noatime,nodiratime,user_xattr 0 2
# 重新挂载
mount -o remount /
mount -o remount /home
I/O调度器优化
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 临时修改调度器
echo deadline > /sys/block/sda/queue/scheduler
echo noop > /sys/block/ssd/queue/scheduler
# 永久修改(添加到内核参数)
# 机械硬盘使用deadline
# SSD使用noop或mq-deadline
磁盘缓存优化
# 查看磁盘缓存
cat /proc/meminfo | grep -E "(Cached|Buffers)"
# 清理缓存(谨慎使用)
sync
echo 1 > /proc/sys/vm/drop_caches # 清理页面缓存
echo 2 > /proc/sys/vm/drop_caches # 清理目录项和inode缓存
echo 3 > /proc/sys/vm/drop_caches # 清理所有缓存
内存优化
内存分配策略
# 内存过量分配控制
vm.overcommit_memory = 1
vm.overcommit_ratio = 80
# 内存回收策略
vm.min_free_kbytes = 65536
vm.zone_reclaim_mode = 0
# 透明大页面
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
交换分区优化
# 调整swappiness值
echo 10 > /proc/sys/vm/swappiness
# 永久设置
echo "vm.swappiness = 10" >> /etc/sysctl.conf
# 管理交换分区
swapon -s # 查看交换分区状态
swapoff -a # 关闭所有交换分区
swapon -a # 启用所有交换分区
CPU优化
中断平衡
# 安装irqbalance
yum install irqbalance # CentOS/RHEL
apt install irqbalance # Ubuntu/Debian
# 启动服务
systemctl enable irqbalance
systemctl start irqbalance
# 查看中断分布
cat /proc/interrupts
CPU调频策略
# 查看CPU调频信息
cpupower frequency-info
# 设置性能模式
cpupower frequency-set -g performance
# 设置节能模式
cpupower frequency-set -g powersave
# 自动模式
cpupower frequency-set -g ondemand
进程优先级
# 设置关键进程高优先级
renice -10 $(pgrep nginx)
renice -10 $(pgrep mysql)
# 设置后台任务低优先级
renice 10 $(pgrep backup)
网络优化
网卡参数调优
# 查看网卡设置
ethtool eth0
# 优化网卡接收缓冲区
ethtool -G eth0 rx 4096 tx 4096
# 启用网卡多队列
ethtool -L eth0 combined 4
# 调整中断合并
ethtool -C eth0 rx-usecs 50 tx-usecs 50
连接跟踪优化
# 连接跟踪表大小
net.netfilter.nf_conntrack_max = 1048576
# 连接超时时间
net.netfilter.nf_conntrack_tcp_timeout_established = 1200
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
应用程序优化
数据库优化
# MySQL优化配置示例
cat > /etc/mysql/mysql.conf.d/optimization.cnf << 'EOF'
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
query_cache_size = 128M
query_cache_type = 1
max_connections = 500
thread_cache_size = 50
table_open_cache = 2000
EOF
Web服务器优化
# Nginx优化配置示例
cat > /etc/nginx/conf.d/optimization.conf << 'EOF'
# 工作进程数
worker_processes auto;
# 每个进程最大连接数
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
# HTTP优化
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 1000;
# 缓冲区优化
client_body_buffer_size 16K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;
# Gzip压缩
gzip on;
gzip_vary on;
gzip_min_length 1000;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
EOF
系统监控和调优
性能监控脚本
#!/bin/bash
# performance_monitor.sh
LOG_FILE="/var/log/performance.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
# CPU使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
# 内存使用率
MEM_USAGE=$(free | grep Mem | awk '{printf "%.2f", $3/$2 * 100.0}')
# 磁盘I/O等待
IO_WAIT=$(iostat -c 1 2 | tail -1 | awk '{print $4}')
# 网络连接数
CONNECTIONS=$(ss -s | grep TCP | awk '{print $2}')
# 负载平均值
LOAD_AVG=$(uptime | awk -F'load average:' '{print $2}')
# 记录到日志
echo "[$DATE] CPU:${CPU_USAGE}% MEM:${MEM_USAGE}% IO_WAIT:${IO_WAIT}% CONN:${CONNECTIONS} LOAD:${LOAD_AVG}" >> $LOG_FILE
自动调优脚本
#!/bin/bash
# auto_tune.sh
# 检查系统负载
LOAD=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | cut -d',' -f1)
CPU_COUNT=$(nproc)
# 动态调整TCP参数
if (( $(echo "$LOAD > $CPU_COUNT" | bc -l) )); then
# 高负载时优化
echo 65536 > /proc/sys/net/core/somaxconn
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
else
# 正常负载
echo 32768 > /proc/sys/net/core/somaxconn
fi
# 内存压力检查
MEM_AVAILABLE=$(free | grep Available | awk '{print $7}')
MEM_TOTAL=$(free | grep Mem | awk '{print $2}')
MEM_RATIO=$(echo "scale=2; $MEM_AVAILABLE / $MEM_TOTAL" | bc)
if (( $(echo "$MEM_RATIO < 0.1" | bc -l) )); then
# 内存不足时清理缓存
echo 1 > /proc/sys/vm/drop_caches
fi
优化验证和测试
性能基准测试
# CPU性能测试
sysbench --test=cpu --cpu-max-prime=20000 run
# 内存性能测试
sysbench --test=memory --memory-total-size=10G run
# 磁盘I/O测试
sysbench --test=fileio --file-total-size=5G prepare
sysbench --test=fileio --file-total-size=5G --file-test-mode=rndrw run
# 网络性能测试
iperf3 -s # 服务端
iperf3 -c server_ip # 客户端
参数调优验证
# 网络参数验证
ss -s
netstat -s
# 内存使用验证
cat /proc/meminfo
vmstat 1 5
# 文件系统验证
iostat -x 1 5
iotop
# CPU使用验证
top
htop
sar -u 1 5
优化最佳实践
分步骤调优
- 一次只修改一个参数
- 测试验证效果
- 记录调优过程
监控调优效果
- 建立性能基线
- 持续监控关键指标
- 定期评估优化效果
备份配置文件
- 调优前备份原始配置
- 记录所有修改
- 准备回滚方案
根据业务特点调优
- Web服务器重点优化网络和内存
- 数据库服务器重点优化I/O和内存
- 计算服务器重点优化CPU和内存
定期检查和更新
- 定期检查系统性能
- 根据业务增长调整参数
- 关注新版本优化特性
系统优化是一个持续的过程,需要根据具体的应用场景和负载特点进行调整。合理的优化配置可以显著提升系统性能和稳定性。