在同一个系统中,我可以调用db,并且没有问题,但在某些情况下(使用最大的表),我得到了
" SELECT partidascapturainfo.* FROM partidascapturainfo WHERE partidascapturainfo.partidascapturainfoid IS NOT NULL ORDER BY partidascapturainfoid asc LIMIT 0 , 10 "
Run Code Online (Sandbox Code Playgroud)
我调试了代码,问题是一个基本的查询:
123044,42016,249,3762,2,,0
123045,42016,249,3761,2,,0
123046,42016,249,3764,1,,0
123047,42016,249,3765,,,0
123048,42016,249,3775,,,0
123049,42016,249,3771,3,,0
123050,42016,249,3772,3,,0
123051,42016,250,3844,HAY,,0
123052,42016,255,3852,,,0
123053,42017,249,3761,1,,0
Run Code Online (Sandbox Code Playgroud)
当我在Mysql客户端中运行查询时,查询运行在0.17s
我已经将memory_limit设置为2048,重新启动nginx并且我的查询只返回10行...
这是我的10行:
" SELECT partidascapturainfo.* FROM partidascapturainfo WHERE partidascapturainfo.partidascapturainfoid IS NOT NULL ORDER BY partidascapturainfoid asc LIMIT 0 , 10 "
Run Code Online (Sandbox Code Playgroud)
有什么想法发生了什么?
我最近遇到了一些关于PHP内存限制的问题:
内存不足(分配22544384)(试图分配232个字节)
这些都是调试的麻烦,因为我没有留下关于导致问题的原因的大量信息.
添加关机功能有所帮助
register_shutdown_function('shutdown');
Run Code Online (Sandbox Code Playgroud)
然后,使用error_get_last(); 我可以获取有关上一个错误的信息,在这种情况下,"内存不足"致命错误,例如行号和php文件名.
这很好,但是我的php程序非常面向对象.堆栈深处的错误并没有告诉我有关错误时控制结构或执行堆栈的信息.我已经尝试过debug_backtrace(),但这只是在关机期间向我显示堆栈,而不是错误发生时的堆栈.
我知道我可以使用ini_set或修改php.ini来提高内存限制,但这并没有让我更接近实际找出消耗如此多内存的内容或错误期间执行流程的样子.
任何人都有一个很好的方法来调试高级面向对象的PHP程序中的内存错误?
有没有什么免费软件或商业可以促进PHP应用程序的内存使用分析?我知道xdebug可以生成跟踪文件,通过函数调用显示内存使用情况但没有图形工具,数据很难解释.
我正在运行一个PHP守护进程来进行分析.
启动的php进程加载所有必需的数据,分叉自己在所有核心上分配工作负载,等待分叉的子进程完成,并收集子进程生成的结果.
由于我与其他用户共享CLI环境,因此我需要通过将php.ini值注入shell调用来启动xdebug概要分析.
$ php -d xdebug.profiler_enable=1 -d xdebug.profiler_output_dir="/home/xxx" daemon.php
Run Code Online (Sandbox Code Playgroud)
生成的cachegrind文件,如何配置父级,因此显示90%的睡眠.
有没有办法在不构建驱动程序的情况下对工作人员进行分析直接加载它们?
谢谢
我还没有找到一个优雅的解决方案.我有一个类,我希望在不修改函数的情况下跟踪内存使用情况:
class Example
{
public function hello($name)
{
$something = str_repeat($name, pow(1024, 2));
}
}
$class = new Example;
$class->hello('a');
Run Code Online (Sandbox Code Playgroud)
所以任务是,在hello()没有干扰的情况下使用多少内存?
注意:此方法的内存使用量应为1MB.我试过打包电话memory_get_usage();无济于事:
class Example
{
public function hello($name)
{
$something = str_repeat($name, pow(1024, 2));
}
}
$class = new Example;
$s = memory_get_usage();
$class->hello('a');
echo memory_get_usage() - $s;
Run Code Online (Sandbox Code Playgroud)
这只会产生144字节数(根本不正确).我通过使用ReflectionMethod该类尝试了各种魔法.
我有一种感觉,我需要做的是计算方法的差异:(.如果有人能想到更干净的东西那么你真的会让我的一天.
编辑:我应该提到这是在基准测试应用程序的上下文中.因此,虽然memory_get_peak_usage在正确返回内存使用的意义上工作,但它也会在高内存方法之后运行基准测试.现在,如果有办法重置内存统计数据,那也可能是好的.
我收到以下错误:
[23-Feb-2011 19:51:29] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 512 bytes) in /obj/class.db.php on line 60
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道这个错误发生在哪里.class.db.php的第60行是我的应用程序中最常用的函数之一(Database Read()函数).
如何追溯此错误源自何处?