插件窝 干货文章 高并发情况下 Linux 系统及 kernel 参数优化

高并发情况下 Linux 系统及 kernel 参数优化

sysctl echo conf etc 247    来源:    2025-04-13

Linux 高并发系统及内核参数优化指南

系统级优化

文件描述符限制

# 临时设置
ulimit -n 655350

# 永久设置
echo "* soft nofile 655350" >> /etc/security/limits.conf
echo "* hard nofile 655350" >> /etc/security/limits.conf

进程/线程限制

# 最大进程数
echo "kernel.pid_max = 655360" >> /etc/sysctl.conf

# 最大线程数
echo "kernel.threads-max = 655360" >> /etc/sysctl.conf

内存管理

# 禁用内存过量使用
echo "vm.overcommit_memory = 2" >> /etc/sysctl.conf
echo "vm.overcommit_ratio = 80" >> /etc/sysctl.conf

# 减少交换倾向
echo "vm.swappiness = 10" >> /etc/sysctl.conf

网络栈优化

TCP/IP 参数优化

# 增加端口范围
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf

# 启用TCP快速打开
echo "net.ipv4.tcp_fastopen = 3" >> /etc/sysctl.conf

# TIME_WAIT 连接重用
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf

# 增加最大连接数
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 65535" >> /etc/sysctl.conf

# TCP缓冲区大小
echo "net.core.rmem_max = 16777216" >> /etc/sysctl.conf
echo "net.core.wmem_max = 16777216" >> /etc/sysctl.conf
echo "net.ipv4.tcp_rmem = 4096 87380 16777216" >> /etc/sysctl.conf
echo "net.ipv4.tcp_wmem = 4096 65536 16777216" >> /etc/sysctl.conf

连接追踪优化

# 增加连接跟踪表大小
echo "net.netfilter.nf_conntrack_max = 655360" >> /etc/sysctl.conf
echo "net.nf_conntrack_max = 655360" >> /etc/sysctl.conf

磁盘I/O优化

文件系统参数

# 增加文件系统inode缓存
echo "vm.vfs_cache_pressure = 50" >> /etc/sysctl.conf

# 调整脏页比例
echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.conf
echo "vm.dirty_ratio = 10" >> /etc/sysctl.conf

调度器选择

# 对于SSD使用noop或deadline调度器
echo "deadline" > /sys/block/sda/queue/scheduler

应用层优化

Nginx优化示例

worker_processes auto;
worker_rlimit_nofile 65535;

events {
    worker_connections 65535;
    use epoll;
    multi_accept on;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    keepalive_requests 10000;
}

数据库优化(MySQL示例)

[mysqld]
max_connections = 2000
table_open_cache = 4000
innodb_buffer_pool_size = 4G
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT

应用优化后操作

  1. 使sysctl配置生效:
sysctl -p
  1. 监控系统性能:
# 常用监控命令
top -H
vmstat 1
iostat -x 1
netstat -s
ss -s
  1. 根据实际负载情况进一步调整参数

注意事项

  1. 所有参数应根据实际硬件配置和应用特点进行调整
  2. 生产环境修改前应在测试环境验证
  3. 监控系统性能变化,避免过度优化
  4. 不同Linux发行版可能有细微差异
  5. 内核版本不同可能导致参数名称或默认值不同

这些优化可以显著提高Linux系统在高并发场景下的性能,但最佳配置需要根据具体应用和硬件环境进行测试和调整。