首页主机资讯如何优化 CentOS Apache2 的内存使用

如何优化 CentOS Apache2 的内存使用

时间2025-11-18 16:32:03发布访客分类主机资讯浏览1457
导读:优化思路与快速估算 目标是让 Apache 的常驻内存稳定在物理内存可承受范围内,同时保留必要的并发能力。先做一次“单进程内存基线”估算:在高峰期用命令查看单个 httpd 进程常驻内存(RSS),例如: ps -o rss,cmd -...

优化思路与快速估算

  • 目标是让 Apache 的常驻内存稳定在物理内存可承受范围内,同时保留必要的并发能力。先做一次“单进程内存基线”估算:在高峰期用命令查看单个 httpd 进程常驻内存(RSS),例如:
    • ps -o rss,cmd -C httpd | tail -n +2 | awk ‘{ sum+=$1} END { print “RSS per httpd (KB):”, sum/NR} ’
    • 或 top/htop 观察单个进程 RES。
  • 估算公式:MaxRequestWorkers ≤ 可用内存 / 单进程RSS。例如:可用内存 4GB、单进程 RSS 40MB,则 MaxRequestWorkers 不宜超过约 100。若估算值过大,应降低并发或优化应用/模块内存占用。
  • 基线确认后,再按下文步骤逐项优化与压测验证。

MPM 选择与核心参数

  • 确认当前 MPM(多处理模块):
    • httpd -V | grep -i mpm(CentOS 常见为 prefork;若使用 worker/event,参数名略有差异)
  • 按 MPM 调整关键并发与生命周期参数(示例为合理起点,需结合压测微调):
    • prefork(进程模型,适合非线程安全模块如部分 mod_php
      <
          IfModule mpm_prefork_module>
          
          StartServers          5
          MinSpareServers       5
          MaxSpareServers      10
          MaxRequestWorkers    150   # 依据“单进程RSS×该值”不超过可用内存
          MaxConnectionsPerChild 1000 # 非0可在长周期运行后回收增长的内存
      <
          /IfModule>
          
      
    • worker/event(线程/事件模型,适合线程安全场景)
      <
          IfModule mpm_worker_module>
          
          StartServers          2
          MinSpareThreads      25
          MaxSpareThreads      75
          ThreadLimit          64
          ThreadsPerChild      25
          MaxRequestWorkers    150
          MaxConnectionsPerChild 1000
      <
          /IfModule>
          
      
  • 连接与超时(减少长连接占用):
    • KeepAlive On
    • MaxKeepAliveRequests 100
    • KeepAliveTimeout 5
  • 修改后重启生效:systemctl restart httpd(或 apache2)。上述参数名在不同 MPM 下含义一致或相近,但数值取舍需以压测为准。

应用与模块层优化

  • 启用压缩与缓存,降低带宽与时延,减少长连接与重复计算:
    • 启用压缩:LoadModule deflate_module modules/mod_deflate.so;DeflateCompressionLevel 6
    • 启用缓存:LoadModule cache_module modules/mod_cache.so;LoadModule cache_disk_module modules/mod_disk_cache.so CacheEnable disk / CacheRoot “/var/cache/apache2” CacheDirLevels 2 CacheDirLength 1
  • 静态资源过期:启用 mod_expires,为图片/CSS/JS 设置合适 Cache-Control/Expires,减少重复请求与后端压力。
  • 精简模块:只启用必需模块(如 a2dismod 禁用不需要的模块),降低常驻内存与攻击面。
  • 若使用 PHP,优先采用 PHP-FPM + OPcache,并合理设置 pm.max_children(同样用“单进程/子进程 RSS × 数量 ≤ 可用内存”估算),避免传统 mod_php 在高并发下的内存放大。

系统层与运维策略

  • 文件描述符与内核参数(提升可达并发与稳定性):
    • /etc/security/limits.conf
      * soft nofile 65535
      * hard nofile 65535
      * soft nproc  65535
      * hard nproc  65535
      
    • /etc/sysctl.conf(按需启用,示例为通用网络与内存调优)
      net.ipv4.tcp_fin_timeout = 30
      net.ipv4.tcp_tw_reuse = 1
      net.ipv4.tcp_keepalive_time = 1200
      net.ipv4.ip_local_port_range = 10000 65000
      net.ipv4.tcp_max_syn_backlog = 8192
      vm.swappiness = 10
      vm.overcommit_memory = 1
      
      执行 sysctl -p 使配置生效。
  • 监控与日志:
    • 实时监控:top/htop、apachetop;观察进程 RSS、请求排队与 5xx 错误。
    • 日志分析:定期查看 /var/log/httpd/error_logaccess_log,定位异常请求、慢请求与潜在攻击。
  • 缓存与临时文件清理(谨慎操作):
    • 仅在内存紧张且确认影响时执行:sync & & echo 3 > /proc/sys/vm/drop_caches(可能导致 IO 飙升,不建议作为常规手段)。

内存泄漏与异常增长的应对

  • 若发现内存随时间持续增长,优先排查应用代码与模块(如 PHP 脚本存在泄漏)。在问题未修复前,可将 MaxConnectionsPerChild/MaxRequestsPerChild 设置为较小值(如 50–100),周期性回收进程以抑制泄漏影响;同时结合错误日志与监控定位根因并修复。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何优化 CentOS Apache2 的内存使用
本文地址: https://pptw.com/jishu/750249.html
CentOS Apache2 怎样进行版本升级 Apache2 在 CentOS 上如何实现 SSL 加密

游客 回复需填写必要信息