在Ubuntu系统中,监控PHP运行状态可通过命令行工具、系统自带工具、PHP内置功能、第三方监控方案及日志分析等多种方式实现,覆盖从基础到高级的不同需求。
命令行是最基础的监控方式,适合实时查看PHP进程状态及资源消耗。
top/htop:top命令可查看系统实时进程列表,默认按CPU使用率排序,通过%CPU、%MEM列识别PHP进程的资源占用;htop是top的增强版(需安装:sudo apt install htop),提供更直观的界面和颜色标识,支持按键过滤(如按P按CPU排序、M按内存排序)。ps命令:ps aux | grep php列出所有含“php”的进程,显示进程ID(PID)、CPU/内存占用、运行时间等详细信息,便于定位异常进程(如僵尸进程)。systemctl:php-fpm(FastCGI进程管理器)形式运行,可通过sudo systemctl status php-fpm查看服务状态(如“active (running)”表示正常);若需查看详细日志,使用sudo journalctl -u php-fpm(实时日志需加-f参数)。netstat/ss:/var/run/php/php-fpm.sock),例如:sudo netstat -tuln | grep php-fpm # 查看TCP监听端口
sudo ss -tuln | grep php-fpm # 更现代的替代命令
若未监听,需检查php-fpm.conf中的listen配置。Ubuntu自带或易安装的图形化工具,适合需要直观界面的用户。
gnome-system-monitor:Glances:sudo apt install glances),支持终端与Web界面,可监控CPU、内存、网络、磁盘及进程状态,还能远程查看(通过glances -w启动Web模式)。通过PHP脚本可获取当前脚本的资源使用情况,适合调试单个PHP文件的性能。
phpinfo():phpinfo()函数,输出PHP环境详细信息(如版本、配置、服务器模块、加载的扩展等),帮助排查配置问题(如display_errors是否开启)。getrusage():<?php
$start_time = microtime(true);
// 模拟耗时操作
for ($i = 0; $i < 1000000; $i++) {}
$end_time = microtime(true);
$execution_time = ($end_time - $start_time) * 1000; // 转换为毫秒
$memory_usage = memory_get_usage(true); // 获取内存使用(字节)
echo "执行时间:{$execution_time}ms<br>";
echo "内存占用:".round($memory_usage / 1024 / 1024, 2)."MB";
?>
该函数适合监控单个脚本的性能瓶颈(如循环、数据库查询耗时)。对于生产环境,建议使用第三方工具实现实时监控、历史数据分析及告警通知。
sudo apt install monit),可监控PHP-FPM进程状态(如是否运行、内存占用是否超标),并在异常时自动重启服务。配置示例(/etc/monit/conf.d/php-fpm.conf):check process php-fpm with pidfile /run/php/php7.4-fpm.pid
start program = "/etc/init.d/php7.4-fpm start"
stop program = "/etc/init.d/php7.4-fpm stop"
if memory > 256 MB for 5 cycles then restart
if cpu > 80% for 5 cycles then alert
重启Monit后生效:sudo systemctl restart monit。php-fpm-exporter(需安装:wget https://github.com/hipages/php-fpm_exporter/releases/download/v0.5.0/php-fpm_exporter_linux_amd64.tar.gz并解压)暴露PHP-FPM指标(如活跃进程数、请求处理时间),Prometheus抓取指标后,用Grafana创建可视化仪表盘(如CPU使用率趋势、内存占用分布)。通过日志可追溯PHP运行中的错误(如语法错误、数据库连接失败),是监控的重要补充。
/var/log/php-fpm.log(或/var/log/php7.4-fpm.log,根据版本调整),使用tail -f /var/log/php-fpm.log实时查看最新日志,过滤错误信息(如grep -i "error" /var/log/php-fpm.log)。/var/log/nginx/access.log//var/log/apache2/access.log)和错误日志(/var/log/nginx/error.log//var/log/apache2/error.log),分析请求响应时间、状态码(如5xx错误)及客户端请求问题。以上方法可根据需求组合使用:日常巡检用命令行工具,生产环境用第三方监控工具,调试时用PHP内置功能与日志分析,实现对PHP运行状态的全面监控。