用户
 找回密码
 入住 CI 中国社区
搜索
楼主: xnettunnel
收起左侧

[讨论/交流] 压力测试结果:CI还是很脆弱,HELP

  [复制链接]
 楼主| 发表于 2012-3-3 13:35:53 | 显示全部楼层
yunnysunny 发表于 2012-3-3 13:19
并发300个线程,用java的话,是很easy的事情,不会出现你说的服务器堵塞的情况。我这双核的台式机,跑1000 ...

那可以是现在的JDK先进多了吧?
因为我对吧java/php性能的时候也是5、6年前左右的事情了,那时候真的差太远。现在JAVA也套上各类框架,诸如SSH,ZK等,出来的效果也非常一般。反而我们公司用的一套纯手工打造的JSP系统,反而性能很不错(当然,服务器也比较高端)。
发表于 2012-3-3 14:03:57 | 显示全部楼层
“pconnect估计就是可以代替连接池的作用了,持久连接,据说是借用了apache的进程池”,进程之间的数据能共享吗?听说过线程池,进程池的概念不懂。
 楼主| 发表于 2012-3-3 15:08:17 | 显示全部楼层
测试结果证明CI不是瓶颈。
问了度娘和谷哥,都说这个pconnect是鸡肋。。。
那如果php配postgreSQL,如果想得到连接池效果,得借用Pgbouncer工具,Php这个短板为什么到现在还不解决呢?
发表于 2012-3-4 06:56:24 | 显示全部楼层
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是有提供编译器的,当然要付钞!

点评

学习了!Thks  发表于 2012-3-25 22:50
帮我解决了心中不少的疑问!  发表于 2012-3-10 08:01
发表于 2012-3-4 22:39:11 | 显示全部楼层
进来学习一下压力测试,线程
 楼主| 发表于 2012-3-5 09:03:15 | 显示全部楼层
受教了,不过,apache的htptd.conf里面没有maxclient呢?
发表于 2012-3-25 14:24:29 | 显示全部楼层
楼主提醒你下,php的内存限制开大点,mysql的内存使用开大点,连接数开大点,然后是apache的连接数和并发数还有内存大小。
好了楼主,你出现的问题跟CI没多大关系,是属于架构方面的问题了。
发表于 2012-3-25 14:26:37 | 显示全部楼层
xnettunnel 发表于 2012-3-5 09:03
受教了,不过,apache的htptd.conf里面没有maxclient呢?

在扩展配置文件里。
发表于 2012-3-25 17:08:19 | 显示全部楼层
燃雲 发表于 2012-3-4 06:56
pconnect是指PHP到MySQL的连接。pconnect为真值时,CI调用PHP中的mysql_pconnect()。

mysql_pconnect()开 ...

对于楼上说的一些观点,我表示不赞同。apache中的maxclient参数,在不同的工作模式下它的意义是不同的。如果apache工作在prefork 模式下,那么maxclient值确实是值最大进程数,这时apache是多进程单线程模式;但是,如果apache工作在work模式下,那么maxclient值就是单个进程的最大线程数,这时apache是多进程多线程模式。
发表于 2012-3-26 08:32:32 | 显示全部楼层
xnettunnel 发表于 2012-3-3 13:24
结果来了
把database.php里面的pconnnect设为FALSE,db_debug设为FALSE,300个并发链接,三十秒后,浏 ...

这个学习了。
但是我认为JAVA的效率应该还是高些吧,PHP擅长的是开发敏捷快速。

本版积分规则