如何优化Ubuntu Apache的磁盘I/O
导读:Ubuntu 上优化 Apache 磁盘 I/O 的实用方案 一 系统层优化 使用 SSD 承载 /var/www 与 /var/log/apache2,并优先选择 ext4 或 XFS 等现代文件系统;在 /etc/fstab 中为数据...
Ubuntu 上优化 Apache 磁盘 I/O 的实用方案
一 系统层优化
- 使用 SSD 承载 /var/www 与 /var/log/apache2,并优先选择 ext4 或 XFS 等现代文件系统;在 /etc/fstab 中为数据盘启用 noatime(必要时加 nodiratime)以减少元数据写入:
- 示例:/dev/sda1 /var/www ext4 defaults,noatime,nodiratime 0 2
- 示例:/dev/sdb1 /var/log/apache2 ext4 defaults,noatime,nodiratime 0 2
- 选择合适的 I/O 调度器:SSD 更适合 noop/deadline,机械盘可用 deadline/cfq。运行时可临时切换:
- echo deadline | sudo tee /sys/block/sdX/queue/scheduler
- 适度增大 脏页写回阈值,减少频繁小写入(示例为 5 秒,请结合业务与数据安全性评估):
- echo 5000 | sudo tee /proc/sys/vm/dirty_writeback_centisecs
- 预留足够的 文件描述符 上限,避免 “Too many open files”:
- 在 /etc/security/limits.conf 增加:* soft nofile 65535;* hard nofile 65535
- 监控与定位:用 iostat -x 1、iotop 观察 await、r/s、w/s、util% 等指标,确认瓶颈后再细化调优。
二 Apache 配置优化
- 启用与调整 HTTP Keep-Alive,复用连接以降低握手与日志、文件打开/关闭次数:
- KeepAlive On
- MaxKeepAliveRequests 100
- KeepAliveTimeout 5
- 优化静态文件传输与内核旁路:
- EnableSendfile On(内核零拷贝发送文件)
- EnableMMAP Off(避免某些场景下的双重缓冲;若文件较小或随机访问较多,可改为 On 实测对比)
- 合理设置 缓冲区 与 日志,减少磁盘操作频次:
- BufferSize 8192(按业务与并发实测微调)
- LogLevel warn(非必要时避免 info/debug)
- 使用 rotatelogs 按天切分日志,控制单日志体积:
- CustomLog “|/usr/sbin/rotatelogs /var/log/apache2/access_log.%Y-%m-%d 86400” combined
- 启用 压缩 与 缓存,降低传输与后端磁盘/数据库压力:
- a2enmod deflate;对 text/html、text/css、application/javascript 等启用压缩
- a2enmod cache;按需配置 CacheEnable disk / 与过期时间,缓存可命中内容减少磁盘读
三 MPM 选择与并发调优
- 按应用特性选择 MPM:
- prefork:兼容性好(如非线程安全模块/PHP),但内存占用高
- worker/event:更高并发、更低内存占用;高并发优先 event
- 典型并发参数示例(需结合内存与压测微调):
- prefork:
- StartServers 5;MinSpareServers 5;MaxSpareServers 10
- MaxRequestWorkers 150(由内存与单进程占用决定)
- MaxConnectionsPerChild 1000(防内存泄漏累积)
- event:
- StartServers 5;MinSpareServers 5;MaxSpareServers 10
- MaxRequestWorkers 1000(依据内存与后端能力)
- MaxConnectionsPerChild 1000
- prefork:
- 切换 MPM 与生效:编辑 /etc/apache2/mods-enabled/mpm.conf(或相应 MPM 配置文件),然后执行:
- sudo systemctl restart apache2
四 验证与持续监控
- 基准与压测:使用 ab/siege 对关键页面做压测,观察 TPS、响应时间、错误率 的变化,验证优化成效。
- 运行时观测:
- iostat -x 1(关注 await、r/s、w/s、util%;util 持续接近 100% 多为磁盘瓶颈)
- iotop(定位具体进程的磁盘读写)
- 日志与缓存命中:观察 access.log 增长速率、缓存命中率与后端数据库/存储压力是否下降,必要时继续微调 KeepAlive、缓存策略、MPM 并发。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何优化Ubuntu Apache的磁盘I/O
本文地址: https://pptw.com/jishu/767043.html
