SAE PHP 研究(3)



测试lamp结构限制链接数,内存大小,cpu时间
1.
 ./configure  --with-apxs2=/etc/httpd/bin/apxs
报错
configure: error: xml2-config not found. Please check your libxml2 installation.
解决:把一些相关的全装上算了
yum -y install libjpeg-devel libpng-devel freetype-devel libxml2-devel libxslt-devel zlib-devel curl-devel mhash-devel openldap-devel gd-devel




2.make && make install




3.vi /etc/httpd/conf/httpd.conf




找到
AddType application/x-gzip .gz .tgz
下行添加
AddType application/x-httpd-php .php





如果LoadModule php5_module modules/libphp5.so  前有‘#’,去掉注释




找到
<IfModule dir_module>
   DirectoryIndex index.html
</IfModule>
修改为
<IfModule dir_module>
   DirectoryIndex index.html index.htm index.php
</IfModule>




4.限制链接数并测试




如何知道当前apache的应用模式 




httpd -l   或者apache2 -l      如果有 prefork.c  那就是 prefork 方式,如果是 worker.c 那就是 work 模式。 
/usr/local/qae/apache/bin/httpd  -l
Compiled in modules:
 core.c
 mod_so.c
 http_core.c
 prefork.c
 
 
    prefork 模式【sae使用的模式】: 
    以 prefork 模式工作的 apache 的默认配置: 
    <IfModule mpm_prefork_module> 
        ServerLimit             2000    #实际能到的最大并发数
        StartServers               5    #指定服务器启动时建立的子进程数量 
        MinSpareServers            5    #指定空闲子进程的最小数量 
        MaxSpareServers           10    #指定空闲子进程的最大数量 
        MaxClients               150    #指定同一时间客户端最大接入请求的数量(单个进程并发线程数),任何超过该限制的请求都将进入等候队列,一旦一个连接被释放,队列中的请求将得到服务 
        MaxRequestsPerChild        0    #指定每个子进程在其生存周期内允许伺服的最大请求数量,默认为10000,0表示子进程永远不结束 
    </IfModule> 




       worker 模式: 
    以 worker 模式工作的 apache 的默认配置为: 
    <IfModule mpm_worker_module> 
        StartServers               2 
        MaxClients               150 
        MinSpareThreads           25 
        MaxSpareThreads           75 
        ThreadsPerChild           25 
        MaxRequestsPerChild        0 
    </IfModule>  




使用配置
    <IfModule mpm_prefork_module> 
        ServerLimit             200    #写为200好测试是否限制在200个最大并发
        StartServers               5    #指定服务器启动时建立的子进程数量 
        MinSpareServers            5    #指定空闲子进程的最小数量 
        MaxSpareServers           10    #指定空闲子进程的最大数量 
        MaxClients               150    #指定同一时间客户端最大接入请求的数量(单个进程并发线程数),任何超过该限制的请求都将进入等候队列,一旦一个连接被释放,队列中的请求将得到服务 
        MaxRequestsPerChild        0    #指定每个子进程在其生存周期内允许伺服的最大请求数量,默认为10000,0表示子进程永远不结束 
    </IfModule> 




使用工具 :webbench 模拟并发连接测试网站的负载能力
wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install
使用:
 
/usr/local/bin/webbench -c 5000 -t 300 10.11.11.111/index.php
  参数说明:-c表示并发数,-t表示时间(秒)
测试结果:
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
194
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
173
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
185
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
196
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
193
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
184
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
179
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
160
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
213
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
209
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
193
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
204
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
198
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
200
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
204
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
207
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
191
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
218
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
202
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
174
[root@WebCacheTest5 modules]# netstat -n|grep ESTABLISHED|grep "10.11.11.111:80"|wc -l
189
结论:最大连接数限制成功,偶有超过




5.限制php脚本内存使用大小并测试
1)SAE中 memory_limit 64M 64M
故设置php.ini中 
vi /usr/local/lib/php.ini
memory_limit = 64M
重启apache,查看phpinfo();看到
memory_limit 64M 64M




2)设置php.ini
default_socket_timeout = 600
10分钟关闭,免得还没测试完socket就关闭了
3)书写不断吃内存程序,
计算方法:1)初始化空数组 2)死循环 3)给数组加元素,并sleep(1);
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
<?php
/*
功能:不断吃内存 eating.php
*/
set_time_limit(0);
$eatArr = array();
$stopFlag = false;
while(!$stopFlag)
{
for($i=0;$i<100*1024;$i++) $eatArr[]="1";  
echo memory_get_usage()."\n"; 
sleep(1);
}
?>




4)
测试结果
[root@xen187v ~]# curl "http://10.11.11.111/eating.php"
18882496
37134904
56435800
<br />
<b>Fatal error</b>:  Allowed memory size of 67108864 bytes exhausted (tried to allocate 71 bytes) in <b>/usr/local/qae/apache/htdocs/eating.php</b> on line <b>11</b><br />




5)
从这里可以看出,内存限制没问题,
并可看出
100*1024个元素每个元素的长度为1字节一维数组消耗内存为
18M左右
一个数组元素存储占了180字节左右,
【为何这么大?谁知道的解释下
可以参考下 http://blog.csdn.net/hguisu/article/details/7376705
上文仍然不足以解释为何一个元素占用180字节









6.限制php脚本cpu时间并测试
SAE中 
safe_mode = off 【safe模式的时候时间控制不生效?】
default_socket_timeout 5 5
max_execution_time 30 30
故设置php.ini
default_socket_timeout = 5
max_execution_time = 30
 
 




重启apache
书写测试程序
<?php 
/*
功能:不断消耗时间 timing.php
*/ 
$stopFlag = false;
while(!$stopFlag)

echo time()."\n"; 
sleep(1);
}
?>
测试结果:失败,连接无法关闭。
原因:sleep 不占用cpu时间
 




Note:




The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), stream operations, database queries, etc. is not included when determining the maximum time that the script has been running. This is not true on Windows where the measured time is real.




修改脚本为




<?php 
/*
功能:不断消耗时间 timing.php
*/ 
$stopFlag = false;
while(!$stopFlag)
{  
}
?>





测试结果:成功
[root@xen187v ~]# time  curl "http://10.11.11.111/timing.php"
<br />
<b>Fatal error</b>:  Maximum execution time of 10 seconds exceeded in <b>/usr/local/qae/apache/htdocs/timing.php</b> on line <b>8</b><br />
 
real    0m10.018s
user    0m0.000s
sys     0m0.000s
[root@xen187v ~]# 

你可能感兴趣的:(SAE PHP 研究(3))