centos

CentOS上Apache性能调优有哪些技巧

小樊
49
2025-09-17 19:47:30
栏目: 智能运维

1. 调整MPM(多处理模块)设置
MPM是Apache处理并发请求的核心模块,CentOS默认使用prefork(多进程模型,适合兼容性场景但内存占用高),高并发环境下推荐切换至eventworker(多线程/混合模型,更节省内存)。需修改/etc/httpd/conf.modules.d/00-mpm.conf(或对应模块文件),例如event MPM的典型配置:

<IfModule mpm_event_module>
    StartServers 2       # 启动时的进程数
    MinSpareThreads 25   # 最小空闲线程数
    MaxSpareThreads 75   # 最大空闲线程数
    ThreadLimit 64       # 单个进程的最大线程数
    ThreadsPerChild 25   # 每个子进程创建的线程数
    MaxRequestWorkers 256 # 最大并发请求数(根据内存调整)
    MaxConnectionsPerChild 1000 # 每个子进程处理的最大请求数(防内存泄漏)
</IfModule>

修改后需重启Apache生效。

2. 优化KeepAlive设置
KeepAlive通过复用TCP连接减少建立/关闭的开销,但设置不当会增加内存占用。在httpd.conf中调整:

KeepAlive On           # 启用KeepAlive
MaxKeepAliveRequests 100 # 单个连接最大请求数(避免单个连接占用过久)
KeepAliveTimeout 5     # 连接保持时间(秒,建议5-10秒)

过高的MaxKeepAliveRequestsKeepAliveTimeout会导致连接堆积,需根据并发量平衡。

3. 启用静态文件缓存
通过mod_expires模块为静态资源(CSS、JS、图片)设置缓存时间,减少重复请求。在配置文件中添加:

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css "access plus 30 days"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType application/javascript "access plus 30 days"
</IfModule>

这会告知浏览器缓存静态资源,降低服务器负载。

4. 使用压缩技术减小传输量
通过mod_deflate模块压缩文本类内容(HTML、CSS、JS),减少网络传输时间。在配置文件中添加:

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
</IfModule>

注意:避免压缩图片(如JPEG、PNG),因其本身已压缩,压缩反而会增加CPU开销。

5. 调整系统内核参数
修改/etc/sysctl.conf优化TCP连接和内存管理,提升并发处理能力:

# 增加TCP连接队列长度
net.core.somaxconn = 65535
# 允许重用TIME_WAIT状态的连接
net.ipv4.tcp_tw_reuse = 1
# 减少TIME_WAIT状态的超时时间(秒)
net.ipv4.tcp_fin_timeout = 30
# 增加本地端口范围
net.ipv4.ip_local_port_range = 1024 65535
# 增加SYN队列长度
net.ipv4.tcp_max_syn_backlog = 65535

修改后执行sysctl -p使配置生效。

6. 限制模块加载
禁用不必要的模块(如mod_statusmod_info),减少内存占用。通过httpd -M命令查看已加载模块,编辑/etc/httpd/conf.modules.d/*.conf禁用不需要的模块(注释对应LoadModule行),例如:

# LoadModule status_module modules/mod_status.so
# LoadModule info_module modules/mod_info.so

仅保留必需模块(如mod_rewritemod_ssl)。

7. 优化日志记录
降低日志详细程度,减少磁盘I/O。修改httpd.conf中的LogLevelCustomLog

LogLevel warn          # 设置日志级别为warn(仅记录警告和错误)
CustomLog logs/access_log combined env=!dontlog # 可选:排除特定请求(如静态资源)

对于高流量站点,可将日志写入单独的磁盘分区,避免影响主存储性能。

8. 使用缓存代理
通过mod_cachemod_disk_cache模块缓存动态内容(如PHP页面),减少后端处理次数。在配置文件中添加:

LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
<IfModule mod_cache.c>
    CacheQuickHandler off
    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5
    CacheIgnoreHeaders Set-Cookie
</IfModule>
<IfModule mod_cache_disk.c>
    CacheRoot /var/cache/apache2/mod_cache_disk
    CacheEnable disk /
    CacheDirLevels 2
    CacheDirLength 1
</IfModule>

需创建缓存目录并设置权限:mkdir -p /var/cache/apache2/mod_cache_disk && chown apache:apache /var/cache/apache2/mod_cache_disk

9. 监控与持续调优
使用工具(如tophtopvmstatab)监控Apache性能:

0
看了该问题的人还看了