Ubuntu LAMP 提升并发的实用路线图
从系统、Apache、PHP、MySQL 到缓存与扩展,按下面顺序优化,能在不更换技术栈的前提下显著提升并发能力。
一 系统层优化
- 提升文件描述符与内核网络参数:提高 fs.file-max、net.core.somaxconn、net.ipv4.tcp_max_syn_backlog,开启 net.ipv4.tcp_tw_reuse、合理设置 net.ipv4.tcp_fin_timeout,适度降低 vm.swappiness,可显著缓解连接瓶颈与内存回收压力。示例(写入 /etc/sysctl.conf 后执行 sysctl -p):
- fs.file-max = 2097152
- net.core.somaxconn = 65535
- net.ipv4.tcp_max_syn_backlog = 65535
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_fin_timeout = 30
- vm.swappiness = 10
- 资源与后台进程治理:关闭不必要的服务与守护进程,减少内存与 CPU 争用;为关键服务设置合适的 systemd 资源限制与 OOM 策略。
- 存储与网络:优先使用 SSD,并优化挂载选项;对外服务建议接入 CDN 承载静态资源,降低源站压力与网络时延。
二 Apache 层优化
- 选择高效 MPM:Ubuntu 默认 Prefork 稳健但并发能力有限;在 PHP 为线程安全或采用 PHP-FPM 时,优先使用 Event MPM(高并发、低开销);若需线程化且走 mod_php,可选 Worker MPM。切换前用 apache2ctl -V 查看当前 MPM。
- 关键并发参数:结合内存与业务类型调整 MaxRequestWorkers(并发工作单元上限)、MaxConnectionsPerChild(回收长生命周期进程/线程,防内存泄漏)、KeepAlive(建议开启并合理设置 KeepAliveTimeout)、以及 Timeout。启用 HTTP/2 提升多路复用能力,启用 mod_deflate 压缩与 mod_expires/mod_headers 做浏览器缓存与头部治理。
- 典型场景建议:
- 动态为主、需线程化且走 mod_php:选 Worker MPM,并控制 MaxRequestWorkers,避免内存膨胀。
- 高并发通用场景:选 Event MPM + PHP-FPM,获得更好的连接与内存效率。
三 PHP 层优化
- 必装 OpCode 缓存:启用 OPcache(PHP 5.5+ 内置),减少脚本编译开销;如使用旧版 PHP,可考虑 APCu/XCache 等加速器,通常可带来数倍性能提升。
- 运行模式与进程管理:
- 走 mod_php 时,MPM 通常选 Worker/Event,注意线程安全与扩展兼容性。
- 走 PHP-FPM(推荐):使用 ondemand/static 进程模型,结合 pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers 与 request_terminate_timeout 精细控内存与响应。
- 配置与代码:合理设置 memory_limit,禁用不必要的扩展与模块;优化 SQL 与外部调用次数,减少阻塞与 I/O。
四 MySQL 层优化
- 内存与缓存:根据内存大小调优 innodb_buffer_pool_size(通常占可用内存的 50%–70%)、合理设置 key_buffer_size、连接与会话缓存等,减少磁盘 I/O。
- 索引与查询:为高频查询建立合适索引,避免全表扫描;精简与改写慢 SQL,合并批量操作,减少往返次数。
- 架构扩展:读多写少场景引入 主从复制 与读写分离;缓存层使用 Redis/Memcached 承载热点数据与计算结果,降低数据库压力。
五 缓存与扩展架构
- 页面与反向代理缓存:在源站前部署 Varnish 或 Nginx 反向代理,缓存静态资源与可缓存的动态片段,显著降低 Apache/PHP 压力。
- 数据缓存:使用 Redis/Memcached 做对象/会话/页面片段缓存,缩短请求路径与数据库负载。
- 内容分发:将图片、CSS、JS 等静态资源托管至 CDN,减少跨域与长距离传输时延,提升首屏与整体吞吐。
- 水平扩展:当单机已达瓶颈,引入 HAProxy/LVS 等负载均衡,将流量分发至多台 LAMP 实例,实现容量线性扩展。