用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3706|回复: 1
收起左侧

[优化] CI CLI 占用内存过大问题

[复制链接]
发表于 2014-1-6 19:06:28 | 显示全部楼层 |阅读模式
本帖最后由 我叫小井 于 2014-1-6 19:10 编辑

有一个解析windows崩溃文件dmp的项目一直在跑,用的ci写的,突然有一天发现内存耗尽,崩了……{:soso_e136:}

后来细查发现CI的db类,存有一个 queries 成员变量,保存了以往所有查询过的语句,所有的,嗯,还有 query_times。

这两个变量应该是开发时做调试用的吧,但是没有在配置文件中给出配置选项,设置是否保存。也没有因为更改index.php的ENVIRONMENT 值为 production而取消保存。

db的内部倒是有一个变量来判断是否保存,叫 :
PHP复制代码
   51:         var $save_queries        = TRUE;
复制代码

但是从最开始给TRUE后就没有改变过了,所以是一直保存,一直保存,直到内存耗尽,机器down掉,世界毁灭,宇宙坍缩~~

这个比较坑,大家写CLI要注意一下,另外不知道还有没有除了DB其他类有类似问题,贴出来就当抛个砖了~~
PHP复制代码
\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 the  query 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代码~~



评分

参与人数 1威望 +5 收起 理由
Hex + 5 赞一个!

查看全部评分

发表于 2014-6-21 15:50:53 | 显示全部楼层
可以在使用时

$this->db->save_queries = FALSE;

本版积分规则