文档章节

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

stone_
 stone_
发布于 2015/10/29 16:29
字数 1273
阅读 420
收藏 1
点赞 0
评论 0

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_
粉丝 19
博文 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
PHP 性能分析第三篇: 性能调优实战

注意:本文是我们的 PHP 性能分析系列的第三篇,点此阅读 PHP 性能分析第一篇: XHProf & XHGui 介绍 ,或 PHP 性能分析第二篇: 深入研究 XHGui 。 在本系列的 第一篇 中,我们介绍了 XHProf 。...

OneAPM蓝海讯通
2015/10/23
24
0
何崚谈阿里巴巴前端性能优化最佳实践

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

zjf_sdnu
2011/10/14
0
0
调优您的 LAMP 应用程序的 5 种简单方法

简介 Wikipedia、Facebook 和 Yahoo! 等主要 web 属性使用 LAMP 架构来为每天数百万的请求提供服务,而 Wordpress、Joomla、Drupal 和 SugarCRM 等 web 应用程序软件使用其架构来让组织轻松部...

红薯
2011/03/01
379
6
成为Java GC专家系列

成为Java GC专家(1):深入浅出Java垃圾回收机制 成为Java GC专家(2):如何监控Java垃圾回收机制 成为Java GC专家(3):如何优化Java垃圾回收机制 成为Java GC专家(4):Apache的MaxClients参数...

HenrySun
2016/06/21
66
0
高性能linux业务集群架构搭建、调优、自动化运维——index(更新中)

工作中零零散散写了些博客,总结了些知识。东西一多就乱,如果能有一个主页把所有内容串起来就会比较方便,就像一个网站有了内容后需要一个index主页一样,然后就有了这篇置顶博文。 现有目录...

愚人乙
2016/05/04
0
0
java 程序性能调优(总结一:概述)

本系列文章 是博主阅读 《java 程序性能优化》一书的总结。大部分内容来自此书。 性能参考指标 1,执行时间:一段代码从开始运行到结束运行,所使用的时间; 2,CPU时间:函数或者线程占用c...

hamlin
2016/04/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
12分钟前
0
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 #!/usr/bin/expectset passwd "123456"spawn rsync -av root@192.168.133.132:/tmp/12.txt /tmp/expect {"yes...

lyy549745
13分钟前
0
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
21分钟前
0
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
25分钟前
0
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
0
0
nginx负载均衡

一、nginx 负载均衡 拓扑图: 主机信息: 1、负载均衡器1(lb1):192.168.10.205 RHEL7.5 2、负载均衡器2(lb2):192.168.10.206 RHEL7.5 3、web服务器1(web01):192.168.10.207 Centos...

人在艹木中
昨天
0
0
做了一个小网站

做了一个小网站 www.kanxs123.com

叶落花开
昨天
0
0
继社会佩奇之后,又尝试了可爱的蓝胖子,有趣 Python

#哆啦A梦# !/usr/bin/env python3# -*- coding: utf-8 -*-# @Author: dong dong# @Env: python 3.6from turtle import *# 无轨迹跳跃def my_goto(x, y): penup(...

Py爱好
昨天
0
0
shell及python脚本方式登录服务器

一、问题 在工作过程中,经常会遇见需要登录服务器,并且因为安全的原因,需要使用交互的方式登录,而且shell、python在工作中也经常用到,并且可以提供交互的功能。都是利用了expect、spawn...

yangjianzhou
昨天
0
0
upstream sent too big header while reading...

nginx 报错:1736 upstream sent too big header while reading response header from upstream 1. 一般处理 location ~ \.php$ { #增加下面两句 fastcgi_buffer_size 128k; ......

dubox
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部