如何优化 Linux 系统性能以支持高并发
在本篇文章中,我们将详细介绍针对高并发场景下的系统性能瓶颈的优化实践,涉及网络层(TCP参数、Offloading)、文件描述符、CPU调度、内存管理(HugePages)、I/O调度、容器化(Docker)以及日志监控等关键技术点,旨在提升系统在高负载下的吞吐量和响应速度。
这里以
CentOS 7.9环境举例。
文件系统
文件描述符
在高并发环境中,文件描述符的限制往往成为性能瓶颈。通过配置系统的软硬文件描述符限制,可以避免文件描述符不足的问题。
# 配置文件描述符限制 |
在 sysctl.conf 中也需要增加相关配置:
# 文件描述符限制 |
CPU
CPU 调度器
在多核系统上,可以通过调整 CPU 调度器来提高并发性能。使用 isolcpus 参数将一些 CPU 核心从系统调度中隔离出来,使其专门用于高负载任务,避免系统其他任务和中断占用这些资源。
# 隔离特定的 CPU 核心 |
内存
内存大页
启用 HugePages 可以减少内存分配和释放的开销,尤其对数据库和内存密集型应用非常有利。
# 查看当前 HugePages 配置 |
内存管理
通过调整内存管理相关参数,可以提高系统性能。
# 内存管理 |
内核
调试与日志
禁用一些内核调试信息和日志,以减少不必要的系统开销。
# 内核调试信息与日志 |
信号量
调整信号量参数,优化系统性能。
# 信号量设置 |
网络
网络中断
为了提高网络性能,启用 irqbalance 服务,它可以自动平衡网络中断处理,减少单个 CPU 核心的负载,从而提高整体性能。
# 启动 irqbalance 服务 |
常规配置
启用 IP 转发
启用 IP 转发,如果服务器需要作为路由器或网关,则需要启用此选项。
tee -a /etc/sysctl.conf << EOF |
禁用 ICMP 重定向
禁用 ICMP 重定向可以防止中间人攻击,并减少网络流量。
tee -a /etc/sysctl.conf << EOF |
禁用源路由
禁用源路由是一种安全措施,可以防止攻击者伪造源 IP 地址。
tee -a /etc/sysctl.conf << EOF |
禁用接受重定向
禁用接受重定向也是一种安全措施,类似于禁用发送重定向。
tee -a /etc/sysctl.conf << EOF |
禁用安全重定向
禁用安全重定向,进一步提高网络安全性。
tee -a /etc/sysctl.conf << EOF |
忽略 ICMP 广播回显请求
忽略 ICMP 广播回显请求可以防止 Smurf 攻击。
tee -a /etc/sysctl.conf << EOF |
忽略错误的 ICMP 错误响应
忽略错误的 ICMP 错误响应。
tee -a /etc/sysctl.conf << EOF |
启用反向路径过滤
启用反向路径过滤,可以防止 IP 地址欺骗。
tee -a /etc/sysctl.conf << EOF |
启用 TCP 同步 Cookie
启用 TCP 同步 Cookie,可以防止 SYN Flood 攻击。
tee -a /etc/sysctl.conf << EOF |
设置本地端口范围
设置本地端口范围。
tee -a /etc/sysctl.conf << EOF |
设置接收和发送缓冲区大小
设置接收和发送缓冲区的默认值和最大值,这些值与 TCP 缓冲区大小相关,但影响的是所有 socket。
tee -a /etc/sysctl.conf << EOF |
TCP 连接管理
调整 TCP 参数,以优化连接管理。
# 优化 TCP 连接管理 |
调整 TCP 参数
调整 TCP 参数能显著提高网络吞吐量并减少延迟,特别是在高并发场景下。
# 启用 TCP 快速打开(TCP Fast Open) |
启用 TCP Offloading
现代网卡支持 TCP Offloading 技术,可以将部分 TCP 处理工作交给硬件完成,减轻 CPU 的负担。
# 查看网络设备支持的 Offloading 功能 |
磁盘
调度器
在高并发场景中,优化磁盘调度器可以减少 I/O 请求的延迟,尤其是在 SSD 上,noop 调度器通常是最合适的。
# 设置磁盘调度器为 noop |
请求队列
通过增加磁盘的 I/O 请求队列长度,可以提高高并发时的磁盘性能。
# 查看当前磁盘队列长度 |
容器化
服务配置
为了提升 Docker 容器在高并发环境下的性能,可以采取以下措施:
- 使用
overlay2存储驱动,而不是aufs或devicemapper。 - 增加容器的
ulimit设置,避免因文件描述符限制导致容器崩溃。
# 修改 Docker 配置文件(/etc/docker/daemon.json) |
资源限制
为每个容器设置合适的 CPU 和内存限制,可以避免容器过度消耗主机资源,影响整体性能。
# 限制容器的 CPU 使用 |
日志和监控
禁用日志
高并发时,过多的日志记录会增加系统负担,建议禁用不必要的日志,尤其是系统日志。
# 停止不必要的日志服务 |
监控工具
配置合适的监控工具如 Prometheus、Grafana 或 Netdata,可以实时监控系统的各项指标,如 CPU、内存、磁盘、网络等,及时发现性能瓶颈。
刷新生效
sysctl -p
# 建议重启
sync;reboot