免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8833 | 回复: 5
打印 上一主题 下一主题

高手给个思路,关于PHP释放MYSQL连接。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-06 14:41 |只看该作者 |倒序浏览
写的一个小型CMS自用。

用了一个类操作mysql。

连接方法是mysql_connect。

没有调用mysql_close,不是说页面结束后,php会自动释放连接么?

测试的时候,系统里有一些文章,CMS将它们生成静态页,生成的流程是:

1、获取相应页面的模板代码;
2、通过正则分析得出我自定义的调用函数;
3、根据调用函数提供的参数(例如哪个栏目,查询条件等等)从数据库里读取数据;
4、将整个模板解析完后生成静态页。

在win2k+3平台上测试,先用netstat -nat tcp看到3306没有连接,然后开始执行生成页面的操作,生成数百个页面之后,在用netstat查看,有无数过3306的连接,等上几分钟之后,php连接不了mysql(提示就是连接不到数据库),要等好半天,或者重启mysql方能恢复。

现象就是PHP不能及时释放mysql连接。

解决这个问题,需要检查哪些方面?代码上通常要咋处理?它不是自己会释放的啊?
另外,我已经把mysql的max_connections改成20000了好象。

论坛徽章:
0
2 [报告]
发表于 2007-05-06 14:58 |只看该作者
为什么在写了连接类里面为什么不把

  1. mysql_close($link);
复制代码


写在里面呢!每个操作完成后给个标示,返回一个值,1或者0,来实现mysql_close()

[ 本帖最后由 Skyverd 于 2007-5-6 15:00 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-05-06 21:30 |只看该作者
关注此帖子

punbb的做法是在footer.php里面有一句$db->close();

  1.         function close()
  2.         {
  3.                 if ($this->link_id)
  4.                 {
  5.                         if ($this->query_result)
  6.                                 @mysql_free_result($this->query_result);

  7.                         return @mysql_close($this->link_id);
  8.                 }
  9.                 else
  10.                         return false;
  11.         }

复制代码

论坛徽章:
0
4 [报告]
发表于 2007-05-06 21:49 |只看该作者
这样不是每个页面都得进行判断一次?

论坛徽章:
0
5 [报告]
发表于 2007-05-07 05:22 |只看该作者
你是用一个全局的数据库连接吗?还是每次调用都连接一次?
按道理你主需要一次连接,然后无数次查询后,结束php或者手动释放连接都可。

论坛徽章:
0
6 [报告]
发表于 2007-05-07 09:03 |只看该作者
看到的那些大多数连接的状态是 time_wait 吗?


是的话搜 time_wait

上次谈过的,这是tcp/ip 的问题,一个网络连接关闭后,是不会你所想象的马上关闭的

........搜
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP