Linux 性能调优

1. CPU 调优

a. 进程优先级调整

Linux 系统允许用户调整进程的优先级,以控制它们对 CPU 资源的使用。可以使用 nicerenice 命令来设置进程优先级。优先级范围从 -20(最高优先级)到 19(最低优先级),默认值为 0。

  • 使用 nice 启动进程并设置优先级:

    nice -n 10 command
    
  • 使用 renice 调整正在运行的进程的优先级:

    renice -n 5 -p 1234  # 将 PID 为 1234 的进程优先级设为 5
    
b. 多核调度优化

Linux 内核支持多核处理器,并能自动调度任务到不同的 CPU 核心上。可以使用 taskset 命令将进程绑定到特定的 CPU 核心上,以优化多核处理。

  • 将进程绑定到特定 CPU 核心:

    taskset -c 0,2 command  # 将进程绑定到 CPU 核心 0 和 2
    
c. 禁用不必要的服务

禁用或卸载不必要的服务和守护进程,可以减少 CPU 资源的浪费。使用 systemctlchkconfig 命令来管理服务的启动和停止。

  • 查看当前运行的服务:

    systemctl list-units --type=service --state=running
    
  • 禁用不必要的服务:

    sudo systemctl disable service_name
    

2. 内存调优

a. 虚拟内存和交换分区

Linux 使用交换分区(Swap)来补充物理内存。当物理内存不足时,系统会将不常用的数据移到交换分区,以释放内存。合理配置交换分区可以提高系统的内存利用率。

  • 查看当前交换分区的使用情况:

    swapon -s
    
  • 调整 swappiness 参数(取值范围 0-100),控制系统使用交换分区的频率:

    sudo sysctl vm.swappiness=10  # 将 swappiness 设置为 10,减少 Swap 使用
    
b. 内存管理优化

内存管理涉及缓存和缓冲区的使用、内存碎片化等。调整内核参数,可以优化内存管理。

  • 调整缓存清理策略:

    echo 1 > /proc/sys/vm/drop_caches  # 清理页面缓存
    
  • 使用 sysctl 优化内存参数:

    sudo sysctl vm.vfs_cache_pressure=50  # 降低文件系统缓存的回收频率
    
c. HugePages 配置

HugePages 是一种内存管理机制,通过使用大页面减少 TLB(转换后备缓冲区)缺页,从而提高应用程序的性能。它特别适合需要大量内存分配的应用(如数据库)。

  • 配置 HugePages:

    echo 2048 > /proc/sys/vm/nr_hugepages  # 设置 HugePages 数量
    
  • 确保 /etc/security/limits.conf 文件中有相应的配置,允许用户使用 HugePages。

3. 磁盘 I/O 调优

a. I/O 调度器优化

Linux 提供了多种 I/O 调度器,如 CFQ(完全公平队列)、Deadline 和 NOOP。不同的调度器适用于不同的工作负载。

  • 查看当前 I/O 调度器:

    cat /sys/block/sda/queue/scheduler
    
  • 切换 I/O 调度器:

    echo deadline > /sys/block/sda/queue/scheduler
    
b. 文件系统优化

选择适合的文件系统和进行相关优化可以提高磁盘 I/O 性能。例如,使用 ext4 文件系统时,可以通过调整挂载选项来优化性能。

  • 挂载时启用 noatime 选项,以减少文件访问时间的写入操作:

    sudo mount -o remount,noatime /dev/sda1 /
    
  • 使用 tune2fs 工具调整文件系统参数,如禁用文件系统日志(适用于只读或不需要高安全性的环境):

    sudo tune2fs -O ^has_journal /dev/sda1
    
c. RAID 和 LVM 配置

对于需要高磁盘性能的系统,使用 RAID(独立磁盘冗余阵列)和 LVM(逻辑卷管理)可以显著提高磁盘 I/O 性能。

  • 配置 RAID 级别(如 RAID 0、RAID 5)以提高读写速度。
  • 使用 LVM 实现磁盘的灵活管理和优化性能。

4. 网络调优

a. TCP/IP 参数优化

Linux 系统的网络性能可以通过调整 TCP/IP 协议栈的参数来优化。例如,调整网络缓冲区大小、连接超时和拥塞控制算法。

  • 调整网络缓冲区大小:

    sudo sysctl -w net.core.rmem_max=26214400
    sudo sysctl -w net.core.wmem_max=26214400
    
  • 调整 TCP 窗口大小:

    sudo sysctl -w net.ipv4.tcp_window_scaling=1
    
  • 启用 TCP 快速重传和恢复(FRR)以提高网络吞吐量:

    sudo sysctl -w net.ipv4.tcp_frto=2
    
b. 关闭不必要的网络服务

关闭不必要的网络服务可以减少系统的攻击面,并释放网络资源。

  • 使用 netstatss 命令查看当前打开的网络端口:

    sudo netstat -tuln
    
  • 禁用不必要的服务:

    sudo systemctl disable service_name
    
c. 使用负载均衡和缓存

对于高流量的网络应用,使用负载均衡(如 HAProxy、NGINX)和缓存(如 Varnish)可以提高网络性能。

  • 配置 NGINX 进行反向代理和负载均衡。
  • 使用 Varnish 缓存动态内容,提高网站响应速度。

5. 系统配置调优

a. 内核参数调优

Linux 内核参数通过 /etc/sysctl.conf 文件或 sysctl 命令进行调整,可以优化系统性能。

  • 调整文件描述符限制,以支持更多的并发连接:

    sudo sysctl -w fs.file-max=100000
    
  • 调整内核的进程调度策略:

    sudo sysctl -w kernel.sched_min_granularity_ns=10000000
    
b. 资源限制(ulimit)设置

通过 ulimit 命令,可以限制系统资源的使用,如文件描述符数量、堆栈大小等,以避免某个进程消耗过多资源导致系统不稳定。

  • 查看当前的资源限制:

    ulimit -a
    
  • 增加文件描述符的限制:

    ulimit -n 4096
    
c. 系统日志优化

系统日志在帮助管理员排查问题的同时,也会占用系统资源。合理配置日志可以减少系统开销。

  • 配置 rsyslog,调整日志记录的详细程度,减少不必要的日志。

    sudo vi /etc/rsyslog.conf
    
  • 定期清理旧日志,避免日志文件占用过多磁盘空间。

6. 应用层优化

a. 应用程序的配置优化

对于特定应用,如数据库服务器(如 MySQL、PostgreSQL)或 Web 服务器(如 Apache、NGINX),可以通过调整应用配置文件中的参数来提高性能。

  • 优化 MySQL 配置:

    sudo vi /etc/mysql/my.cnf
    # 调整以下参数
    innodb_buffer_pool_size = 1G
    query_cache_size = 64M
    
  • 优化 Apache 配置:

    sudo vi /etc/httpd/conf/httpd.conf
    # 调整以下参数
    KeepAlive On
    MaxKeepAliveRequests 100
    
    
    
b. 使用合适的编译选项

对于需要编译的应用程序,使用合适的编译选项可以优化性能。例如,通过 gcc 编译时使用优化标志(如 -O2-O3),可以提高应用程序的执行效率。

  • 编译应用时使用优化标志:

    gcc -O3 -o myapp myapp.c
    

总结

Linux 性能调优是一项综合性的工作,涉及系统的方方面面。通过 CPU、内存、磁盘 I/O、网络以及系统配置等方面的调优,可以显著提升 Linux 系统的性能。实际工作中,调优过程应该根据具体的应用场景和需求进行,切忌盲目调整系统参数。建议在调优之前进行充分的测试,并在生产环境中小心应用调优措施,以确保系统的稳定性和安全性。

猜你喜欢

转载自blog.csdn.net/Flying_Fish_roe/article/details/143445126