http://www.codeigniter.org.cn/forums/thread-11875-2-1.html
pconnect是指PHP到MySQL的连接。pconnect为真值时,CI调用PHP中的mysql_pconnect()。
mysql_pconnect()开一个PHP/MySQL的永久连接,PHP脚本结束时连接不会断,PHP结束时连接才会断。
在Apache下,PHP以module形式存在,Apache结束才会令PHP结束。使用FastCGI时,一般会以PHP执行总时间定下PHP的寿命,PHP会定期结束/重生。
pconnect是重用连接,而非共用连接。
MySQL的默认总连接是150,30秒后才超过150,以压力环境情况,若无重用,不断开启新连接,早应超过150,这证明PHP/MySQL的确在重用连接。
MySQL达至超过150个连接,说明有超过150个PHP进程。使用Apache时,PHP进程是以Apache进程存在,Apache默认的 MaxClients是256,但不少Linux服务器上一般会预设为150而不使用默认的256与MySQL吻合。Apache超过MySQL负荷是有点奇怪,是使用Windows吗?先去确认一下MaxClients吧!
有超过150个Apache进程存在,是说明PHP处理不来压力环境的请求率,处理不及时,进程逐渐累积达至超过MySQL的总连接。这是超负荷了。若负荷是瞬时的,把MySQL的max_connections增加至与Apache的MaxClients可增加瞬时负荷能力,但这不能增加持久的负荷力,继续下去总会达至系统完全饱和。
这问题与CI无关,是xAMP共有的负荷力问题,使用CI比纯PHP应用要早些达到负荷力饱和点,因使用CI要多耗费点资源。CI算是开销最低的PHP架构之一,不花钱在机器上,又不花时间去学会调试系统,去进行压力测试,不明所以便作出“CI还是很脆弱”的结论!无言以对!也许该放弃使用任何架构进行开发。
pconnect是鸡肋?对于压力负荷环境,除非内存限制极大,pconnect是极有好处的选择。
PHP并非不可事前编译为“中间码”,Zend是有提供编译器的,当然要付钞!