为什么用ab压apache,并发很难超过120

xiaozhen 2010-12-17 09:54:09
用一台酷睿pc,安装centos5.3,自带的apache+php+mysql,
用ab压了几次,并发分别是50,120,130,200.
ab -c 120 -n 50000 http://192.168.1.50/test.php
这个test.php内容是很简单的
<?php
$q1=microtime(true);
$str = "mysql:host=192.168.1.50;port=3306;dbname=abc";
$con[PDO::ATTR_TIMEOUT] = 3;
$con[PDO::ATTR_PERSISTENT] = true;
$db = new Pdo($str, 'abc', 'abc', $con);

$insert = "INSERT INTO cation SET ...........";

$db->exec($insert);

$q2=microtime(true);
echo $q2 - $q1;
?>

很奇怪的是,当并发在120以下时,apache的反应速度都很快,每秒能处理的事务达到500以上。
而一旦并发超过120,apache的反应速度马上下降,每秒处理的事务才100多点。
如果并发高过200,测试就会出现失败几千次。

开始以为瓶颈在mysql,但是写了一个php循环50000次insert,花的时间也很短。
后来干脆在test.php里去掉所有业务代码,只写一些简单的echo,但是得到的结果大同小异。

按照网上的文章,修改httpd.conf里MPM相关内容,也没有得到效果提升。
用httpd -l查看,apache默认是prefork方式。
<IfModule prefork.c>
StartServers 8
MinSpareServers 50
MaxSpareServers 100
ServerLimit 2000
MaxClients 1000
MaxRequestsPerChild 4000
</IfModule>
如果把MaxClients改的特别小,带来的反面影响是很明显,所以这个配置文件应该是生效的。

但是同样centos上安装tomcat和一个插入数据库的java程序,用ab测试,并发数很容易达到400。
这是为什么呢?
...全文
224 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ashchen 2011-03-25
  • 打赏
  • 举报
回复
不清楚,装个php的加速器eacc看看


pc处理并发能力还是有限的。不知道有没有监测内存的使用情况。如果内存耗光用到swat 就非常慢了。

服务器全静态页面并发也不会很高,可能apache就这性能了,要么你换ngx看看或者重新优化编译apache,精简模块

24,923

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Apache
社区管理员
  • Apache
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧