Debian上LAMP栈怎么优化
小樊
44
2025-12-06 20:52:51
Debian 上 LAMP 栈优化实操指南
一 基线检查与系统加固
- 保持系统与软件为稳定版并及时更新:执行 sudo apt update && sudo apt upgrade -y;为关键数据建立定期备份与可回滚方案。
- 开启并正确配置防火墙:sudo ufw allow ‘Apache Full’;如数据库仅本机访问,限制 MySQL 端口仅 127.0.0.1。
- 强化 SSH 安全:禁用 root 远程登录、使用 SSH 密钥认证。
- 建立监控与告警:部署如 Prometheus + Grafana 或基础工具(如 top/htop、vmstat、iostat)观察 CPU、内存、I/O、连接数 等关键指标。
- 规划高可用:当单机已达瓶颈,考虑负载均衡与读写分离。
二 Apache 优化
- 精简模块:仅启用必要模块,禁用无用模块(如 a2dismod 不需要的模块),减少内存与攻击面。
- 连接与会话:启用 KeepAlive On,将 KeepAliveTimeout 设为 5 秒左右,降低握手开销同时避免占用过长连接。
- 并发与复用:结合内存与业务并发调优 MaxRequestWorkers(旧称 MaxClients);适度提高 MaxConnectionsPerChild 以回收长期占用进程,避免内存泄漏累积。
- 静态资源缓存:启用 mod_cache/mod_cache_disk,对图片、CSS、JS 等设置合适 Cache-Control/Expires,显著降低后端压力。
- 压缩传输:启用 mod_deflate 对文本类内容进行 Gzip 压缩,减少带宽与时延。
- 架构取舍:静态资源占比高或并发极大时,可用 Nginx 作为反向代理/静态资源服务器,或与 Apache 协同(如 Nginx 处理静态、Apache 处理动态)。
三 MariaDB/MySQL 优化
- 内存核心参数:将 innodb_buffer_pool_size 设为可用内存的约 60%–75%(数据库专用场景),提升缓冲命中率;如为 MyISAM 为主可适当设置 key_buffer_size。
- 并发与资源:根据连接压力与内存调 max_connections,避免过大导致上下文切换与内存膨胀。
- 查询与索引:用 EXPLAIN 分析慢查询,建立合适索引,避免全表扫描与临时表;定期分析与优化表结构。
- 缓存策略:在 MySQL 5.7 及更早版本可启用 query_cache(如 query_cache_size=64M、query_cache_type=1);在 8.0+ 默认已移除,建议以应用层缓存替代。
- 维护与扩展:定期执行维护任务(如碎片整理/优化表);高并发与大数据量场景引入 Redis/Memcached 做会话与热点数据缓存,必要时做读写分离与分库分表。
四 PHP 优化
- 启用字节码缓存:安装并启用 OPcache(sudo apt install php-opcache;phpenmod opcache),显著提升脚本执行性能。
- 执行与内存:按应用需求合理设置 memory_limit、max_execution_time、upload_max_filesize,避免无界增长导致 OOM 或超时。
- 输出与缓冲:开启 output_buffering,减少小块输出引发的多次网络往返。
- 会话与缓存:将 session.save_handler 调整为 redis/memcached,提升并发写入与横向扩展能力。
- 扩展与连接:仅安装必要扩展,使用 持久化数据库连接(如 PDO 长连接/连接池)降低握手开销。
五 内核与网络优化
- 文件描述符与队列:提升 fs.file-max 与 net.core.somaxconn,缓解高并发下连接排队。
- TCP 复用与回收:开启 net.ipv4.tcp_tw_reuse = 1,加速 TIME_WAIT 状态回收;结合业务与内核版本评估 tcp_tw_recycle(新内核常已移除或不建议启用)。
- 网络缓冲:适度增大 net.core.rmem_max、net.core.wmem_max 等缓冲区,提升大流量场景吞吐。
- 变更生效:在 /etc/sysctl.conf 或 /etc/sysctl.d/*.conf 中写入参数后执行 sudo sysctl -p 使其生效。