我在php连接数据库的时候,因为要采集数据很慢,我使用mysql_connect连接数据库,在本地电脑测试一切正常,但在虚拟主机就提示服务器失去响应,后来我换成mysql_pconnect长连接就正常了,但是最近发现老是打不开页面,我怀疑是不是mysql_pconnect这个长连接把资源耗完了?
因为我在文档上查,mysql_pconnect这个是无法使用mysql_close来关闭的?如此说来,使用mysql_pconnect岂不是很危险?一旦调用了这个函数就完全无法关闭这个连接了?直到资源耗完?谢谢!!

解决方案 »

  1.   

    mysql_pconnect这个是无法使用mysql_close来关闭的
    明知不可为而为之!你出现的问题与数据库连接方式无关,应该从其他方面找原因提示服务器失去响应 的主要原因是超时或程序出现错误
    所以书写健壮的程序是至关重要的
      

  2.   


    谢谢版主回复。
    因为我用的是虚拟主机,本来我是倾向用mysql_connect,毕竟这个函数会自动关闭数据库。但是由于后台采集函数以及分析函数执行时间很久,设置了数据库加长超时也不管用,无意间换成mysql_pconnect发现居然正常了,在网上查到说这2个函数区别不大,所以就用了。现在运行了1个月左右,频繁出现错误提示Index of /Apache Server at www.xxx.com Port 80我都不知道这个是什么意思。我猜测是不是因为使用了长连接的缘故?
      

  3.   

    程序长时间运行而无任何输出,会使apache(他有一个默认等待时间)误以为程序陷于死循环
    于是他就输出失去响应的提示并隔离应用程序
      

  4.   


    谢谢,我刚才问空间商,他说不是资源问题。具体我还在查
    版主知道虚拟主机主页提示 Index of /Apache Server at www.xxx.com Port 80 这个提示是什么意思吗?关键是有时候正常,有时候提示这个进不去
    我在网上查了很久,均没答案。
      

  5.   


    我的程序使用mysql_connect在本地执行并无问题,但在虚拟主机上执行,却会出现失去连接,导致程序中断。所以我改成mysql_pconnect。我整个程序我除了这句mysql_pconnect这句我自己不敢确定是否正确外别处绝对不会出现这种导致程序崩溃的大问题。所以我才来请教mysql_pconnect。我发现网上介绍mysql_pconnect从来都是强调这个连接不能使用mysql_close关闭,但并未说明mysql_pconnect这个打开的连接是否可以手动关闭,如果不需要关闭是否会拖垮服务器之类。
      

  6.   

    由于数据采集量以及处理数据实在过大,考虑到虚拟主机的空间3g远远无法满足未来的需求,所以我自己买用了一台服务器。在服务器上我把代码mysql_pconnect换成mysql_connect,现在已经运行一周了,一切正常。不过对于我之前的疑问,至今仍然不理解,为什么使用了mysql_pconnect长连接,前面一两天都正常。过几天大概3天后再就会出现无法访问主页,并且提示Index of /Apache Server at www.xxx.com Port 80我自己的猜测理解,可能是因为长连接不能手动释放资源而访问量又比较大的缘故。如有高手懂的还望不吝赐教,我过几天再结贴,谢谢!!
      

  7.   

    php 连接 mysql 是分为两步走的
    第一步:建立 php 到 mysql 服务器的 tcp/ip 通道 物理通道
    第二步:登录 mysql 服务器,建立到数据库的通道 逻辑通道无论是长连接还是短连接,php 程序都会关闭逻辑通道
    短连接会同时关闭物理通道
    而长连接会将物理通道保存起来,以备再次使用当发起长连接的时候,会先检查是否有空闲的物理通道,如果有就利用,否则再建一个物理通道
    而物理通道从开始闲置到能被再次使用,是需要一定的时间的(需要与mysql沟通后才能确定,这个工作要在mysql相对空闲时完成)。所以当mysql与php同在一台机器上时,由于没有真正的网络通讯响应极其迅速,几乎没有时间使闲置的物理通道处于备选状态。从而导致大量的资源被占用,而使系统崩溃
    而在mysql与php不在同一机器时,就没有(或极少有)这种情况发生
      

  8.   

    PHP和apache都有一个最长的执行时间吧
      

  9.   


    版主辛苦了,我获益良多。就是说mysql 与 php 在同一个机器上,反而会使得长连接比较危险?
      

  10.   

    可以看这篇文章,对mysql_pconnect可以了解多一些。
    http://www.cnblogs.com/funlake/archive/2011/09/08/2171822.html