`
cwqcwk1
  • 浏览: 86943 次
文章分类
社区版块
存档分类
最新评论

apache/php 性能大幅提升关键参数

 
阅读更多

最近要对公司的网站做测试,我主要使用LoadRunner和ApacheBench高低搭配进行测试。LoadRunner主要用来压力测试,可以模拟用户行为,实时监测,有均值,曲线图,结果比较直观。ApacheBench也不差,比较简单,可以用来测试性能。本文侧重测试Apache/php性能,所以以ApacheBench说明。

测试过程发现一个问题,百思不得其解。

使用ApacheBench测试一段时间后,经常报这个错误“apr_poll: The timeout specified has expired (70007)”,引起了我的强烈关注

apache/php 问题测试过程

测试机器

硬件 CPU G620 2.60GHz(双核)RAM 4.00GB(2.99GB可用)
软件 win7 32位 旗舰版Apache/2.2.19PHP/5.3.26
测试命令
ab -n 10000 -c 100 http://localhost/
测试结果
静态页面(index.html)的测试性能 1200 - 1300 rps
PHP空白页(只有echo 1;)测试效果不稳定,波动很大,100 - 600 rps,越测试性能越低。测试经常都是到了95%~99%的时候ApacheBench就停住,然后报错,或者很久才响应,测试结果只有100多

PHP页面测试过程可能引发的ApacheBench错误:
apr_poll: The timeout specified has expired (70007)
Total of 9987 requests completed

这个错误出现的原因通过各种排查,最终做了定位。当php使用session.auto_start,测试一段时间后几乎都会遇到这个问题,相反,取消php的session.auto_start,问题没有发生。

apache/php 提升性能关键参数

参数1:Apache KeepAlive
Apache KeepAlive需要和线程绑定,服务器繁忙时会耗光所有线程
KeepAlive Off

参数2:Apache MPM

Apache MPM可以通过优化apache内部进程的调度来提高apache的处理能力,这里为windows参数(其他系统没测试,不提供参考,具体看官方文档

<IfModule mpm_winnt.c>
#Win32DisableAcceptEx
ThreadsPerChild 1000
MaxRequestsPerChild 10000
</IfModule>

参数Win32DisableAcceptEx会降低性能,但如果服务器网络不稳定,Apache经常报这个错误“[warn] (OS 64)指定的网络名不再可用。 winnt_accept: Asynchronous AcceptEx failed.”,就得考虑使用

参数Win32DisableAcceptEx的使用也是有风险的,可能带来另外一个问题。ApacheBench测试时,容易出现以下错误:

apr_socket_recv: 远程主机强迫关闭了一个现有的连接。 (730054)
Total of 195 requests completed

参数3:PHP Session
session.auto_start = 0

代价很小,每次使用session都要显式的session_start(),这也是个好习惯

apache/php 性能提升效果

修改了上面3个参数,再来看下测试结果:

静态页面的测试性能 1500 - 1700 rps

php空白页的测试性能 1100 - 1200 rps

或者上面的结果还不够振奋人心,文章测试数据是以我普通电脑来测试的,换成服务器结果会怎样?

戴尔PowerEdge R610(Xeon E5606*2/16GB)服务器搭载windows server 2008系统,测试php空白页rps达到2.2k以上。2.2k这个处理能力已经很可观了,再上去就是Apache没有真正使用iocp的问题了

php/session 进一步讨论

聪明的你肯定会有疑问,如果页面显式的调用session_start(),比起php的session.auto_start,性能又有什么区别?

我也做了测试,答案是一样的,也就是说session的使用消耗很大的性能

那么为什么会这样,session的使用消耗很大的性能?

和session.save_handler保存session方式有关吗?难道是操作系统io瓶颈?

下面又做一些测试来研究这个问题。

session.save_handler有几种保存方式:files,memcache,mysql等

mysql保存方式无异于files,或者说效率也不会高于files,因为高并发时,update太频繁,问题太多

memcache是保存到内存中,读写相对系统文件io来说都是比较高效的,缺点是数据不能持久化

所以这里测试memcache保存session效率,对比一下默认的files方式?

修改php配置文件

session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
session.auto_start = 1

php空白页测试性能稳定在 500 - 750 rps,ApacheBench没有出现错误

再回到files方式,难道和session存放路径有关?

修改php配置文件
session.save_handler = files
session.save_path = "d:/sess_tmp/"
session.auto_start = 1
测试结果和最开始的结果差不多,同样会引发Apachebench错误

结束语

这一次测试发现的主要问题是系统文件io瓶颈问题。相对于内存io来说,文件io是低速的,而且容易出错。这里有以下几个结论:

1、能够不用到文件读写尽量不用,考虑使用memcache等内存数据库。

2、尽量避免在一个大访问量页面做一些文件操作,如MySQL Select/Update等等。

3、对于访问较大的页面可以考虑写成静态html文件,以js方式动态更新。因为javascript脚本是等到页面加载完成后才开始执行的,也就是说,这种方式从某种程度上提高了服务端抵御ddos攻击的能力。


继续阅读

windows服务器应对高并发和DDOS攻击

简单实现web服务器负载均衡

网站安全:apache/php安全配置

apache模块 提高网页加载速度

windows下编译php扩展 memcache

分享到:
评论

相关推荐

    Apache2.4 Win64位

    FcgidWrapper "F:/web/server/PHP/php-cgi.exe" .php &lt;/IfModule&gt; 备注: apache No input filespecified,今天是我们配置apache RewriteRule时出现这种问题,解决办法很简单如下 打开.htaccess 在RewriteRule ...

    webServer / Apache / apache / apache http server / mod_cluster

    在压缩包子文件的文件名称“一个自动安装编译LAMP环境的脚本.txt”中,我们可以推测这可能是一个用于自动化安装和编译Linux(Linux)、Apache(A)、MySQL(M)、PHP(P)这四部分组成的LAMP堆栈的脚本。LAMP是Web...

    wordpress安装部署(apache/php5)

    【WordPress安装部署(Apache/PHP5)】 在搭建WordPress网站时,我们需要首先配置Apache服务器环境,并安装PHP5,因为WordPress是基于PHP运行的。这里我们将详细介绍这个过程,并提及如何让Apache与Tomcat共用90...

    phpStudy【Apache/PHP/MySQL/ZendOptimizer一键安装】 V1.75 简体中文版

    该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等。总之学习PHP只需一个包...

    Apache 集群性能优化 日志切分

    - **性能提升**:较小的日志文件读取更快,减轻I/O压力。 - **自动化备份**:可以基于日期自动归档,方便长期保存和分析。 综上所述,Apache集群性能优化主要通过调整MPM配置和采用其他优化策略实现,而日志切分则...

    Apache 2.4.39 Win64

    9. **性能提升**:通过优化内存管理和缓存策略,提升了服务器的总体性能。 在解压httpd-2.4.39-win64-VC15文件后,用户将获得一系列文件和目录,包括可执行文件httpd.exe,配置文件httpd.conf,以及各种模块和其他...

    apache+mysql+php部署

    - 更新 Apache 配置,启用 SSL 模块,配置 SSL 相关参数。 **MySQL 安装与配置** MySQL 是一款关系型数据库管理系统,常与 Apache 和 PHP 配合使用。安装步骤通常包括: 1. 使用包管理器安装:`yum install mysql...

    apache24 + php5.6

    3. **集成Apache**:在Apache的httpd.conf中,添加LoadModule指令加载PHP模块(mod_php),例如`LoadModule php5_module "path/to/php/php5apache2_4.dll"`。接着,添加以下配置,使Apache能够解析.php文件: ``` ...

    Apache2.4.6在Linux中安装及配置自启动

    配置过程中,你可以修改以下几个关键参数: 1. **ServerName**:设置服务器的域名或IP地址。 2. **DocumentRoot**:定义网站根目录,通常为 `/var/www/html`。 3. **Directory**:配置特定目录的访问权限和规则。 4...

    Apache2.2.15安装及配置过程

    - 允许`/usr/local/apache/htdocs`目录的`.htaccess`文件覆盖配置(将`AllowOverride None`改为`AllowOverride All`)。 2. 修改`conf/extra/httpd-default.conf`: - 将`HostnameLookups Off`改为`...

    mysql+apache+php

    为了提高服务器的安全性和性能,还需要进一步的优化和配置,例如调整MySQL的配置参数,限制Apache的并发连接数,设置防火墙规则,以及定期备份数据库等。此外,还可以考虑安装其他软件,如PHPMyAdmin进行数据库管理...

    centos下配置apache+php+mysql

    ./configure --prefix=/usr/local/mysql/php --with-mysql=/usr/local/mysql/mysql --with-apxs2=/usr/local/mysql/apache/bin/apxs --enable-track-vars --enable-force-cgi-redirect --with-config-file-path=/usr...

    apache-2.2.25版

    Apache 2.2.25在PHP集成方面扮演着关键角色,它是WAMP(Windows下的Apache、MySQL和PHP)和LAMP(Linux、Apache、MySQL和PHP)服务器堆栈的重要组成部分。这两个平台都是开发和测试PHP应用的常用环境,因为它们提供...

    org.apache.log4j

    Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式...

    apache,mysql,php整合包

    “apache/mysql/php整合包”通常是指一个预配置的环境,其中包含了Apache服务器、MySQL数据库和PHP解析器,使得开发者可以在本地快速搭建Web开发环境,无需逐一安装和配置这三个组件。这样的整合包简化了初学者的...

    org.apache.commons.lang jar包下载

    commons-lang3.3.1.jar、Apache Commons包中的一个,包含了一些数据类型工具类,是java.lang.*的扩展。必须使用的jar包。为JRE5.0+的更好的版本所提供 Jar文件包含的类: META-INF/MANIFEST.MFMETA-INF/LICENSE....

    Apache+php 安装软件

    4. **集成 PHP 与 Apache**:在 Apache 的 conf\httpd.conf 文件中,添加 LoadModule 指令加载 PHP 模块(如 LoadModule php_module "c:/php/php7apache2_4.dll"),然后配置 AddHandler 指令让 Apache 知道如何处理...

    Apache2.4.9安装包

    10. **性能调优** - 根据服务器的硬件配置和负载情况,你可以调整Apache的配置参数,如MaxKeepAliveRequests(每个连接的最大请求数)、KeepAliveTimeout(保持连接的超时时间)等,以优化性能。 通过以上步骤,你...

    linux下Apache+PHP+MySQL配置攻略redhat7.2

    - 编辑Apache的配置文件`/usr/local/apache/conf/httpd.conf`: - 设置管理员邮箱地址(替换为实际邮箱): ```bash ServerAdmin your_email@example.com ``` - 修改文档根目录(根据实际路径修改): ```...

Global site tag (gtag.js) - Google Analytics