[个人原创]Xdebug安装配置及32位机器PHP日志文件大于2G问题异常排查,删除xdebug的多个文件的方法。

jackxiang 2011-9-30 16:25 | |
xdebug.max_nesting_level=30 //这个值不能太少,尤其是核心Core.php(特别指:框架核心),30较为靠谱,否则出现如下:
PHP Fatal error:  Maximum function nesting level of '10' reached, aborting! in /data/htdocs/jackxiang.com/libraries/core.php on line 315

vi +315 /data/htdocs/jackxiang.com/libraries/core.php
313     public static function autoload ($class)
314     {
315         if (class_exists($class, FALSE))





shell_exec/proc_open 两函数得打开:
+-----------------------------------------------------------+
|                       ! ERROR !                           |
| The test-suite requires that proc_open() is available.    |
| Please check if you disabled it in php.ini.               |
+-----------------------------------------------------------+
shell_exec() has been disabled for security reasons in /home/test/rpmbuild/BUILD/xdebug-2.7.0alpha1/run-tests.php on line 306


xdebug模块输出文件名的配置说明,那么我可以用:
xdebug.profiler_output_name = cachegrind.out.%s
多个域名的话,也可以组合使用
xdebug.profiler_output_name = cachegrind.out.%H.%u.%s
http://blog.csdn.net/binger819623/article/details/3985506




删除xdebug的多个文件的方法(很多Xdebug的Log文件想通过:rm -Rf 来删除,报错: Argument list too long):
http://jackxiang.com/post/1263/
三分钟一清,试过一小时一清,都3G左右大小了:

chmod a+x /usr/local/scripts/clearXdebugFolder.sh

查找目录:find /(查找范围) -name '查找关键字' -type d
查找文件:find /(查找范围) -name 查找关键字 -print
clearXdebugFolder.sh ,一定要加type f,不加会把目录也删除了滴:

sh /root/clearXdebugFolder.sh
ls /data/logs/xdebug/

xdebug的分析GUI程序WinCacheGrind文件下载位置:
http://sourceforge.net/projects/wincachegrind/files/wincachegrind/
如果有安zendoptimizer:
xdebug和zendoptimizer不兼容,所以在开启xdebug调试的时候请务必在php.ini里关闭zendoptimizer,如下前面加上分号即可 ;

Xdebug安装配置:
目前版本:http://xdebug.org/files/xdebug-2.2.3.tgz
wget http://xdebug.org/files/xdebug-2.2.0.tgz

修改PHP的配置文件:php.ini后,加入这个扩展:
FastCgi重启:PHP进程.
Apache常规:重启Apache。

问题的缘起,PHP打开错误,且安好了Xdebug,前几天还好好的 ,但是在Apache下依旧没有报错,返回空白,于是在Terminal下执行出现如下:

出现返回如下:

查了个Google网上说是某日志文件太大,估计是大于2G了,于是,从Php的日志文件查起,一看,果然有一个:

如此,查看一下大小:

果然太大了,于是删除。
其实还可以这样查的,用Awk遍历某个你认为日志的目录:

我的Vps下的Nignx目录日志扫描:


解决办法:先删除再说,后加入Crontab定时删除PHP的错误Log文件:

文件内容:

加入执行权限:




总结:其实从终端就可以看出是一个Log太大引起的问题,以后得注意这样的大文件要定时给清理下,但也不能全给干掉,
有时调试错误时也是很有帮助的,于是否,我们尽管引入了这个xdebug,如下配置:


要想加入get变量调试需要加入:

加入跟踪加入:

最大循环次数:


最后,由上面的配置综合出我自己的配置如下:


新加参考:http://www.searchtb.com/2010/12/using-xdebug-to-improve-performance.html

特别注意,如果出现这个错误,如果出现下列提示
PHP Warning: Xdebug MUST be loaded as a Zend extension in Unknown on line 0
先把这一行注释掉,
;extension=xdebug.so
然后,学学习上面这样:zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
否则就老是会报这个Warning,听说是和php 的PHP ZTS 有关系,参考:http://www.dnaphp.com/php/php-core/505
整个循环又有get又有post的错误出来,截取错误分析如下:

注意:remote_host应该填写远程调试机的地址,而不是PHP服务器的地址,在Xdebug运行方式下,调试工具实际是调试过程的服务端,Xdebug会主动连接指定的remoete_host,从而建立调试通讯。所以要注意调试机的防火墙问题
但是它也不是万能的,在调试我们的接口时返回一串html的table如下:

这样是不利于接口调试的,于是能通过:
tail -f /tmp/phpSys.log来及时获取错误情况,xdebug对页面返回的调试很好,但对接口调试返回时是串不方便,同时在外网时也可能通过日志文件了解下情况,蛤发现好像这两个没法结合起来,但xdebug对这个性能分析上还是很不错的如下:


# php php100.php  
Fatal error: Maximum function nesting level of '100' reached, aborting! in /data/home/admin/php/php100.php on line 3
Call Stack:
    0.0006      57188   1. {main}() /data/home/admin/php/php100.php:0
    0.0006      57236   2. php100_fun() /data/home/admin/php/php100.php:5
    ......

    0.0006      68268  97. php100_fun() /data/home/admin/php/php100.php:3
    0.0006      68356  98. php100_fun() /data/home/admin/php/php100.php:3
    0.0006      68444  99. php100_fun() /data/home/admin/php/php100.php:3

注意:最大执行循环次数100次,在这儿,是php的xdebug限定的次数,这个变量可以设置:xdebug.max_nesting_level=50;//最大循环次数,防止死循环,还有这个也是经常用的:xdebug.dump.SERVER=REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT

如果出现"File Size Limit Exceeded"的错误,请先检查下你应用程序的相关日志,查看下你的日志是否很大,如果很大的话,这个就是"File Size Limit Exceeded" 问题出现的原因.

     建议:

     1. 前期规划的时候考虑到日志问题,建议按照年月日进行日志的分类.

     2. 对于日志不是很重要,往往很多朋友都是把日志丢到"黑洞"里去,但是往往排错的时候就发现没有日志可供分析,所以建议各位不要把日志丢到黑洞里去;



备注:

关于ulimit的命令:

1,说明:
ulimit用于shell启动进程所占用的资源.
2,类别:
shell内建命令
3,语法格式:
ulimit [-acdfHlmnpsStvw] [size]

4,参数介绍:

-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes 5

值得参考:http://www.alixixi.com/program/a/2011030368167.shtml
配套视频和对应PPT:
PPT:http://wenku.baidu.com/view/ba064e212f60ddccda38a05c.html
视屏:http://v.youku.com/v_show/id_XMjQ5OTA1MTIw.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/4675/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2018-12-25 13:34
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]