插件窝 干货文章 LNMP环境下如何优化性能

LNMP环境下如何优化性能

优化 缓存 application 使用 713    来源:    2025-05-08

LNMP环境性能优化指南

LNMP(Linux + Nginx + MySQL + PHP)是常见的Web服务架构,以下是从各个层面进行性能优化的建议:

一、Linux系统优化

  1. 内核参数调整

    # 编辑/etc/sysctl.conf
    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_max_tw_buckets = 5000
    net.ipv4.tcp_max_syn_backlog = 8192
    net.core.somaxconn = 32768
    vm.swappiness = 10
    

    执行sysctl -p生效

  2. 文件描述符限制

    # /etc/security/limits.conf
    * soft nofile 65535
    * hard nofile 65535
    
  3. 磁盘I/O优化

    • 使用SSD硬盘
    • 文件系统选择ext4或xfs
    • 挂载选项添加noatime,nodiratime

二、Nginx优化

  1. 配置优化

    worker_processes auto; # 自动设置为CPU核心数
    worker_connections 10240;
    multi_accept on;
    use epoll;
    
    # 开启gzip压缩
    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 2;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript;
    
    # 静态文件缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
       expires 30d;
       access_log off;
    }
    
  2. 启用HTTP/2

    listen 443 ssl http2;
    
  3. 启用Brotli压缩(需安装模块)

    brotli on;
    brotli_comp_level 6;
    brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    

三、MySQL优化

  1. 配置优化(my.cnf)

    [mysqld]
    innodb_buffer_pool_size = 总内存的50-70%
    innodb_log_file_size = 256M
    innodb_flush_log_at_trx_commit = 2 # 非关键业务可设为2
    sync_binlog = 0
    query_cache_type = 0 # MySQL 8.0已移除查询缓存
    max_connections = 500
    table_open_cache = 2000
    
  2. 索引优化

    • 为常用查询字段添加合适索引
    • 避免过度索引
    • 定期使用ANALYZE TABLE更新统计信息
  3. 查询优化

    • 使用EXPLAIN分析慢查询
    • 避免SELECT *
    • 合理使用JOIN

四、PHP优化

  1. PHP-FPM配置

    pm = dynamic
    pm.max_children = 50
    pm.start_servers = 10
    pm.min_spare_servers = 5
    pm.max_spare_servers = 20
    pm.max_requests = 500 # 防止内存泄漏
    
  2. OPcache启用

    zend_extension=opcache.so
    opcache.enable=1
    opcache.memory_consumption=128
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=4000
    opcache.revalidate_freq=60
    opcache.fast_shutdown=1
    
  3. 其他优化

    • 升级到PHP 7.4+或PHP 8.x
    • 使用JIT编译(PHP 8.0+)

五、缓存策略

  1. 对象缓存

    • 安装Redis或Memcached
    • 使用APCu进行本地缓存
  2. 页面缓存

    • 使用Nginx FastCGI缓存
    • 或使用Varnish
  3. 数据库缓存

    • 查询缓存(MySQL 5.7及以下版本)
    • 使用Redis作为MySQL缓存

六、监控与维护

  1. 监控工具

    • Prometheus + Grafana
    • New Relic
    • 阿里云/腾讯云监控
  2. 定期维护

    • MySQL表优化
    • 日志轮转
    • 系统更新
  3. 压力测试

    ab -n 10000 -c 100 http://example.com/
    wrk -t4 -c1000 -d30s http://example.com/
    

通过以上优化,LNMP环境的性能通常能有显著提升。具体配置应根据服务器硬件配置和实际业务需求进行调整。