CI CLI 占用内存过大问题
本帖最后由 我叫小井 于 2014-1-6 19:10 编辑有一个解析windows崩溃文件dmp的项目一直在跑,用的ci写的,突然有一天发现内存耗尽,崩了……{:soso_e136:}
后来细查发现CI的db类,存有一个 queries 成员变量,保存了以往所有查询过的语句,所有的,嗯,还有 query_times。
这两个变量应该是开发时做调试用的吧,但是没有在配置文件中给出配置选项,设置是否保存。也没有因为更改index.php的ENVIRONMENT 值为 production而取消保存。
db的内部倒是有一个变量来判断是否保存,叫 :
51: var $save_queries = TRUE;
但是从最开始给TRUE后就没有改变过了,所以是一直保存,一直保存,直到内存耗尽,机器down掉,世界毁灭,宇宙坍缩~~
这个比较坑,大家写CLI要注意一下,另外不知道还有没有除了DB其他类有类似问题,贴出来就当抛个砖了~~
\system\database\DB_driver.php:
49 var $query_count = 0;
50 var $bind_marker = '?';
51: var $save_queries = TRUE;
52 var $queries = array();
53 var $query_times = array();
..
288
289 // Save thequery for debugging
290: if ($this->save_queries == TRUE)
291 {
292 $this->queries[] = $sql;
...
299 if (FALSE === ($this->result_id = $this->simple_query($sql)))
300 {
301: if ($this->save_queries == TRUE)
302 {
303 $this->query_times[] = 0;
...
338 $this->benchmark += ($em + $es) - ($sm + $ss);
339
340: if ($this->save_queries == TRUE)
341 {
342 $this->query_times[] = ($em + $es) - ($sm + $ss);
4 matches in 1 file
解决方法是自己清空那两个数组,或者修改system代码~~
可以在使用时
$this->db->save_queries = FALSE;
页:
[1]