实验环境
1、LAMP平台,虚拟机Centos7.4操作系统,2G内存。Apache版本为Apache/2.4.6 (CentOS),Mysql版本为Mysql-5.17.7,PHP版本为PHP 5.4.16 IP地址为172.17.2.199
2、LNMP平台,虚拟机Centos7.4操作系统,2G内存。Nginx版本为 nginx/1.10.3,Mysql版本为Mysql-5.17.7,PHP版本为PHP 7.2.2 IP地址为172.17.2.198
实验的页面分三种。一种是静态页面。第二种是PHP解析页面,第三种是数据库连接页面。(第二种,第三种也统称为动态页面)。
实验一、使用time命令,测试PHP的版本性能差异。
这个是测试PHP性能的脚本。是求1-50万之间的质数和。
测试1、使用PHP 5.4.16进行测试
测试2、使用PHP 7.2.2进行测试
结论:测试1,测试2,我进行了多次测试。结果差异不大。从测试结果中得出,sys项,也就是系统项是没太大的差异的。系统配置完全一致的。影响解析的,是user,也就是php软件自身。PHP 7.2.2 版本的解析性能,大致是PHP版本为PHP 5.4.16的三倍。
实验二、测试Apache的性能上限。
测试1、访问静态页面,工具使用ab工具
ab -c 1000 -n 8000 http://172.17.2.199/index.html
模拟1000个用户,访问次数8000次,用时25.86秒,出现69个错误。
降低模拟数值
ab -c 800 -n 8000 http://172.17.2.199/index.html
还是出现错误。再次降低
ab -c 600 -n 8000 http://172.17.2.199/index.html
测试通过,0失败。再次测试,提升模拟人数,降低访问次数
ab -c 800 -n 5000 http://172.17.2.199/index.html
ab -c 1000 -n 5000 http://172.17.2.199/index.html
结论,从这里可以看出,均衡模拟人数和访问次数来说。800人数,访问5000次,是一个极限。600人数,8000次访问,是一个极限。我们用这2个极限数值,去跑一下LNMP平台的静态页面。
实验三、测试LNMP平台的性能上限。
ab -c 800 -n 5000 http://172.17.2.198/index.html
0.477秒。完成。
ab -c 600 -n 8000 http://172.17.2.198/index.html
这个性能是秒了Apache了吧。再加大测试
ab -c 1000 -n 20000 http://172.17.2.198/index.html
再次加大
ab -c 2000 -n 30000 http://172.17.2.198/index.html
再次加大
ab -c 10000 -n 30000 http://172.17.2.198/index.html
1000模拟访客,访问次数30000.出现失败。降低
ab -c 8000 -n 300000 http://172.17.2.198/index.html
夸张了吧。对比Apache。这个数值,夸张了。我没有再次继续加大访问次数了,2G的内存,块耗光了。这个配置的服务器。只能并发到这个程度了。
接下来的实验,我们做动态网页的压力测试。先做PHP的。由于PHP版本的性能差异。所以这个实验比较的是,静态页面访问的并发,和动态页面访问的并发。而不是对比Apache,Nginx的差别了。
实验1、按照1:10的说法,测试LAMP的php动态页面压力。
ab -c 80 -n 500 http://172.17.2.199/testphp.php
上图可知,在跑动态网页的时候,模拟80个用户,访问次数500次,内存消耗不多,但cpu的负载节节上升。并且,还是没抗住这个并发。
LAMP测试动态页面,降低模拟访客和访问次数。
ab -c 10 -n 10 http://172.17.2.199/testphp.php
增大测试
降低
结论:LAMP跑动态页面,模拟10个访客,访问次数10次。为极限。
实验二、LNMP访问动态页面
ab -c 50 -n 50 http://172.17.2.198/testphp.php
加大
降低
降低
结论,LNMP平台极限是60访客,60次访问。
从这里我们可以得出,同样一台服务器,可以上百上千的跑静态页面,但跑动态页面,会占据大量的系统资源。例如cpu和内存。从实验中得出,PHP的解析主要占用cpu资源。跑数据库的页面,占用内存(实验就不做了,2G的内存,随时死机)。那么这里就引申出一个优化的方向,拆。分离数据库。调度器负载均衡等等方向。
最后,Apache采用的是prefork(进程)模式,Nginx这里用的是epoll(时间触发)模式。