温馨提示×

ubuntu lamp缓存优化策略

小樊
44
2025-12-08 08:14:42
栏目: 智能运维

Ubuntu LAMP 缓存优化策略

一 分层缓存总体思路

  • 建议采用自下而上的多层缓存:
    1. 应用层:PHP 字节码缓存(OPcache)+ 用户数据缓存(APCu/Memcached/Redis)。
    2. Web 层:Apache 页面/对象缓存(mod_cache_disk)+ 浏览器缓存(mod_expires)。
    3. 数据层:MySQL/MariaDB 缓冲池(InnoDB buffer pool)与查询缓存(视版本与负载)。
    4. 边缘层:静态资源走 CDN,动态内容可叠加 Varnish 反向代理。
  • 配合压缩与连接复用(mod_deflate、KeepAlive)可进一步降低带宽与握手开销。

二 Apache 层缓存配置

  • 启用模块
    • 启用磁盘缓存与过期控制:sudo a2enmod cache cache_disk expires deflate
  • 启用压缩(mod_deflate)
    • 建议在虚拟主机或全局配置中加入:
      <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
      </IfModule>
      
  • 浏览器缓存(mod_expires)
    • 对静态资源设置长期 Cache-Control/Expires:
      <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType image/jpg  "access plus 1 month"
        ExpiresByType text/css  "access plus 1 week"
        ExpiresByType application/javascript "access plus 1 week"
      </IfModule>
      
  • 页面/对象缓存(mod_cache_disk)
    • 示例(按目录或虚拟主机启用):
      <IfModule mod_cache.c>
        <IfModule mod_cache_disk.c>
          CacheRoot "/var/cache/apache2/mod_cache_disk"
          CacheEnable disk  /
          CacheDirLevels 2
          CacheDirLength 1
          CacheIgnoreHeaders Set-Cookie
          CacheMaxExpire 86400
          CacheDefaultExpire 3600
        </IfModule>
      </IfModule>
      
  • 验证与生效
    • 检查模块:apache2ctl -M | egrep 'cache|disk_cache|expires|deflate'
    • 重载生效:sudo systemctl reload apache2
  • 可选:高并发场景优先使用 MPM Event 并配合 KeepAlive,以提升连接复用与吞吐。

三 PHP 层缓存配置

  • OPcache(字节码缓存,PHP 5.5+ 内置)
    • 建议基础配置(php.ini):
      [opcache]
      opcache.enable=1
      opcache.memory_consumption=128
      opcache.interned_strings_buffer=8
      opcache.max_accelerated_files=10000
      opcache.revalidate_freq=60
      opcache.fast_shutdown=1
      
  • APCu(用户数据缓存,适合 WordPress 等对象/查询结果缓存)
    • 安装:sudo apt-get install php-apcu
    • 启用后在 php.ini 加入:extension=apcu.so
    • 应用侧使用 APCu 存储频繁读取的数据(如配置、片段、计算结果)。
  • 分布式对象缓存(Memcached/Redis)
    • Memcached:sudo apt-get install php-memcached memcached,配置 -m-l 后重启服务。
    • Redis:sudo apt-get install php-redis,在应用/框架中配置连接 127.0.0.1:6379
  • 说明:传统 APC 已不再维护,PHP 7+ 推荐使用 OPcache + APCu 的组合。

四 MySQL MariaDB 层缓存优化

  • InnoDB 缓冲池(核心)
    • 将大部分可用内存分配给 InnoDB 数据/索引缓存(需为系统与其他进程预留内存):
      • 示例:innodb_buffer_pool_size=1G(在 my.cnf 的 [mysqld] 段)。
  • 查询缓存(视版本与负载)
    • 对读多写少、结果集稳定的场景可开启:
      • 示例:query_cache_type=1query_cache_size=64M(注意高并发写入时可能带来锁争用)。
  • MyISAM 场景(如仍在使用)
    • 可设置键缓存:key_buffer_size=256M(示例值),并合理调整会话级缓冲区,避免过大导致内存浪费。
  • 其他常用项(按负载调优)
    • innodb_log_file_sizeinnodb_flush_log_at_trx_commit 等参数结合持久性与吞吐目标权衡。
  • 建议:优先保障 InnoDB 缓冲池命中率,查询缓存仅作为补充手段。

五 边缘层与运维实践

  • 边缘缓存与网络优化
    • 静态资源使用 CDN 分发,动态内容可前置 Varnish 做反向代理缓存。
    • 启用 HTTP/2(若使用支持 HTTP/2 的前端或反向代理)以多路复用提升加载速度。
  • 监控与维护
    • 定期清理/重建缓存目录(如磁盘缓存)、更新系统与组件、观察命中率与慢查询。
  • 低内存服务器要点(≤512MB
    • 精简 Apache 模块、降低日志级别、控制 PHP 内存(如 memory_limit=48M)、适度设置 OPcache/APCu 的共享内存,必要时考虑 Varnish 前置与对象缓存。

0