centos

Apache在CentOS上的性能瓶颈怎么破

小樊
43
2025-10-07 00:56:42
栏目: 智能运维

Apache在CentOS上的性能瓶颈破解方法

1. 调整MPM(多处理模块)设置

MPM是Apache处理并发的核心组件,CentOS默认使用prefork(适合兼容性但内存消耗高),可根据负载切换为event(高性能,支持高并发)。需修改/etc/httpd/conf.modules.d/00-mpm.conf(CentOS 7+),例如:

修改后需重启Apache(systemctl restart httpd)使配置生效。

2. 优化KeepAlive设置

KeepAlive可减少TCP连接建立/关闭的开销,但设置不当会导致连接占用过多。在httpd.conf中调整:

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

平衡连接复用与资源占用,高并发场景下可适当降低KeepAliveTimeout

3. 启用静态文件缓存

静态文件(CSS、JS、图片)的频繁读取会增加磁盘I/O。使用mod_expires模块设置缓存策略,在httpd.conf中添加:

<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),减小传输数据量。在httpd.conf中添加:

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

注意:避免压缩图片(已压缩格式),防止CPU消耗过大。

5. 禁用不必要的模块

加载过多模块会增加内存消耗。通过httpd -M命令查看已加载模块,注释掉不需要的模块(如mod_php(若用PHP-FPM替代)、mod_authz_core(若不需要细粒度权限)),例如:

# LoadModule authz_core_module modules/mod_authz_core.so
# LoadModule authz_host_module modules/mod_authz_host.so

减少不必要的资源占用。

6. 调整系统内核参数

优化内核参数提升网络与文件系统性能,编辑/etc/sysctl.conf

net.core.somaxconn = 65535       # 监听队列最大长度
net.ipv4.tcp_max_syn_backlog = 65535  # SYN队列最大长度
net.ipv4.tcp_tw_reuse = 1        # 复用TIME_WAIT连接
net.ipv4.tcp_fin_timeout = 30    # TIME_WAIT超时时间(秒)
net.core.rmem_max = 16777216     # 接收缓冲区最大值
net.core.wmem_max = 16777216     # 发送缓冲区最大值

执行sysctl -p使配置生效。

7. 调整文件描述符限制

高并发下,默认文件描述符限制(通常1024)会导致连接失败。修改/etc/security/limits.conf

* soft nofile 65535
* hard nofile 65535

同时编辑/etc/systemd/system/httpd.service.d/override.conf(若使用systemd):

[Service]
LimitNOFILE=65535

重启Apache使配置生效。

8. 使用缓存代理

通过mod_cachemod_cache_disk模块缓存动态/静态内容,减少后端请求。在httpd.conf中添加:

LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
<IfModule mod_cache.c>
    <IfModule mod_cache_disk.c>
        CacheRoot "/var/cache/apache2/mod_cache_disk"
        CacheEnable disk /
        CacheDirLevels 2
        CacheDirLength 1
    </IfModule>
</IfModule>

缓存静态资源或动态页面(如PHP输出),提升响应速度。

9. 监控与日志优化

10. 考虑负载均衡

若单台服务器无法满足需求,可使用mod_proxymod_proxy_balancer模块配置负载均衡,将请求分发到多台Apache服务器。示例配置:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
<Proxy balancer://mycluster>
    BalancerMember http://192.168.1.101:80
    BalancerMember http://192.168.1.102:80
</Proxy>
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/

提升整体并发处理能力。

0
看了该问题的人还看了