成都网站建设
|
域名注册
|
虚拟主机
|
网站制作
|
网站案例
|
网站优化
|
网站推广
|
企业邮局
|
服务器租用
|
广告设计
首页
服务器租用
企业邮箱
虚拟主机
网站程序
营销推广
网站建设
域名注册
前端开发
网站备案
网站空间
|
独立ip空间
|
双线主机
|
php虚拟主机
|
免备案空间
|
香港空间
|
云空间
|
vps主机
|
服务器租用
|
服务器托管
|
云服务器
|
jsp空间
|
网站空间报价
虚拟主机
主机管理
主机购买
数据库
主机续费升级
FTP上传
服务器租用
web服务器
FTP服务器
服务器托管
服务器租用
vps主机服务器
企业邮箱
企业邮箱优势
企业邮箱设置
邮箱收发问题
邮箱功能讲解
邮箱其他问题
网站程序
java教程
asp程序
asp.net程序
vb编程
php程序
营销推广
seo优化
网站推广
搜索引擎
免费资源
网站建设
网站方案
网站改版
网页设计
网站维护
网站策划
域名注册
域名转入\转出
英文域名
通用网址
中文域名
域名解析
前端开发
html
jQuery
JavaScript教程
css
div+css
网站备案
备案流程指南
备案资料下载
备案常见问题
各省备案要求
移动互联网
wap手机网站
app应用开发
微网站
当前位置:
创新互联
>>
常见问题
>>
虚拟主机
>>
主机管理
>>
关于PHP出现Too many connections 的问题
关于PHP出现Too many connections 的问题
作者:创新互联 文章来源:虚拟主机 点击数:
更新时间:2013-11-14
以前有朋友问过我,为什么他的网站出现Too many connections 错误。因为我自己没有遇到过这个问题,那时候工作也忙,没有时间去考虑这个问题。几个星期前,到现在的公司工作,有朋友告诉我,我现在的公司的网站上出现同样的问题,到了非要搞清楚的地步了,于是在PHP手册里面找关于mysql_connect和mysql_pconnect的资料,下面是在php手册中对这两个函数的描述:
-------- mysql_connect -----------
函数原型:
resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]])
返回:
如果成功则返回一个 MySQL 连接标识,失败则返回 FALSE。
描述:
mysql_connect() 建立一个到 MySQL 服务器的连接。当没有提供可选参数时使用以下默认值:server = 'localhost:3306',username =
服务器进程所有者的用户名,password = 空密码。
如果用同样的参数第二次调用 mysql_connect(),将不会建立新连接,而将返回已经打开的连接标识。参数 new_link 改变此行为并使
mysql_connect() 总是打开新的连接,甚至当 mysql_connect() 曾在前面被用同样的参数调用过。参数 client_flags 可以是以下常量的组合
:MYSQL_CLIENT_COMPRESS,MYSQL_CLIENT_IGNORE_SPACE 或者 MYSQL_CLIENT_INTERACTIVE。
注: new_link 参数自 PHP 4.2.0 起可用。
client_flags 参数自 PHP 4.3.0 起可用。
一旦脚本结束,到服务器的连接就会被关闭。除非之前已经调用了 mysql_close() 来关闭它。
------- mysql_pconnect -------------
函数原型:
resource mysql_pconnect ( [string server [, string username [, string password [, int client_flags]]]])
返回:
如果成功则返回一个正的 MySQL 持久连接标识符,出错则返回 FALSE。
描述:
mysql_pconnect() 建立一个到 MySQL 服务器的连接。如果没有提供可选参数,则使用如下默认值:server = 'localhost:3306',
username = 服务器进程所有者的用户名,password = 空密码。client_flags 参数可以是以下常量的组合:MYSQL_CLIENT_COMPRESS,
MYSQL_CLIENT_IGNORE_SPACE 或者 MYSQL_CLIENT_INTERACTIVE。
server 参数也可以包括端口号,例如 "hostname:port",或者是本机套接字的的路径,例如 ":/path/to/socket"。
注: 对 ":port" 的支持是 3.0B4 版添加的。
对 ":/path/to/socket" 的支持是 3.0.10 版添加的。
-------- 两者之间的区别 --------------
mysql_pconnect() 和 mysql_connect() 非常相似,但有两个主要区别。
首先,当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接
标识而不打开新连接。
其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close() 不会关闭由
mysql_pconnect() 建立的连接)。
可选参数 client_flags 自 PHP 4.3.0 版起可用。
此种连接称为"持久的"。
看到这里,写一条代码来测试一下
/*
* pconnect_test.php
*/
$link = mysql_pconnect("localhost", "mysql_user", "mysql_password")
or die("Could not connect: " . mysql_error());
print ("Connected successfully");
通过刷新网页的方式执行这条代码,发现每执行一次,mysql的进程数就增加一个。在这里我不禁有了疑问。上面说mysql_pconnect这个函
数的使用的时候,不是说"当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到
,则返回此标识而不打开新连接"么?为什么我每刷新一次页面他就给我打开一个新的连接呢?
考虑到这有可能是PHP的bug,我到PHP的bug列表中找关于和too many connections 有关的条目。
相关的话题主要有三个,分别是
#11966 mysql_pconnect opens new connections with the same parameters
#26117 Persistent connection not reused
#13589 Persistent connections stay open and accumulate
描述比较长,我就不在这里贴,具体的内容你自己去看。重点主要是"当一个进程打开一个mysql的持续连接,只要该进程还存在,这个持续
的连接就不会断开,而且每一个进程会打开一个mysql的持续连接,而不能使用其他进程打开的持续连接"。
到这里,我把相关的信息发给上海的朋友张宏,他提示我把apache的子进程数限制到不高于mysql的最大连接数。我问了我们的系统管理员
,他说我们的
服务器
上apache的最大子进程数是256,而mysql的最大连接数限制为600。就是说mysql的最大连接数已经远远超过httpd的进程数
,为什么还会出现Too many connections 这样的错误呢?答案就在于PHP程序。打开以前同事写的程序,发现同一个运行脚步中过多的调用
mysql_pconnect函数。如果在应用服务器上,每一个httpd子进程使用一个php脚本,每一个php脚本打开不止一个mysql的连接。因为httpd所产
生的子进程的生存期是apache服务器指定的,一般服务器不重启,这些进程就一直存在。就算服务器重启,也可以指定保存这些进程。由于进
程的存在,那么这些连接都不会断掉,并且每个进程打开几个连接数,那么统计起来,连接数就达到了mysql限制的最大连接数。这时就出现
Too many connections 错误。
小结一下,要保证你的系统不会出现Too many connections 错误,需要注意两点:
1.保证你的apache的最大进程数不超过mysql的最大连接数;
2.不要在程序里面用过多mysql_pconnect连接到同一个数据库服务器(一个就够了).这需要好的编码习惯和规范.特别是不断的给系统增加
新的功能,如果不注重系统架构和编码规范,当系统的复杂度到了一定的程度,整个系统就变得无法维护了.出现问题的时候解决起来就很麻烦了
使用网站空间有什么限制?
:上一篇
网站访问时出现应用程序中的服务器错误的原因?
:下一篇
主机管理相关文章
使用网站空间有什么限制?
u是什么单位?u是什么意思?
什么是自由型主机
使用限制
个人建站,网站空间适度就好
单线虚拟主机和双线虚拟主机,我们...
如何选择主机操作系统?
Linux虚拟主机设置自定义40...
创新互联专注虚拟主机/网站空间多年,高速、稳定、安全有保障!虚拟主机首选创新互联。
移动互联网
|
网站备案
|
前端开发
|
域名注册
|
网站建设
|
营销推广
|
网站程序
|
虚拟主机
|
企业邮箱
|
服务器租用
|
热门搜索
服务电话:028-86922220 13518219792 公司地址:成都市太升南路288号锦天国际A幢10楼2号
企业邮箱:
service@cdxwcx.com
版权所有:成都创新互联科技有限公司 蜀ICP备09010846号
成都网站建设
主机Too many connections的问题