1. 高CPU使用率
Apache日志中频繁出现%CPU高的记录(可通过top、htop或日志分析工具提取),主要源于配置不当(如MaxRequestWorkers设置过高导致进程/线程竞争)、复杂应用逻辑(如动态页面未优化)或资源争抢。需通过调整MPM模块参数(如prefork模式下降低MaxRequestWorkers)、优化应用代码(减少循环嵌套、数据库查询)或升级CPU硬件缓解。
2. 内存不足
日志中出现Out of Memory (OOM)错误或内存警告(如free -m显示内存耗尽),通常因Apache进程占用过多内存(如MaxRequestWorkers超过服务器内存承载能力)或内存泄漏(如第三方模块bug)。需调整MaxRequestWorkers至合理范围(如根据服务器内存计算:可用内存/单个Apache进程内存占用)、禁用不必要的模块(如mod_php改用php-fpm分离模式)或增加服务器内存。
3. 磁盘I/O瓶颈
日志中显示大量读写操作(如iowait值高、iotop显示磁盘利用率100%),多因访问日志、错误日志写入频繁(如高流量下日志量激增)或磁盘性能差(如机械硬盘)。需启用日志轮转(logrotate配置compress压缩旧日志、rotate保留合理天数)、将日志写入SSD(减少I/O延迟)或异步写入日志(Apache 2.4+的mod_log_config异步功能)。
4. 网络延迟或丢包
日志中TIME_WAIT、SYN_RECV等TCP状态码异常增多(如netstat -tulnp显示大量连接处于等待状态),或响应时间过长(如access_log中%D字段值高),主要因网络带宽不足、丢包或路由问题。需通过网络监控工具(如iftop、nload)检查带宽使用、排查网络设备故障(如交换机、路由器)或联系ISP优化网络线路。
5. 连接数过多
日志中显示达到或超过MaxClients(prefork模式)或MaxRequestWorkers(worker/event模式)限制(如error_log中出现“Too many connections”错误),导致新请求被拒绝。需调整MPM模块参数(如prefork模式下增加MaxRequestWorkers,但需兼顾内存限制;event模式下优化ThreadsPerChild),或启用负载均衡(mod_proxy_balancer)分散请求压力。
6. 数据库慢查询
应用日志(如PHP的error_log)或Apache日志中显示请求处理时间过长(如access_log中%D字段超过1秒),关联数据库慢查询日志(如MySQL的slow_query_log)后发现未优化查询(如缺少索引、全表扫描)。需通过EXPLAIN分析查询计划、添加合适索引(如针对WHERE子句字段)、分批处理大查询(如LIMIT分页)或优化数据库配置(如增加innodb_buffer_pool_size)。
7. 静态资源未缓存
日志中频繁出现静态资源(如图片、CSS、JS)的重复请求(如access_log中同一URL多次出现200状态码),导致服务器重复读取磁盘、传输数据。需配置缓存策略(如mod_expires设置Expires头、mod_headers设置Cache-Control头),让浏览器缓存静态资源,减少服务器负载。
8. 未启用压缩
日志中传输的响应体积过大(如access_log中%B字段显示大字节),导致网络传输时间延长。需启用mod_deflate模块(AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript),压缩HTML、CSS、JS等文本资源,减少传输数据量。