温馨提示×

centos lamp资源占用优化

小樊
41
2026-01-02 08:53:46
栏目: 智能运维

CentOS LAMP 资源占用优化实战指南

一 系统层优化

  • 文件描述符与进程限制
    • 提升系统全局与用户/进程级上限,避免“too many open files”和连接数受限:
      • /etc/security/limits.conf
        * soft nofile 65535
        * hard nofile 65535
        * soft nproc  65535
        * hard nproc  65535
        mysql soft nofile 65535
        mysql hard nofile 65535
        apache soft nofile 65535
        apache hard nofile 65535
        
      • /etc/sysctl.conf
        fs.file-max = 1000000
        
      • 使内核参数生效:sysctl -p
  • 网络内核参数
    • 提升并发连接处理能力、缩短 TIME_WAIT 回收、优化内核网络栈:
      net.ipv4.tcp_tw_reuse = 1
      net.ipv4.tcp_tw_recycle = 0        # NAT/负载均衡环境务必为0
      net.ipv4.tcp_fin_timeout = 30
      net.ipv4.tcp_max_tw_buckets = 20000
      net.ipv4.ip_local_port_range = 1024 65000
      net.ipv4.tcp_rmem = 4096 87380 16777216
      net.ipv4.tcp_wmem = 4096 16384 16777216
      net.core.rmem_max = 16777216
      net.core.wmem_max = 16777216
      net.core.netdev_max_backlog = 30000
      net.ipv4.tcp_max_syn_backlog = 4096
      net.core.somaxconn = 4096
      net.ipv4.tcp_syncookies = 1
      net.ipv4.tcp_max_orphans = 262144
      net.ipv4.tcp_keepalive_time = 600
      net.ipv4.tcp_keepalive_intvl = 30
      net.ipv4.tcp_keepalive_probes = 3
      net.ipv4.tcp_slow_start_after_idle = 0
      
  • 内存与 I/O 调度
    • 降低换页倾向、优化脏页回写、为 SSD 选择合适 I/O 调度器:
      vm.swappiness = 0
      vm.dirty_background_ratio = 5
      vm.dirty_ratio = 10
      
    • 查看与设置调度器(示例磁盘为 /dev/sda):
      cat /sys/block/sda/queue/scheduler
      echo deadline > /sys/block/sda/queue/scheduler   # SSD/通用推荐
      # 或 echo noop > /sys/block/sda/queue/scheduler
      
    • 文件系统挂载优化(/etc/fstab):使用 ext4/XFS,并添加 noatime 减少元数据写入。以上调整需结合业务与硬件特性逐步验证。

二 Apache 优化

  • 选择并启用 Event MPM(适合高并发、长连接场景):
    • 安装模块:yum install -y httpd-event
    • 启用模块:在 /etc/httpd/conf.modules.d/00-mpm.conf 中取消注释
      LoadModule mpm_event_module modules/mod_mpm_event.so
      
  • 核心 MPM 与超时
    ServerLimit 256
    StartServers 8
    MinSpareThreads 64
    MaxSpareThreads 256
    ThreadsPerChild 64
    MaxRequestWorkers 2048
    MaxConnectionsPerChild 10000
    
    Timeout 30
    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 2
    
  • 静态资源与压缩
    EnableSendfile On
    LoadModule deflate_module modules/mod_deflate.so
    DeflateCompressionLevel 6
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
    
  • 日志与模块
    LogLevel warn
    CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log.%Y%m%d 86400" combined
    # 禁用不需要的模块(如 HostnameLookups Off)
    
  • 说明:若应用为 PHP 动态为主且并发极高,可考虑以 Nginx + PHP-FPM 承载静态与反向代理,Apache 仅作应用后端,以进一步降低占用。

三 MySQL MariaDB 优化

  • 连接与会话
    [mysqld]
    max_connections = 1000
    skip-name-resolve = 1
    
  • InnoDB 缓冲池(建议为可用内存的 50%–70%,示例为 8GB 内存)
    innodb_buffer_pool_size = 8G
    innodb_buffer_pool_instances = 8
    innodb_flush_method = O_DIRECT
    innodb_flush_log_at_trx_commit = 2
    innodb_log_file_size = 256M
    innodb_log_buffer_size = 16M
    innodb_file_per_table = 1
    
  • 查询与临时表
    query_cache_type = 0
    query_cache_size = 0
    tmp_table_size = 64M
    max_heap_table_size = 64M
    
  • 慢查询与监控
    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/slow.log
    long_query_time = 1
    log_queries_not_using_indexes = 0
    
  • 说明:高并发/写密集场景优先保障缓冲池与 I/O,必要时分离读/写实例或引入缓存层。

四 PHP 与缓存层优化

  • PHP-FPM 进程模型与池配置(/etc/php-fpm.d/www.conf)
    [www]
    pm = dynamic
    pm.max_children = 150
    pm.start_servers = 10
    pm.min_spare_servers = 10
    pm.max_spare_servers = 30
    pm.max_requests = 500
    request_terminate_timeout = 30
    listen.backlog = 4096
    rlimit_files = 65535
    
  • PHP 运行时
    • 启用 OPcache(生产环境强烈建议):
      opcache.enable=1
      opcache.memory_consumption=128
      opcache.interned_strings_buffer=16
      opcache.max_accelerated_files=10000
      opcache.validate_timestamps=0     # 生产建议关闭,部署时再开启
      opcache.revalidate_freq=0
      
    • 禁用不必要的扩展(如 xdebug、pdo_mysql 之外的非必需扩展),减少内存与初始化开销。
  • 应用与数据缓存
    • 引入 Redis/Memcached 做对象/页面缓存,降低数据库与 PHP 计算压力。
    • 静态资源启用 mod_deflate 压缩;动态全页可在前端叠加 Varnish/Nginx 反向代理缓存。

五 监控验证与回滚

  • 监控与日志
    • 系统资源:top/htop、vmstat 1、iostat -x 1、sar -n DEV 1
    • 连接与端口:ss -s、netstat -anp | grep :80 | wc -l
    • MySQL:mysqladmin status、SHOW PROCESSLIST;、SHOW ENGINE INNODB STATUS\G
    • 日志轮转:确保 logrotatehttpd、mysqld 按日切分并压缩,避免磁盘被撑满。
  • 压力测试与基线
    • 逐步加压验证:先用 ab/wrk 做小流量基线,再用 sysbench 压测数据库,观察 CPU、内存、I/O、连接数、错误率P95/P99 延迟,每次只变更一个变量并保留回滚方案。
  • 安全与稳态
    • 保持系统与组件 及时更新;仅开放必要端口(如 80/443),使用 firewalld 管理规则;谨慎调整 SELinux,优先通过策略放行而非直接关闭。
  • 风险提示
    • 修改内核、MPM、PHP-FPM、MySQL 参数前务必备份配置与数据,先在测试环境验证;参数需结合实例规格与业务特征微调,避免一次性大幅变更导致抖动或中断。

0