设为首页
收藏本站
Archiver
用户
登录
入住
用户名
Email
自动登录
找回密码
密码
登录
入住 CI 中国社区
首页
返回 CodeIgniter 中国首页
论坛
BBS
导读
Guide
个人主页
Space
中文手册
搜索
CodeIgniter 搜索引擎
视频教程
案例
任务
搜索
搜索
本版
帖子
用户
设为首页
收藏本站
Archiver
开启辅助访问
切换到宽版
日志
相册
分享
记录
CodeIgniter4
CodeIgniter3
CodeIgniter2
帖子
好友
道具
勋章
收藏
任务
记录
留言板
设置
我的收藏
退出
腾讯QQ
微信登录
CodeIgniter 中国开发者社区
»
论坛
›
CodeIgniter 开发
›
CodeIgniter 进阶讨论
›
CI CLI 占用内存过大问题
返回列表
查看:
3706
|
回复:
1
[优化]
CI CLI 占用内存过大问题
[复制链接]
我叫小井
我叫小井
当前离线
积分
165
IP卡
狗仔卡
发表于 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
赞一个!
查看全部评分
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
magicone
magicone
当前离线
积分
363
IP卡
狗仔卡
发表于 2014-6-21 15:50:53
|
显示全部楼层
可以在使用时
$this->db->save_queries = FALSE;
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
入住 CI 中国社区
本版积分规则
发表回复
回帖后跳转到最后一页