ubuntu lamp如何提高速度
小樊
32
2025-12-14 06:46:33
Ubuntu LAMP 性能优化路线图
一 基线评估与瓶颈定位
- 明确目标:以真实业务场景做压测(如 ab/wrk/siege),记录 TTFB、RPS、P95/P99 延迟、错误率,每次只改一处并对比前后指标。
- 资源与连接:用 top/htop、iostat、vmstat、netstat -s、ss -s 观察 CPU、内存、I/O、连接数、重传 等,定位是 CPU 计算、I/O 等待、数据库、还是网络 成为瓶颈。
- 数据库:开启慢查询日志,抓取 慢 SQL,用 EXPLAIN 检查是否走索引、扫描行数是否过大。
- 应用与 PHP:用 XHProf/Blackfire 或 PHP-FPM slowlog 找出耗时函数、N+1 查询、外部接口阻塞等。
- 结论先行:先找到“最痛”的那个瓶颈,再针对性优化,避免一次性大改导致难以归因。
二 Apache 与 PHP 层优化
- 启用压缩与长连接:开启 mod_deflate(Gzip)减小传输体积;开启 KeepAlive 减少握手开销,建议示例:
- KeepAlive On
- MaxKeepAliveRequests 100
- KeepAliveTimeout 5
- 工作模式与并发:根据并发与内存选择 prefork/worker/event;合理设置 MaxRequestWorkers/MaxConnectionsPerChild,避免过小(排队)或过大(内存吃紧)。
- 页面与静态资源缓存:启用 mod_expires 设置 Cache-Control/Expires,对图片、CSS、JS 等设置较长缓存时间,减少重复请求。
- PHP 执行加速:启用 OPcache(字节码缓存),示例关键参数:
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
- 进程模型:高并发动态站点建议采用 PHP-FPM + mod_proxy_fcgi(或反向代理)替代 mod_php,获得更稳定的并发与资源隔离。
三 MySQL MariaDB 优化
- 内存关键参数:结合内存容量设置 innodb_buffer_pool_size(如 1G 起步,视总内存上调)、key_buffer_size(MyISAM 场景),减少磁盘 I/O。
- 索引与查询:为高频 WHERE/JOIN/ORDER BY 列建立合适索引,避免全表扫描;精简 SQL、合并多次查询、合理使用分页与缓存。
- 维护与结构:定期 ANALYZE/OPTIMIZE TABLE、重建碎片化索引;审视表结构与数据类型,避免过度范式化导致的多表 JOIN。
- 架构演进:读多写少场景引入 主从复制 或 读写分离;超大规模再考虑 分库分表。
四 缓存与内容分发
- 数据缓存:引入 Redis/Memcached 缓存热点数据、会话与计算结果,显著降低数据库压力与响应时间。
- 反向代理与全页缓存:使用 Varnish 作为反向代理/HTTP 加速器,缓存可缓存内容(含部分动态页面),大幅减轻后端负载。
- 边缘加速:将 静态资源(图片、CSS、JS、视频) 接入 CDN,缩短用户与资源的物理距离并减少源站带宽。
五 系统与网络优化
- 硬件与存储:优先使用 SSD,并视负载 增加内存,可显著改善 I/O 与稳定性。
- 文件描述符与内核网络:提升进程可打开文件数(如 ulimit -n 65535),优化 TCP 参数(如 net.ipv4.tcp_tw_reuse=1、net.ipv4.tcp_fin_timeout=30),提升高并发连接处理能力。
- 监控与迭代:持续用 top/htop、iostat、vmstat 等观察瓶颈变化,配合 日志分析 验证优化成效,形成“压测—优化—复测”的闭环。