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

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.lryc.cn/news/627069.html

相关文章:

  • 压缩--RAR、7-Zip工具使用
  • Kafka如何保证「消息不丢失」,「顺序传输」,「不重复消费」,以及为什么会发生重平衡(reblanace)
  • 中国大学MOOC-C语言第九周指针(上)
  • 360报毒HEUR/QVM03.0.7EBB.Malware.Gen问题
  • lock4j 库中的 @Lock4j 注解进行全面的概述和深度的源码级剖析。
  • Ubuntu实现程序开机自动运行
  • Windows 如何清理右键菜单?电脑桌面右键菜单里出现一个清理内存 怎么去掉?
  • 强制重启导致Ubuntu24.04LTS amd的WIFI无法使用的解决方案
  • 电芯自动分选装盒机:高效整合分选与包装的智能化解决方案
  • unfold 切图像,图形transformer的切割操作
  • 【蒸蒸日上】军八武将篇——标1
  • 仿真驱动的AI自动驾驶汽车安全设计与测试
  • 30.Linux cobbler自动化部署
  • 计算机网络基础复习
  • 对象存储 COS 端到端质量系列——终端 COS SDK 网络优化
  • 【自记】Power BI 中 ALL、ALLSELECTED、ALLEXCEPT、ALLNOBLANKROW 的区别说明
  • Python打卡Day47 注意力热图可视化
  • 分享一个基于spark大数据的海洋塑料污染监测与可视化分析系统 基于Python的海洋塑料污染数据交互式可视化分析系统
  • Qwen Image edit的ComfyUI工作流搭建
  • 2025招商铸盾车联网CTF竞赛初赛题解
  • IT运维背锅权限泄露?集中式管控如何化解风险?
  • Docker Compose命令一览(Docker Compose指令、docker-compose命令)
  • Javascript面试题及详细答案150道之(121-135)
  • Linux Capability 解析
  • 达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
  • Java 通过 m3u8 链接下载所有 ts 视频切片并合并转换为 mp4 格式
  • 齐次线性方程组最小二乘解
  • 接美国血统(中序、后序→前序)
  • 【网络运维】Linux:正则表达式
  • 虚幻引擎目录结构