1. 自定义中间件记录请求性能
创建自定义中间件(如app/middleware/RequestPerformance.php
),通过microtime(true)
记录请求开始和结束时间,计算耗时(毫秒),并将请求方法、URL、IP、状态码、耗时等信息写入日志(如专门的performance
通道)。然后在app/middleware.php
中注册该中间件,实现全局请求耗时监控。结合Logstash、Fluentd等日志收集工具,将日志导入Elasticsearch或Loki,通过Kibana或Grafana构建实时性能仪表盘。
2. 利用ThinkPHP事件机制深度监控
通过ThinkPHP的事件系统(如app/event.php
)监听关键事件(如app_init
应用初始化、app_end
应用结束、think\db\QueryExecuted
SQL执行完成),在事件回调中插入计时逻辑,精确测量特定环节(如应用启动、数据库查询)的耗时。这种方式适合定位隐藏在业务逻辑中的性能瓶颈,例如慢SQL查询。
3. 集成APM工具实现全链路监控
使用New Relic、Datadog或SkyWalking等APM(应用性能管理)工具,它们能自动追踪ThinkPHP应用的请求链路、数据库查询、缓存操作、外部服务调用等性能指标,提供实时可视化(如Dashboard)和告警功能(如耗时超过阈值触发邮件/短信通知)。这类工具无需大量代码修改,适合生产环境的全链路性能监控。
4. 采用Prometheus+Grafana监控系统指标
在Linux服务器上安装Prometheus(时间序列数据库)和Grafana(可视化工具),通过ThinkPHP应用中的Prometheus客户端(如think-prometheus
扩展)暴露自定义指标(如请求总数、错误率、内存使用、数据库查询时间),Prometheus定期抓取这些指标并存储,Grafana则通过Prometheus数据源创建直观的监控面板,实现系统性能的趋势分析和告警。
5. 使用Linux原生命令监控服务器性能
通过top
(实时查看进程CPU/内存占用)、vmstat
(监控虚拟内存、进程、CPU活动)、iostat
(监控磁盘I/O读写速度、等待时间)、sar
(收集系统活动信息并生成报告)、netstat
(查看网络连接、接口统计)等命令,快速了解服务器整体性能状态,定位系统级瓶颈(如CPU过载、内存不足、磁盘IO瓶颈)。
6. 代码与数据库性能优化辅助
EXPLAIN
分析慢SQL,添加索引优化查询,开启ThinkPHP的数据库查询缓存(db_cache
配置项),使用Eager Loading(预加载)解决N+1查询问题;cache_on
配置项)、模板缓存(template_cache
配置项),使用Redis或Memcached缓存频繁访问的数据,减少数据库压力。