PHP内存耗尽
据我所知,解决这个问题的办法是PHP内存耗尽,php,laravel,optimization,memory-management,lamp,Php,Laravel,Optimization,Memory Management,Lamp,据我所知,解决这个问题的办法是 ini_set('memory_limit','-1'); 如果这还不够呢 问题是我正在使用一个循环,并创建和销毁循环中使用的变量。但我仍然没有找到这背后的确切原因。每次循环执行后内存利用率都会增加。我的循环将运行几乎2000到10000次。因此,即使4gb内存也不够 正如我在使用topcommond时所观察到的,在循环开始时内存使用50mb,一旦循环继续,每次迭代后内存大小将增加10到15MB。所以我的代码没有完全执行 ini_set('memory_
ini_set('memory_limit','-1');
如果这还不够呢
问题是我正在使用一个循环,并创建和销毁循环中使用的变量。但我仍然没有找到这背后的确切原因。每次循环执行后内存利用率都会增加。我的循环将运行几乎2000到10000次。因此,即使4gb内存也不够
正如我在使用top
commond时所观察到的,在循环开始时内存使用50mb,一旦循环继续,每次迭代后内存大小将增加10到15MB。所以我的代码没有完全执行
ini_set('memory_limit', '-1');
ini_set('xdebug.max_nesting_level', 1000);
$ex_data = some data;
$config = some data;
$docConf = some data;
$codeNameIndex = some data;
$originalName = some data;
CONST LIMIT = 3000;
CONST START = 1000;
//till here it is using 55 to 6o mb memory
for ($i = self::START; $i < (self::START + self::LIMIT); $i++) {
$start_memory = memory_get_usage();
$object = new ImportProjectController();
$object->ex_data = $ex_data;
$object->config = $config;
$object->docConf = $docConf;
$StratProInsertDateTime = microtime(true);
try {
DB::connection()->getPdo()->beginTransaction();
$object->ex_data[$codeNameIndex[2]][$codeNameIndex[1]] = $originalName . '_' . $i;
$object->ex_data[$codeCodeIndex[2]][$codeCodeIndex[1]] = $originalCode . '_' . $i;
if (!$object->insert_project()) {
throw new Exception('error while inserting project');
}
if (!$object->insert_documents()) {
throw new Exception('error while inserting documents');
}
App::make('AccessController')->rebuildCache();
DB::connection()->getPdo()->commit();
} catch (Exception $ex) {
DB::connection()->getPdo()->rollBack();
echo $ex;
}
//it is increasing memory utilization every iteration.
echo "Memory used for inserting a ".$i."th project :- ";
echo memory_get_usage() - $start_memory.PHP_EOL;
unset($object->ex_data);
unset($object->config);
unset($object->docConf);
$object = null;
echo "Memory utilization before inserting project :- ";
echo memory_get_usage() - $start_memory.PHP_EOL;
}
上面是最常见的输出,因为您可以清楚地看到内存利用率达到1.1gb。而且它还在增加
如果需要更多描述,请告诉我。我从我的同事那里得到了这个问题的答案 Laravel做了一个查询日志记录,所有的查询都保存在内存中,这就是为什么我会遇到这样的问题。使用下面的代码,我的脚本运行良好,只使用了250mb的内存。希望这能对其他人有所帮助
DB::disableQueryLog();
我从我的同事那里得到了这个问题的答案 Laravel做了一个查询日志记录,所有的查询都保存在内存中,这就是为什么我会遇到这样的问题。使用下面的代码,我的脚本运行良好,只使用了250mb的内存。希望这能对其他人有所帮助
DB::disableQueryLog();
您可能应该更深入地检查循环中执行的方法中是否存在内存泄漏。在这里实例化控制器并调用它们的方法也是糟糕的应用程序设计的标志,因此您可能需要重新考虑您的应用程序结构(比如通过将逻辑提取到另一层来重构控制器方法)。亲爱的bogdag,Aoove脚本是测试脚本。我写上面的脚本是为了上传大量数据。并通过打开不同的页面来测试我的站点。因此,我将在一生中运行此脚本一次。所以我只想运行这一次,您可能应该更深入地检查循环中执行的方法中是否存在内存泄漏。在这里实例化控制器并调用它们的方法也是糟糕的应用程序设计的标志,因此您可能需要重新考虑您的应用程序结构(比如通过将逻辑提取到另一层来重构控制器方法)。亲爱的bogdag,Aoove脚本是测试脚本。我写上面的脚本是为了上传大量数据。并通过打开不同的页面来测试我的站点。因此,我将在一生中运行此脚本一次。所以我只想运行这一次。