当前位置: 首页 > ops >正文

Linux服务器性能优化总结


1. 引言

系统性能是一个多维度的综合指标,它不仅仅取决于应用程序本身的质量和底层硬件资源的多寡,更取决于操作系统(OS)作为中间层,能否将硬件资源高效、稳定地分配给应用程序。错误或保守的OS配置会成为性能瓶颈,无法充分发挥硬件和软件的全部潜力。

本文档聚焦于Linux操作系统层面的关键性能调优点,通过一系列易于操作的配置调整,旨在提升服务器在高并发、高I/O、高计算负载下的稳定性和吞吐量,为上层应用(如数据库、大数据平台、Web服务等)提供一个坚实且高效的基础运行环境。

2. 资源限制 (ulimit) 优化

优化目标:防止因单个用户或进程耗尽系统资源(如文件句柄、进程数)而导致的服务拒绝、意外崩溃或系统不稳定。

2.1 文件句柄数 (nofile)
  • 说明:Linux中一切皆文件,网络连接(Socket)、打开的文件、监听的端口等都消耗文件描述符(句柄)。过小的限制会导致应用报"Too many open files"错误。
  • 检查命令ulimit -n
  • 建议值:生产环境建议调整为 655350 或更高。
  • 调整方法
    # 临时调整(生效至下次重启或用户退出)
    ulimit -n 655350# 永久调整(对所有登录用户生效)
    echo -e '* soft nofile 655350\n* hard nofile 655350' >> /etc/security/limits.conf
    # 如需对特定用户生效,将 '*' 替换为用户名,如 'oracle soft nofile 655350'
    
2.2 用户进程数 (nproc)
  • 说明:限制单个用户可创建的最大进程数。对于会频繁创建子进程的服务(如Java应用、PHP-FPM等),过小的限制会导致"fork: retry: Resource temporarily unavailable"错误。
  • 检查命令ulimit -u
  • 建议值:生产环境建议 655350
  • 调整方法
    # 临时调整
    ulimit -u 655350# 永久调整
    echo -e '* soft nproc 655350\n* hard nproc 655350' >> /etc/security/limits.conf
    # 注意:在 CentOS 7+ 系统中,可能还需修改 /etc/security/limits.d/20-nproc.conf 文件
    

3. 磁盘I/O调度算法优化

优化目标:为不同的存储介质(HDD/SSD)选择最合适的I/O请求排序策略,最大化磁盘吞吐量和响应速度。

  • 调度算法对比

    调度算法特点适用场景
    deadline保证请求的截止时间,避免I/O饥饿传统机械硬盘 (HDD)
    noop简单的FIFO队列,无额外排序SSD、NVMe、虚拟化环境(Guest OS)
    cfq完全公平队列,为每个进程分配时间片旧版本默认,现已逐渐淘汰
    kyber针对现代低延迟设备(如SSD)优化现代SSD
    bfq预算公平队列,保证带宽公平性桌面系统等需要公平性的场景
  • 检查与调整方法

    # 1. 查看磁盘设备名
    lsblk# 2. 检查当前磁盘调度算法(以 sdb 为例)
    cat /sys/block/sdb/queue/scheduler
    # 输出示例:`noop [deadline] cfq`,中括号[]内为当前生效的算法# 3. 临时调整(将sdb调整为noop)
    echo noop > /sys/block/sdb/queue/scheduler# 4. 永久调整(将命令写入启动脚本)
    echo 'echo noop > /sys/block/sdb/queue/scheduler' >> /etc/rc.d/rc.local
    chmod +x /etc/rc.d/rc.local
    

4. Swap分区管理

优化目标:平衡内存不足时的系统稳定性与极致性能需求。Swap可防止因内存耗尽而触发OOM Killer导致进程被强制杀死,但频繁的Swap交换(Swapping)会严重拖慢性能。

  • 查看Swap状态
    free -h
    cat /proc/meminfo | grep -i swap
    
4.1 禁用Swap(追求极致性能)
  • 场景:适用于内存容量绝对充足(如远大于应用峰值需求)的数据密集型应用,如Redis、Elasticsearch、HBase等,以避免任何不可预测的I/O延迟。
  • 操作方法
    # 临时禁用所有Swap
    swapoff -a# 永久禁用:注释掉 /etc/fstab 中所有含 'swap' 的行
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    
4.2 启用/创建Swap(保障系统稳定性)
  • 场景:内存紧张或需要应对突发流量的通用服务器。
  • 建议大小:通常为物理内存的 1~2倍,但最大一般不超过16GB。
  • 操作方法(创建4G Swap文件)
    # 创建Swap文件
    sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
    # 或使用更快的 fallocate(但某些文件系统不支持)
    # sudo fallocate -l 4G /swapfilesudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile# 永久生效
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
    

5. CPU性能模式调优

优化目标:让CPU始终以最高性能状态运行,避免因节能策略(频率动态调整)引入的性能波动和响应延迟。

  • 安装工具yum install kernel-toolsyum install cpupowerutils

  • 检查当前策略cpupower frequency-info

  • 常用调速器 (Governor)

    • performance推荐。CPU始终以支持的最高主频运行。
    • powersave:CPU始终以最低主频运行。
    • ondemand:按需动态调整,较平衡。
    • schedutil:基于调度器负载调整,新一代默认策略。
  • 调整方法

    # 1. 检查CPU是否支持调整
    cpupower frequency-info --policy# 2. 临时设置为performance模式(对所有CPU核心生效)
    cpupower frequency-set -g performance
    # 或 echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor# 3. 永久设置
    echo 'cpupower frequency-set -g performance' >> /etc/rc.d/rc.local
    chmod +x /etc/rc.d/rc.local
    

6. 内存分配策略 (Overcommit) 优化

优化目标:调整内核的内存分配策略,以满足特定应用(如数据库)的内存需求,避免因内核过于保守的拒绝分配而导致应用异常。

  • 模式说明

    • 0 (启发式overcommit,默认):内核根据一些启发式算法判断是否有足够内存。
    • 1 (总是overcommit)推荐用于数据库等内存消耗型应用。内核总是答应所有内存申请请求,实际物理内存只在真正写入时分配。风险是可能触发OOM Killer。
    • 2 (禁止overcommit):分配内存总量不超过 Swap + RAM * overcommit_ratio%
  • 调整方法

    # 查看当前设置
    cat /proc/sys/vm/overcommit_memory# 临时设置为模式1
    echo 1 > /proc/sys/vm/overcommit_memory# 永久设置为模式1
    echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
    sysctl -p
    

7. 透明大页 (Transparent Hugepages - THP) 管理

优化目标:根据应用的内存访问模式决定是否启用THP。THP旨在通过减少TLB失效来提升性能,但其碎片整理过程可能对延迟敏感型应用(如数据库)产生负面性能影响。

  • 检查状态

    cat /sys/kernel/mm/transparent_hugepage/enabled
    cat /sys/kernel/mm/transparent_hugepage/defrag
    # 输出 `[always]` 表示启用,`[never]` 表示禁用,`[madvise]` 表示按建议启用。
    
  • 建议

    • 对于数据库(Oracle, MySQL, PostgreSQL等)、Redis强烈建议禁用
    • 对于科学计算、大数据处理(Hadoop):通常受益,建议开启。
  • 禁用方法(数据库场景)

    # 临时禁用
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo never > /sys/kernel/mm/transparent_hugepage/defrag# 永久禁用
    echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local
    echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local
    chmod +x /etc/rc.d/rc.local
    

8. 网络参数调优

优化目标:优化TCP/IP协议栈行为,提升高并发网络连接下的处理能力、减少连接延迟和资源占用。

  • 关键参数及建议

    # 连接队列优化 (预防连接溢出、SYN Flood)
    net.core.somaxconn = 4096       # 增大监听队列长度
    net.ipv4.tcp_max_syn_backlog = 8192 # 增大SYN队列长度
    net.ipv4.tcp_abort_on_overflow = 1  # 队列满时直接发送RST拒绝,快速失败# 连接状态优化 (快速回收端口资源)
    net.ipv4.tcp_tw_reuse = 1       # 允许TIME-WAIT套接字用于新的TCP连接
    net.ipv4.tcp_fin_timeout = 30   # 减少FIN-WAIT-2状态等待时间# 保活与检测
    net.ipv4.tcp_keepalive_time = 600 # 减少不必要的保活包发送频率
    
  • 应用方法

    # 临时调整
    echo 4096 > /proc/sys/net/core/somaxconn
    # ... (其他参数同理)# 永久调整:将以下内容追加至 /etc/sysctl.conf
    cat >> /etc/sysctl.conf << EOF
    net.core.somaxconn = 4096
    net.ipv4.tcp_max_syn_backlog = 8192
    net.ipv4.tcp_abort_on_overflow = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp_keepalive_time = 600
    EOF# 使配置立即生效
    sysctl -p
    

9. 注意事项与最佳实践

  1. 测试先行:任何生产环境的修改都应在测试环境充分验证。
  2. 逐步调整:不要一次性修改所有参数,应逐个调整并观察效果,便于定位问题。
  3. 监控验证:调整前后使用监控工具(如 vmstat, iostat, netstat, sar, top)对比系统指标(CPU、内存、I/O、网络)。
  4. 文档记录:记录所有变更的配置、时间、理由及预期效果。
  5. 理解业务:最优配置高度依赖于具体业务负载。数据库、Web服务器、文件服务器的优化侧重点各不相同。

免责声明:本文档仅供参考。请根据您的具体硬件环境、工作负载和应用特性进行谨慎调整。不恰当的配置可能导致系统不稳定或性能下降。

http://www.xdnf.cn/news/18204.html

相关文章:

  • 【Tech Arch】Apache HBase分布式 NoSQL 数据库
  • redis---常用数据类型及内部编码
  • 如何低比特量化算法的工程实战与落地优化
  • 【考研408数据结构-08】 图论基础:存储结构与遍历算法
  • 让Chrome信任自签名证书
  • AI时代下阿里云基础设施的稳定性架构揭秘
  • C#海康SDK—热成像测温篇
  • gitlab、jenkins等应用集成ldap
  • package.json详细字段解释
  • 大数据技术栈 —— Redis与Kafka
  • JavaScript 性能优化实战:从分析到落地的全指南
  • 网络间的通用语言TCP/IP-网络中的通用规则4
  • Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
  • PyTorch自动求导
  • OpenHarmony之打造全场景智联基座的“分布式星链 ”WLAN子系统
  • Java试题-选择题(11)
  • Consul- acl机制!
  • 【Pycharm虚拟环境中安装Homebrew,会到系统中去吗】
  • 【牛客刷题】岛屿数量问题:BFS与DFS解法深度解析
  • Java NIO (New I/O) 深度解析
  • windows电脑对于dell(戴尔)台式的安装,与创建索引盘,系统迁移到新硬盘
  • Nacos-8--分析一下nacos中的AP和CP模式
  • 从现场到云端的“通用语”:Kepware 在工业互联中的角色、使用方法与本土厂商(以胡工科技为例)的差异与优势
  • vLLM加载lora
  • 【MATLAB例程】水下机器人AUV的长基线定位,适用于三维环境,EKF融合长基线和IMU数据,锚点数量可自适应,附下载链接
  • (一)八股(数据库/MQ/缓存)
  • 在Ubuntu上安装并使用Vue2的基本教程
  • week2-[一维数组]最大元素
  • 监督分类——最小距离分类、最大似然分类、支持向量机
  • 第一章 认识单片机