本文目录一览:
请问php如何实现实时监控文件.
在服务端建立一个根据需要进行循环的PHP脚本就可以。
猜测一下,您的第二个问题,是不是想进行相关检测以避免重复触发这个脚本。
实际上,不建议由用户行为触发这个脚本,无论是服务端代码,还是客户端的异步Ajax。
如果要用PHP脚本进行不停的循环监控,请联系运维人员,服务器启动,即在服务端开始运行这个脚本,他们会向您提供解决方案的。
真正的建议是,如果有任何可能,都不要使用PHP脚本利用循环代码进行服务端的监控。
不得不承认,这个方面PHP的稳定性还差一些,Java或许可以这么做,PHP就比较痛苦了。
比较可能的办法是请运维人员帮忙,通报监控逻辑,然后请他安装各种触发条件调用相应的PHP代码。
如果坚持使用PHP脚本进行相关工作,有两个建议给您:
尽快释放资源,无论脚本使用了什么资源,包括文件、内存、数据库等等,都尽快释放,这种地方可万万不能偷懒,否则就是自虐了。
在这个脚本中进行独立的手工日志输出,任何一层循环的入口都要进行记录,这样在监控失败的时候才有办法查找问题。
PHP程序,如何监控内存情况
看到有人写透视宝做php监控的原理图,跟你分享下。我估计大家做的方式都是差不多。
PHP运行支撑的ZendEngine早在设计过程中已经预留了丰富的Hook,可以有效干涉处理过程中的几个关键步骤。利用了以下几个Hook,就能方便的获取数据:
1. zend_compile_file zend_compile_string
加载分析文件或字符串,本身就会造成非常大的IO,如果过多地执行加载,无疑会造成内存和CPU的消耗.通过这两个hook,可以取得文件名、执行行数、使用内存和CPU占用时间。
2. zend_execute zend_execute_internal
通过这两个hook的使用,我们可以准确地分析得出一个PHP应用中的类调用、方法调用、方法参数、内存占用和CPU占用,加以分析,便可以准确得出应用系统运行过程中的方法运行栈,API调用地址,SQL语句,CacheKey以及Cache命中等关键信息。
3. zend_throw_exception_hook
利用异常钩子,可以准确地得到应用系统运行过程中出现的异常信息,当然包括异常发生的类\方法位置,参数,异常code和异常message。
4. zend_error_cb
错误钩子则更加直接,可以准确得到系统运行过程中出现的任何一个warning,代码错误或语法错误。
如何使用监控宝监控php-fpm状态
在开始之前,请确保已经开启php-fpm的status。
一、创建收集数据脚本
新建脚本/home/sh/monitor_fpm.sh,并添加到cronjob,每五分钟运行一次。脚本代码为:
fpm_status=$(curl -s )
start_since_now=$(echo "$fpm_status" | awk -F':' '/start since/{gsub(/ /,"",$2);print $2}')
listen_queue=$(echo "$fpm_status" | awk -F':' '/^listen queue:/{gsub(/ /,"",$2);print $2}')
idle_processes=$(echo "$fpm_status" | awk -F':' '/idle processes/{gsub(/ /,"",$2);print $2}')
active_processes=$(echo "$fpm_status" | awk -F':' '/^active processes:/{gsub(/ /,"",$2);print $2}')
total_processes=$(echo "$fpm_status" | awk -F':' '/total processes/{gsub(/ /,"",$2);print $2}')
accepted_conn_now=$(echo "$fpm_status" | awk -F':' '/accepted conn/{gsub(/ /,"",$2);print $2}')
max_listen_queue=$(echo "$fpm_status" | awk -F':' '/max listen queue/{gsub(/ /,"",$2);print $2}')
max_active_processes=$(echo "$fpm_status" | awk -F':' '/max active processes/{gsub(/ /,"",$2);print $2}')
max_children_reached=$(echo "$fpm_status" | awk -F':' '/max children reached/{gsub(/ /,"",$2);print $2}')
if [ -f "/tmp/accepted_conn78" ];then
accepted_conn_pre=$(cat /tmp/accepted_conn78)
((accepted_conn_inc=$accepted_conn_now - $accepted_conn_pre))
[[ $accepted_conn_inc -lt 0 ]] accepted_conn_inc=0
else
accepted_conn_inc=0
fi
echo $accepted_conn_now /tmp/accepted_conn78
if [ -f "/tmp/start_since78" ];then
start_since_pre=$(cat /tmp/start_since78)
((start_since_inc=$start_since_now - $start_since_pre))
[[ $start_since_inc -lt 0 ]] per_request=0 || ((per_request=$accepted_conn_inc/$start_since_inc))
else
per_request=0
fi
echo $start_since_now /tmp/start_since78
echo "pre
accepted_conn:$accepted_conn_inc
listen_queue:$listen_queue
idle_processes:$idle_processes
active_processes:$active_processes
total_processes:$total_processes
per_request:$per_request
max_listen_queue:$max_listen_queue
max_active_processes:$max_active_processes
max_children_reached:$max_children_reached
/pre" /home/
二、到监控宝添加自定义监控
1、点击网站头部的创建监控项目,拉到底部,选择创建自定义监控,再点击创建自定义监控规则,
2、基本信息填写
1
3、规则指标添加
2
3、添加php请求图
3
4、添加php进程图
4
5、添加php最大值图
5
6、点击完成,输入监控fpm的页面
6
完成了以上步骤之后,过一段时间就可以看到php-fpm的状态统计信息了。