手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:xhprof

转perfgeeks的:记一次tps提升,做的配置变更

这次的转贴内容其实更象一个找到问题的过程,可以用来参考也可以用来思考,当你遇到问题的时候应该怎么做。
原文地址在:http://www.perfgeeks.com/?p=668
内容如下:

记一次tps提升,做的配置变更

tps低,响应时间高,并发能力差。

1.应用本身,通过xhprof找出问题代码。产生系统内核调用函数尽量避免调用。比如is_file(), time(),require/include代替require_once/include_once等。
2.尽量使用memcached缓存系统配置、模块数据、还有用户数据。减少mysqli_query()执行次数,它比较耗资源。开启mysqld的slow_query日志功能,优化那些较慢的sql查询语句。
2.通过xhprof,我们发现load和run源文件需要不少的挂钟时间,可以开启apc缓存opcode,同时设置apc.stat=off。还可以使用apc的apc_define_constants()代替php的define()
3.通过apc和memcached,收效可见,但是tps并没有提升到理想状态,同时tps不稳定,还会触底。php代码本身的优化效果甚微,对tps贡献不大。
4.重新编译php,将不必要的模块和功能禁用掉,只编译需要的。
5.配置php.ini,将不必要的模块去掉,比如gd(我们的应用不需要处理图片),soap,xhprof,mssql等。通过pmap或者lsof 可以查看一个php-cgi加载了哪些模块。减少模块加载,可以节约内存。尽量通过php.ini进行php设置,避免在代码中调用init_set操 作。比如设置时区,设置session等等。尤其data.timezone需要配置。
6.通过禁用xhprof,大概可以省下5000个cs。xhprof用完了,就应该关闭。
7.正确地设置php-fpm.max_children数量。过多的max_children浪资内存资源,还会增加cs。当然,过少的max_children会响应502。可以通过top命令观察,调整该值。
8.php-fpm使用sock方式配置。php-fpm.listen_address=/var/run/php-cgi.sock,同时nginx也需要配置fastcgi_pass指向该sock文件。
9.设置nginx.worker_processes,分别尝试了2、4、8几个值。网上大量资料说设置为cpu数*核数,其实更需要根据你的需求来设 定这个值。worker值越大,表示同时处理量大但速度更慢,相反表示处理速度能力强但数量更小。如果做为反向代理服务器,worker值可以大一点,如 果做为web逻辑服务器,值可以小一点。
10.网络IO,选择支持多路复用模型epoll,FreeBSD采用kqueue。如果网站流量小,选择select也还是不错的。
11.开启持久连接机制keep-alive,keep-alive可以复用tcp/ip连接,大量地减少了accept()系统内核调用。这里将nginx.keepalive_timeout设置为60.注意http/1.1默认开启keep-alive
12.gzip,压缩http响应输出。当响应输出量足够小,使用gzip压缩并没有意义。可以通过gzip_min_length指定跳过gzip压缩。
13.关闭nginx.access_log。通过access_log off可以不记录日志。减少不必要的磁盘I/O操作。如果开启日志功能,最好写个脚本将日志按量分割成更小的文件。
14.对于静态资源服务器,可以开启sendfile功能和设置expires缓存新鲜期。
15.将selinux设置为disabled,命令setenforce 0,只是将selinux设置为permissive,该模式会执行安全策略检查并打印警告。
16.通过chkconfig管理系统随机开启的守护进程。将不必要启动的守护进程关闭,比如sendmail, portmap, atd, netfs, nfslock等。这些守护进程浪费内存空间。
17.关闭防火墙,iptables –flush可以清除所有防火墙规则。
18.将不必要的进程关闭。比如/sbin/mingetty只需要开启3个就足够用,可以在/etc/inittab配置。比如gdm进程,通过 /etc/inittab将id:5:initdefault:改为id:3:initdefault:。等等。通过ps -ef可以查看你当前打开的进程,请确定每一个进程都”出师有名”。
19.资源限制,每个进程可以打开的文件最大数量默认是1024,通过ulimit设置更大的值(ulimit -SHn 65535)。如果没有生效,可以编辑资源限制配置文件/etc/security/limits.conf。同时别忘记了将php- fpm.rlimit_files和nginx的worker_rlimit_nofile、worker_connections设置同样大小。
20.优化磁盘IO,添加挂载参数noatime。可以编辑/etc/fstab,注意不要在/etc/fstab增加挂载参数data=writeback,会导致磁盘挂载为ro。
21.关闭ipv6内核模块
22.增加dns查询记录至/etc/hosts。比如222.73.211.215 www.perfgeeks.com
23.调整内核参数。经过一番折腾,tps有提升,但是不稳定,通过sysctl调整内核参数则稳定了。
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768

net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

net.ipv4.tcp_tw_recycle = 1
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800

#net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535

通过一番辛苦,tps终于从120升到了810,并且tps曲线平衡(几乎时条直线),cpu资源的利用率也很平衡80%的us和20%的sys。 要提高tps,首先要保证单个请求响应时间不能过长。响应时间过大,tps较难提升。更少的上下文切换和更少的系统内核调用,更少的IO操作可以换得更大 的tps。通过strace可以统计出调用了哪些系统内核调用,帮助你优化应用。减少上下文切换最有效的办法就是减少进程数量。

Tags: php, xhprof, tps

ubuntu 下安装xhprof

说实话,第一次知道xhprof是在某次小型聚会上,当时echo演示了一下xhprof的作用,并稍作了一些介绍。嗯横,当时出了点小故障,xhprof,安装一直失败,最后就看了一下代码和一些图形界面分析的演示。
由于昨天刚刚安装ubuntu开始了我的装B之旅,所以我偷偷的看了看xhprof,想看看是否能够正常安装。却发现,原来是这样的简单。。。

$wget http://pecl.php.net/get/xhprof-0.9.2.tgz
嗯,这个版本是pecl上最新的版本了。很久没有更新过了。
$tar zxf xhprof-0.9.2.tgz
$cd xhprof-0.9.2
$apt-get install php5-dev
这一步必须,否则无法使用phpize来编译这个so,大约需要20多M的下载,安装完之后,继续。。
$cd extension
$phpize
$./configure –with-php-config=/usr/bin/php-config
这是由于我们的PHP也是apt-get 回来的,所以就不用变了啦。
$make && make install
编译完后,会提示你make test
$make test
当然,在运行途中没有出错的话,可以不运行。
然后,到ini存放的目录里建一个xhprof.ini
$cd /etc/php5/conf.d/
$vim xhprof.ini
输入以下内容。。。
[xhprof]
extension=xhprof.so
xhprof.output_dir=/opt/xhprof/
上面这个dir默认是不存在的,所以需要到/opt/目录下新建一下这个目录。反正都是在自己的机器上,直接chmod 0777 就完事了
嗯横,现在重启一下apache2
$/etc/init.d/apache2 restart
看一下PHPINO,会发现里面多了xhprof了,就两行信息。。。
测试代码可以看一下官方的documention。地址在:http://mirror.facebook.net/facebook/xhprof/doc.html
可以根据doc中的例子写一个简单的代码测试一下:

PHP代码
  1. <?php  
  2.   
  3. function bar($x) {  
  4.   if ($x > 0) {  
  5.     bar($x - 1);  
  6.   }  
  7. }  
  8.   
  9. function foo() {  
  10.   for ($idx = 0; $idx < 2; $idx++) {  
  11.     bar($idx);  
  12.     $x = strlen("abc");  
  13.   }  
  14. }  
  15.   
  16. // start profiling  
  17. xhprof_enable();  
  18.   
  19. // run program  
  20. foo();  
  21.   
  22. // stop profiler  
  23. $xhprof_data = xhprof_disable();  
  24.   
  25. // display raw xhprof data for the profiler run  
  26. print_r($xhprof_data);  

Over了

Tags: ubuntu, xhprof, php

XHProf介绍

上次我在博客里提到xhprof是文锋的一次聚会,其中echo就提出了这个xhprof,轻量级,fackbook常用,当然echo他们用的也 很多。

说实话我在之前没有了解过xhprof,大多数情况下还是用xdebug,但在线上的时候,肯定是不敢开这样耗资源的玩意。所以就对xhprof关 心了一点点。再后来看了一点资料,同时echo那天也贴出了部分代码,也基本上是在用概率的方式提取LOG,或者指定某种具体条件的情况下记录,以节省资 源。

今天在闲逛的时候看到有人把中文手册翻译了。感慨万分,好久没有做过这种事情了。不是我太懒,而是真的做不来。

原文在这里:http://www.162cm.com/p/xhprofdoc.html

作者这样介绍自己:

翻译:徐仁禄  <xurenlu [at] gmail.com > 
原文地址: http://mirror.facebook.net/facebook/xhprof/doc.html
初次翻译,大部分是google translate tookit工具给翻的,稍微修改了下。如遇错误,还请来信指出。谢谢!

» 阅读全文

Tags: xhprof, xurenlu

PHPChina活动涉及PPT在线观看

上周六的phpchina搞的活动可以通过echo谈xhprof,cache and long-polling查看,其中echo的ppt可以在线观看了,当然你也可以下载到本地。

 

 

不得不说的是,ppt上可以展现的内容确实有点少,如果身在上海,没有去听echo讲课,确实有点遗憾。

PPT下载在这里:web_perf.pdf

Tags: phpchina, pea, xhprof, cache, long-polling

phpchina活动-echo谈xhprof,cache and long-polling

pea的活动除了这次外,我是真没有参加过,不过在与会的同时听文峰说也好多时间没办了,所以也没有感觉啥。这次的内容主讲是蛋定工作室www.jt-tech.net的echo,讲了xhprof ,cache,以及long-polling的一些应用及讲解,因为对xhprof以及long-polling有点兴趣,所以就参加了。当然还有另外的原因:echo在群里研究session的时候,非常透彻,也想看看他平时用啥工具之类的;另外就是想看看11爷、四爷以及逍遥等人长啥样。
好象以前在drupal研讨会的时候见过文峰,应该也是4年前了吧,那时候好象他非常胖,也曾经找过我让我谈谈有没有什么 经验可谈的。
值此今天这一课,发现我还是离专业差的很远,都是走的野路子啊。果然是人不学习就要退步,野路子能走一时,是走不了一世的。
看着echo(蛋定工作室)的PPT上那些工具,发现,我除了x-debug外,真是一个都没有用过。丢人,不过想想也没啥,在篱笆的时候性能啥的都扔给运维了,当然他们也没有查出啥问题来,可能还是篱笆的访问量不大的原因吧?现在想想那样垃圾的代码都没有跑出问题而java的一跑就嗝屁了,也真是意外。
谈了很多废话,还是讲讲今天的内容吧,比较有印象的当然也正是我想了解和关注的xhprof以及long-polling。web client cache这玩意还真没有什么 可讲的,对着yahoo的14条军规慢慢查,慢慢改吧。【后来变22条军规了】
xhprof,是facebook提交的pecl库(好象Echo是这么说的),可以在运行时候查看效率,这点其实才是我最关注的。echo说xhprof对于那些只针对某些人出现问题,而其他用户死活折腾不出、故障BUG无法重现的性能优化、log记录非常有用。在看了他给出的wikimedia的图片,以及他实际项目中的代码片段后,觉得果然是非常有意义。对于性能的影响好象也不是很大。
xhprof,在这里我就不多介绍了,google搜索的第一条就是老王的笔记:体验XHProf_老王的技术手册_百度空间,想看的可以移步去参观一下,过两天我也会转到博客上来,毕竟这东西确实值得试一下,特别是想用在wordpress上,看看性能瓶颈到底在哪里,是否可以进行优化。

这张图真的很吸引我,可以让我检查页面中哪些地方消耗的资源最大:
大小: 145.67 K
尺寸: 374 x 376
浏览: 1656 次
点击打开新窗口浏览全图

long-polling,对于做WEB的人来说,特别是SNS的人,用的地方就多了。目前最多的用途可能就是用来检测是否有系统消息提示,如果一直用ajax,那么你会发现定期polling的时候,很耗资源。如果不信,你可以看一下thinksns,他取信息等 资料就是这样的处理。但其实long-polling也能算是用ajax在获取信息,但他连接后并不能算是断开,由服务器一直在while(true)循环。echo也给了一些测试代码。当然,其实这方面很早就研究和接触过,不过仅限于表面,因为我没有理解当并发非常大时候,这个性能如何处理。echo是说通过ulimit -n 来调整最大用户数和最大进程数来增加,因为理论上都是根据内存大小和利用率来控制,说白了,你没内存,代码再好也经不起折腾。并发也永远上不去。

很多东西,一时间可能用语言无法表达,但总算是有收获,最后抽奖的时候,报数时,号码是13,哦,原来我还是可以装 13的。over
看下一次是否再有收获。上大课确实不如上小课,有时候人多了并不一定能够讲得出话。
听说echo要把PPT放出来,到时候可以看看。
最后说一下web client cache。关于这个玩意,对于if-modified这东西等等,现在用的真是少了,以前在做垃圾网站时,都是强行指定e-tag,内容页的e-tag永远不变,首页、列表表的e-tag一天变一次,以保证性能的最大体现。其实,抛开用户登录,如果内容页是ajax的widget,那真的是可能永远不变的。不过现在都是为了更好的吸引用户,在cms中的相关文章、推荐文章、推广文章等 都是实时更新的,所以效率也相对下降一点点喽。不过,可以考虑e-tag为一天,这样对于当天频繁访问的用户速度会明显增加,但,不知道对搜索引擎会怎么样。
杂谈而己

Tags: phpchina, pea, xhprof, cache, long-polling