LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4454|回复: 34

我开发的一个网站老出现MYSQL连接过多的情况

[复制链接]
发表于 2007-5-10 06:17:33 | 显示全部楼层 |阅读模式
我开发的一个网站老出现MYSQL连接过多的情况

每天的IP为1000左右

请问是怎么回事?

我用的连接语句是 mysql_connect()

没用用mysql_close()关闭,因为我觉得这个应该会自动关闭的吧

还有是没有用 mysql_free_result() 这个应该也会自动释放的吧

所以不知道怎么回事,请高手们给点意见
发表于 2007-5-10 08:15:06 | 显示全部楼层
你的服务器是租用的吗? 可能是其它的网站用得太多了, 不是你的问题.
回复 支持 反对

使用道具 举报

发表于 2007-5-10 09:01:19 | 显示全部楼层
Post by ideawu
你的服务器是租用的吗? 可能是其它的网站用得太多了, 不是你的问题.

对的,没错,大部分是这种问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-10 10:48:32 | 显示全部楼层
实在不好意思,这个服务器不是租用的,是独立的服务器,3M带宽,双至强的CPU,2G内存,每天1000多IP应该不会出现MYSQL连接过多的错误吧?

还请高手们给点意见.

我现在是正在改程序,所有的页面全部加上以下语句:

mysql_close();
mysql_free_result();

不知道这样行不行,多谢了,各位.指导一下吧.
回复 支持 反对

使用道具 举报

发表于 2007-5-10 14:13:08 | 显示全部楼层
还是及时关闭比较保险一点
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-11 09:09:43 | 显示全部楼层
当我全部加完那两行语句的时候,服务器又有新的问题出现了
Lost connection to MySQL server during query

老出现这个提示,真是怪了,请帮我看下是怎么回事
回复 支持 反对

使用道具 举报

发表于 2007-5-11 09:51:57 | 显示全部楼层
可能是
1:mysql_close();关闭连接后还还有的函数,或类还在调用这个连接
2:mysql_free_result();后你还在调用mysql的信息
回复 支持 反对

使用道具 举报

发表于 2007-5-11 19:06:52 | 显示全部楼层
出现这个问题的解决方法只有一个:
认真地重写你的代码。

现在知道要养成好的编程习惯了吧

PS:好像在 MySql的conf文件中有设置最大连接次数的。此外,FREE的M ySql 的连接数也有限,不能任意设定,请查看你的MySql手册,上面有说明。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-12 06:10:11 | 显示全部楼层
Post by folklore
出现这个问题的解决方法只有一个:
认真地重写你的代码。

现在知道要养成好的编程习惯了吧

PS:好像在 MySql的conf文件中有设置最大连接次数的。此外,FREE的M ySql 的连接数也有限,不能任意设定,请查看你的MySql手册,上面有说明。



看来LINUXSIR上面虽然平时不怎么热闹,但真正出现问题的时候,还是真正的高手都在这里的,太感谢了!


这次真是遇到怪事了!

刚开始我写的这套程序,是用mysql_connect()来进行连接的

后来因为出现连接数过多,MYSQL停止的问题,于是我在每个文件里面都加以下代码: mysql_close();

但加完以后,又出现了MYSQL连接丢失的提示.

是不是跟程序里面用 include_once(连接语句)  有关呢?


比如我这样写关闭语句应该没问题吧:


[PHP]<?php
include_once("db2.php");
$query = "select * from member where id='$_COOKIE[mid]' and md5(password)='$_COOKIE[password]' " ;
$result = mysql_db_query($DataBase, $query);
$login=0;

if($r = mysql_fetch_array($result))
{
$login=1;
}


if($login==1)
{
include_once("myindex.php");
exit;
}
mysql_free_result($result);
mysql_close($db);
//上面语句判断会员登录情况,login=0表示登录,为1表已经登录
?>
[/PHP]
没想到我加了这样的完全符合程序运行逻辑的代码以后,服务器运行一段时间就会死机,难道真的是PHP代码会把服务器搞死机吗?




注:以上测试如果在访问量小的情况下,是试不出来的,只有大大访问量的情况下才会试出来

实际上PHP程序就算是一个程序再有错误或死循环什么的,应该是影响当前执行页面吧,而不是影响整个服务器的运行,所以我觉得程序造成服务器的死机或停止服务,应该是不可能出现的吧.

因为当一个程序运行有错误的时候,应该是只对当前运行的页面,而不是针对所有的文件吧,当你关掉IE的时候,程序也就停止了,因此不会对服务器造成影响的,不知道大家是怎么认为的.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-12 06:19:26 | 显示全部楼层
Post by folklore
出现这个问题的解决方法只有一个:
认真地重写你的代码。

现在知道要养成好的编程习惯了吧

PS:好像在 MySql的conf文件中有设置最大连接次数的。此外,FREE的M ySql 的连接数也有限,不能任意设定,请查看你的MySql手册,上面有说明。



还有就是,当出现MYSQL提示连接数已经超过最大连接数的时候,可以通过修改最大连接数来解决是吧.但我听说设为-1,或30000的时候,MYSQL的最大连接数不限制的时候,也最多能达到一万六千多个连接数,所以当我写的程序突破这个连接数的时候,还是会出现问题的

所以现在能不能这样做:在MYSQL配置里面修改一下,可以自动释放连接数?也就是当连接数过多的时候,MYSQL可以在程序执行完以后,自动释放连接数呢?
就象PHP程序执行完以后可以自动释放内存一样,这觉得这样应该是可行的,不知道大家是怎么认为的,有什么好的解决办法!

现在网站运行半天就会出现故障一次,就是MYSQL的问题,请问该怎么解决呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表