㈠ 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请求
1.需要用php循环一个目录的文件数量.然而文件数量会不定时的添加....
答:在服务端建立一个根据需要进行循环的PHP脚本就可以。 猜测一下,您的第二个问题,是不是想进行相关检测以避免重复触发这个脚本。 实际上,不建议由用户行为触发这个脚本,无论是服务端代码,还是客户端的异步Ajax。
㈢ 请问php如何实现实时监控文件.
在服务端建立一个根据需要进行循环的PHP脚本就可以。
猜测一下,您的第二个问题,是不是想进行相关检测以避免重复触发这个脚本。
实际上,不建议由用户行为触发这个脚本,无论是服务端代码,还是客户端的异步Ajax。
如果要用PHP脚本进行不停的循环监控,请联系运维人员,服务器启动,即在服务端开始运行这个脚本,他们会向您提供解决方案的。
真正的建议是,如果有任何可能,都不要使用PHP脚本利用循环代码进行服务端的监控。
不得不承认,这个方面PHP的稳定性还差一些,Java或许可以这么做,PHP就比较痛苦了。
比较可能的办法是请运维人员帮忙,通报监控逻辑,然后请他安装各种触发条件调用相应的PHP代码。
如果坚持使用PHP脚本进行相关工作,有两个建议给您:
尽快释放资源,无论脚本使用了什么资源,包括文件、内存、数据库等等,都尽快释放,这种地方可万万不能偷懒,否则就是自虐了。
在这个脚本中进行独立的手工日志输出,任何一层循环的入口都要进行记录,这样在监控失败的时候才有办法查找问题。
㈣ 监视php站点代码是否被人改动过。使代码被更改时让我知道。有什么方法
楼主,如果你的网站只是你个人管理,并且你的IP是固定的【一段时间内】,那么你可以通过限制IP来确定文件的访问权限。
如果php脚本截获了一个与你预先设定的IP不符的地址,那么就应该立刻发邮件提醒你,截获该IP的PHP文件名称,或者通过写网站运行日志的方式,将可疑行为记录到文本文件中
以上方法可以用于后台php文件的安全防范;
前台呢?
不太好处理,看到楼主的问题,应该是服务器被攻破了,那么更好的办法应该是从服务器安全方面入手,比如限制文件的读写权限等
㈤ 如何使用PHP实时监控linux服务器的cpu,内存,硬盘信息
1,Linux下可以在/proc/cpuinfo中看到每个cpu的详细信息。但是对于双核的cpu,在cpuinfo中会看到两个cpu。常常会让人误以为是两个单核的cpu。
其实应该通过Physical
Processor
ID来区分单核和双核。而Physical
Processor
ID可以从cpuinfo或者dmesg中找到.
flags
如果有
ht
说明
支持超线程技术
判断物理CPU的个数可以查看physical
id
的值,相同则为同一个物理CPU
2,查看内存大小:
cat
/proc/meminfo
|grep
MemTotal
3,其他一些可以查看详细
linux系统
信息的命令和方法:
uname
-a
#
查看内核/操作系统/
CPU信息
的linux系统信息命令
head
-n
1
/etc/issue
#
查看操作系统版本,是数字1不是字母L
cat
/proc/cpuinfo
#
查看CPU信息的linux系统信息命令
hostname
#
查看计算机名的linux系统信息命令
lspci
-tv
#
列出所有
PCI设备
lsusb
-tv
#
列出所有USB设备的linux系统信息命令
lsmod
#
列出加载的内核模块
env
#
查看
环境变量
资源
free
-m
#
查看内存使用量和
交换区
使用量
df
-h
#
查看各分区使用情况
-sh
#
查看指定目录的大小
grep
MemTotal
/proc/meminfo
#
查看内存总量
grep
MemFree
/proc/meminfo
#
查看空闲内存量
uptime
#
查看系统
运行时间
、用户数、负载
cat
/proc/loadavg
#
查看系统负载磁盘和分区
mount
|
column
-t
#
查看挂接的分区状态
fdisk
-l
#
查看所有分区
swapon
-s
#
查看所有
交换分区
hdparm
-i
/dev/hda
#
查看磁盘参数(仅适用于
IDE设备
)
dmesg
|
grep
IDE
#
查看启动时IDE设备检测状况网络
ifconfig
#
查看所有网络接口的属性
iptables
-L
#
查看防火墙设置
route
-n
#
查看
路由表
netstat
-lntp
#
查看所有监听端口
netstat
-antp
#
查看所有已经建立的连接
netstat
-s
#
查看
网络统计
信息进程
ps
-ef
#
查看所有进程
top
#
实时显示
进程状态
用户
w
#
查看活动用户
id
#
查看指定用户信息
last
#
查看
用户登录
日志
cut
-d:
-f1
/etc/passwd
#
查看系统所有用户
cut
-d:
-f1
/etc/group
#
查看系统所有组
crontab
-l
#
查看当前用户的计划任务服务
chkconfig
–list
#
列出所有系统服务
chkconfig
–list
|
grep
on
#
列出所有启动的系统服务程序
rpm
-qa
#
查看所有安装的软件包
cat
/proc/cpuinfo
:查看CPU相关参数的linux系统命令
cat
/proc/partitions
:查看linux硬盘和分区信息的系统信息命令
cat
/proc/meminfo
:查看linux系统内存信息的linux系统命令
cat
/proc/version
:查看版本,类似uname
-r
cat
/proc/ioports
:查看设备io端口
cat
/proc/interrupts
:查看中断
cat
/proc/pci
:查看pci设备的信息
cat
/proc/swaps
:查看所有swap分区的信息
㈥ php怎样实现数据库监控功能
你可以找找这个文章
利用Ajax实现长连接(模拟推送)
㈦ 如何监控文件夹里内容是否变化 php
可以根据原文件的md5值或者修改时间来比较啊!不同就变化了啊!
㈧ 如何使用监控宝监控php-fpm状态
在开始之前,请确保已经开启php-fpm的status。
一、创建收集数据脚本
新建脚本/home/sh/monitor_fpm.sh,并添加到cronjob,每五分钟运行一次。脚本代码为:
fpm_status=$(curl -s http://www.centos.bz/fpm_status)
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/www.centos.bz/web/php_status.html
二、到监控宝添加自定义监控
1、点击网站头部的创建监控项目,拉到底部,选择创建自定义监控,再点击创建自定义监控规则,
2、基本信息填写
1
3、规则指标添加
2
3、添加php请求图
3
4、添加php进程图
4
5、添加php最大值图
5
6、点击完成,输入监控fpm的页面
6
完成了以上步骤之后,过一段时间就可以看到php-fpm的状态统计信息了。
㈨ php 检测源代码是否被改动过和是否项目中有增加或删除的文件的实现思路
如果想自己做, hashtable是一定的
建一个hashtable, 储存当前内容, 同时该hashtable的id也同样可以用于作为文件功能等记录的id之用, 然后无论是windows还是linux都可以cron的,去做一个php文件去匹配吧, 文件修改时间无所谓的, md5(file)更有意义
如果单纯使用php, 遍历目录是必须的, 无论哪个os都提供文件动作的监控能力,但是这不在php的工作范围内,所以无法实现所谓的监控,你可以看看同步类软件,无论哪个操作系统都是直接去os的基层拿现成的东西来用,不用特地耗费资源去自己不断遍历目录监控的,
svn/cvs是主动提交改动的, 而所谓监控,那就是被动形式了,只有在改动时才有动作的叫监控,
你要php实现源码监控,一句话,不可能,只能做递归/迭代, 用hashtable处理并不断操作hashdb
ps:文件功能你们都不写进注释吗,注释本来就有这种功能, 比如phpdoc-_
㈩ 如何通过监控 php-fpm status排查问题
明:
php-fpm和nginx一样,内建了个状态页,可以通过该状态页了解监控php-fpm的状态
具体:
1. php-fpm.conf开用php-fpm状态功能
# grep pm.status_path /usr/local/php/etc/php-fpm.conf
pm.status_path = /phpfpm_status
默认情况下为/status,当然也可以改成/phpfpm_status等,我这里是改成/phpfpm_status啦
2. nginx配置
在默认主机里面加上location或者你希望能访问到的主机里面。
server {
listen 80;
server_name 127.0.0.1;
location /nginx_status {
stub_status on;
access_log off;
}
location /phpfpm_status {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
}
3. 重启nginx、php-fpm使配置生效
# /etc/init.d/nginx restart
# /etc/init.d/php-fpm restart