文档章节

服务器性能优化(三):php调优

stone_
 stone_
发布于 2015/10/29 16:29
字数 1273
阅读 420
收藏 1

1)  使用APC模块(缓存opcodes)

    安装APC模块  

    tar -zxvf  APC-3.0.19.tar.gz

    cd  APC-3.0.19

    /opt/php/bin/phpize  

    ./configure

    make 

    make install

 APC模块配置参数:

   apc.enabled=1

   apc.shm_segmemnts = 1

   apc.shm_size = 64

   APC把数据缓存到内存里面,我们就有必要对内存资源进行限定,通过这二个配置可以限定APC可以使用的内存空间大小。

   apc.shm_segments指定了使用共享内存块数,而apc.shm_size则指定了一块共享内存空间大小,单位是M。所以,允许APC使用的内存大小应该是 apc.shm_segments * apc.shm_size = 64M。

    apc.num_files_hint = 1000

    apc.user_entries_hint = 4096

    这二配置指定apc可以有多少个缓存条目。apc.num_files_hint说明你估计可能会有多少个文件相应的opcodes需要被缓成,即大约可以有多少个apc_compiler_cache条目。另外apc.user_entries_hint则说明你估计可能会有多少个apc_userdata_cache条目需要被缓存。如果项目中不使用apc_store()缓存用户数据的话,该值可以设定得更小。也就是说apc.num_files_hint与apc.user_entries_hint之和决定了APC允许最大缓存对象条目的数量。准确地设置这二个值可以得到最佳查询性能.

      apc.stat =1

      apc.stat_ctime

      这二个参数,只跟apc_compiler_cache缓存相关,并不影响apc_user_cache。apc_complier_cache,它缓存的对象是php源文件一一对应的opcodes(目标文件)。PHP源文件存放在磁盘设备上,与之相对应的Opcodes目标文件位置内存空间(共享内存),那么当php源文件被修改以后,怎么通知更新内存空间的opcodes呢?每次接收到请求后,APC都会去检查打开的php源文件的最后修改时间,如果文件的最后修改时间与相应的内存空间缓存对象记录的最后修改时间不一致的话,APC则会认为存放在内存空间的Opcode目标文件(缓存对象)已经过期了,acp会将缓存对象清除并且保存新解析得到的Opcode。我们关心的是,即便没有更新任何php源文件,每次接受到http请求后,APC都会请求系统内核调用stat()来获取php源文件最后修改时。我们可以通过将apc.stat设置为0,要求APC不去检查Opcodes相对应的php源文件是否更新了。这样可以获得最佳的性能,我们也推荐这么做。不过,这样做有一点不好的就是,一旦有PHP源文件更新了之后,需要重启httpd守护进程或者调用apc_cache_clear()函数清空APC缓存来保证php源文件与缓存在内存空间的Opcodes相一致。

    apc.ttl =0

    apc.user_ttl =0

    apc.ttl作用于apc_compiler_cache。当apc.ttl大于0时,每次请求都会对比这次的请求时间与上一次请求时间之差是不是大于apc.ttl,如果大于apc.ttl,则会被认缓存条目过期了,会被清理。


     推荐如果项目较为稳定,并且apc.stat设置为0。同时apc.shm_size、apc.num_files_hint设置合理的话,apc.ttl建议设置为0。即apc_compiler_cache永不回收,直到重启httpd守护进程或者调用函数apc_cache_clear()清缓存。至于apc.user_ttl,建议设置为0,由开发人员调用apc_store()函数的时候,设置$ttl来指定该缓存对象的生命周期。

     apc.max_file_size = 1M

     apc.filters = NULL

     apc.cache_by_default=1

     这三个配置放在一起,是因为他们都用于限制缓存。其中apc.max_file_size表示如果php源文件超过了1M,则与之对应的opcodes不被缓存。而apc.filters指定一个文件过滤列表,以逗号(,)隔开。当apc.cache_by_default等于1时,与apc.filters列表中指定的文件名相匹配的文件不会被缓存。相反,apc.cache_by_default等于0时,仅缓存与acp.filters列表中指定的文件相匹配的文件。 

2)使用xhprof模块(性能分析工具)

    xhprof安装:

wget   http://pecl.php.net/get/xhprof-0.9.2.tgz

tar zxf xhprof-0.9.2.tgz

cd xhprof-0.9.2

cp -r xhprof_html xhprof_lib /www/www.hx.com/xhprof/

cd extension/

/opt/php/bin/phpize

./configure  –with-php-config=/opt/php/bin/php-config

make 

 make install

在php.ini中添加:

extension=xhprof.so

xhprof.output_dir=/opt/xhprof

xhprof的调用,在index.php中添加如下代码:


if ($config->php->xhprof  &&  mt_rand(1, 10000) == 1) {

   xhprof_enable();

   $xhprof_on = true;

}


if(config->php->xhprof  &&xhprof_on){

$xhprof_data = xhprof_disable();

$xhprof_root = '/opt/xhprof'

include_once $xhprof_root."xhprof_lib/utils/xhprof_lib.php"; 

include_once $xhprof_root."xhprof_lib/utils/xhprof_runs.php"; 

$xhprof_runs = new XHProfRuns_Default(); 

runid=xhprof_runs->save_run($xhprof_data, "hx");

echo '<a href="http://www.test.com/xhprof_html/index.php?run='.$run_id.'&source=hx" target="_blank">统计信息</a>';


}

 运行程序,底部出现统计信息字样,点过去就可以看到性能分析了。按运行时间排序,很容易找出化时间最长的函数。  

Function Name

Calls

Calls%

Incl. Wall Time

(microsec)

IWall%

Excl. Wall Time

(microsec)

EWall%

mysql_query

165

0.6%

93,442

47.1%

93,442

47.1%

Memcache::get

32

0.1%

10,417

5.2%

10,417

5.2%

ezSQL_mysql::query

165

0.6%

117,153

59.0%

8,816

4.4%

fgets

10

0.0%

6,275

3.2%

6,275

3.2%

mysql_fetch_field

631

2.2%

2,692

1.4%

2,692

1.4% 


表格中一些参数的解释:

Function_Name  :  函数名

Calls     : 调用次数

Calls %  : 调用百分比

Incl.Wall Time  :   调用包含子函数所有花费时间   以微妙计算 

Excl. Wall time  :  函数执行本身所花费的时间, 不包括子函数执行时间.


© 著作权归作者所有

共有 人打赏支持
stone_
粉丝 20
博文 221
码字总数 163611
作品 0
洛阳
程序员
性能调优概述

大纲: 一、概述 二、什么是性能调优?(what) 三、为什么需要性能调优?(why) 四、什么时候需要性能调优?(when) 五、什么地方需要性能调优?(where) 六、什么人来进行性能调优?(who) 七、怎...

陈明乾
2014/07/14
0
0
求PHP,MYSQL,NGINX方面的配置与调优

求PHP,MYSQL,NGINX方面的配置与调优 1、PHP方面: PHP底层系统架构设计 WEB安全防范 常用设计模式 cache的使用 2、MYSQL方面: mysql性能优化配置, mysql数据库设计,索引 3、memcached,red...

不会武功的猪
2016/04/28
197
0
Windows Server 2016进行性能调优?

  【IT168 技术】微软已发布了官方Windows Server 2016性能调优指南。这是一个全面的指南,提供了一系列技术文章,其中包含对IT专业人员的指导,提供对负责部署,操作和调优Windows Serve...

it168网站
2017/05/26
0
0
何崚谈阿里巴巴前端性能优化最佳实践

转载:http://www.infoq.com/cn/interviews/hl-alibaba-front-end-performance-optimization 大家好,我现在在阿里巴巴园区采访阿里巴巴中文站架构师,兼B2B网站优化领域的负责人何崚。何崚你...

晨曦之光
2012/03/09
198
0
何崚谈阿里巴巴前端性能优化最佳实践

大家好,我现在在阿里巴巴园区采访阿里巴巴中文站架构师,兼B2B网站优化领域的负责人何崚。何崚你好,请简单介绍一下你自己。 我叫何崚,2006年加入阿里巴巴。之前一直在中科院下属的两个基因...

zjf_sdnu
2011/10/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java并发编程:volatile关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生...

engeue
21分钟前
1
0
php-fpm配置文件详解

第一部分:FPM 配置 参数          | 说明 -p            | 命令行中动态修改--prefix   ;include=etc/fpm.d/*.conf  | 用于包含一个或多个文件,如果glob(3)存在(...

bengozhong
22分钟前
1
0
Django允许外部ip访问

1、关闭防火墙 service iptables stop 2、设置django 开启django时,使用0.0.0.0:xxxx,作为ip和端口例如: python manage.py runserver 0.0.0.0:9000 3、在settings里修改ALLOWED_HOSTS = [......

MichaelShu
26分钟前
1
0
机器学习在客户管理场景中的应用

使用机器学习进行客户管理,我们可以得到客户360度全方位的视图。 本文以SAP Cloud for Customer的客户管理应用为例,介绍机器学习是如何同传统的客户管理应用进行集成的。 打开SAP C4C的客户...

JerryWang_SAP
32分钟前
1
0
ftp链接ubuntu虚拟机

1.在主机上安装Xftp 5 2.在虚拟机中输入: sudo apt-get install vsftpd 3.打开 /etc/vsftpd.conf修改如下变量 listen=YES anonymous_enable=YES local_enable=YES write_enable=yes local_......

15834278076
37分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部