nginx+php-fpm故障排查

导读

作者:陈天庆(邮箱:freeskycd@qq.com,欢迎交流)

知数堂MySQL DBA班、大数据实战班优秀学员,现任职知数堂助教

小明初到一家公司做运维的工作,刚来的第一天就开始部署LNMP(Linux+Nginx+MySQL+PHP)环境,结果出现了问题。 

他来向我请教,具体问题现象、原因和解决思路如下:


问题一 nginx进程CPU和内存不均衡,某个进程占用资源特别高,如何解决?

回答:我让小明绑定下CPU的亲缘性(设置nginx配置worker_cpu_affinity项为auto,auto这个特殊值(1.9.10版本)允许自动绑定工作进程到可用的CPU上。),绑定后CPU和内存使用就均衡了。


问题二 小明又问close系统调用消耗很高怎么解决?


回答:且听我娓娓道来,继续看下文。

$ strace -cp $(pgrep -n nginx)

640?wx_fmt=png

$ top

640?wx_fmt=jpeg

系统32c的,top查看负载去到75.14,

查看过nginx和php-fpm的

错误日志也没有什么发现。

strace 跟踪close的系统调用,

都是以下的信息:

$ strace -T -ttp $(pgrep -n nginx) 2&>1 |grep -B 10 close > ./close.log

640?wx_fmt=png

$ lsof | more
 
 

640?wx_fmt=png

遂怀疑是连接创建关闭消耗了太多的资源,便让小明加了台机器专门跑nginx,
前端挂了个nginx用长连接跟后端的nginx连接,接了个nginx之后负载果然就下来了。


640?wx_fmt=png


前端未挂nginx压测ab压测结果:

640?wx_fmt=png

前端挂了nginx压测ab压测结果:

640?wx_fmt=png

tps基本没变第一个Time per,requset快了87.52%。
接着继续排查tps上不去的原因,继续strace后端的nginx。

$ strace -cp $(pgrep -n nginx)

640?wx_fmt=png

发现现在是wrtiev占用高了,strace 跟踪close的系统调用,
发现很多以下的输出:
connect(26, {sa_family=AF_INET, 
sin_port=htons(9000), 
sin_addr=inet_addr("127.0.0.1")},
 16) = -1 EINPROGRESS
 (Operation now in progress)

问题应该不是在nginx上,
应该是在php-fpm上了。

继续

$ strace -cp $(pgrep -n php-fpm)

显示下图所示:

640?wx_fmt=jpeg

access cpu时间消耗最多那就先
排查access
系统调用:
$ strace -T -ttp
$(pgrep -n php-fpm) 2&>1 |
grep -B 10 access >
./access.log


640?wx_fmt=png

php-fpm进程频繁的去读取文件,整个操
作下来花费4ms的时间。

然后排查recvfrom:
$ strace -T -ttp $(pgrep -n
php-fpm) 2&>1 |
grep -B 10 recvfrom >
./recvfrom.log

640?wx_fmt=png

频繁的去访问10.0.0.156的6379,端口,明显就是访问redis读取数据的过程,
整个过程花费12ms。
让小明把上面两个strace信息发给开发,第一个得到回复是老版本的流程,
新版本改了,但还是有些判断没有处理。
第二个问题让开发使用redis连接池,无需频繁创建连接读取数据,
频繁创建连接开销很大的。


总 结

当遇上性能问题时,排查日志无法解决时,使用strace工具来查看一下系统调用,看时间到底消耗在哪里了,可以轻松的找到问题所在。smiley_4.pngsmiley_4.pngsmiley_4.png


640?wx_fmt=gif

扫码加入知数堂4群-王者峡谷

(QQ群号:650149401)

640?wx_fmt=png


群内将同步分享讲义,并可与讲师互动,

还可@助教们获取更多课程信息

已在一,二、三群的不用再加群,

知数堂四个群同时进行直播!!!



加入知数堂

年薪轻松40万+!



640?640?640?640?


知数堂

叶金荣与吴炳锡联合打造

领跑IT精英培训

行业资深专家强强联合,倾心定制

MySQL实战/MySQL优化/MongoDB实战

/大数据实战/ Python/ SQL优化

数门精品课程

紧随技术发展趋势,定期优化培训教案

融入大量生产案例,贴合企业一线需求

社群陪伴学习,一次报名,可学1年

技术主管、DBA、运维、开发、架构师必修课

上千位学员已华丽转身,薪资翻番,职位提升

改变已悄然发生,你还在等什么?

640.png?


扫码下载知数堂精品课程试听视频

(MySQL 实战/优化、MongoDB实战、大数据实战、Python开发,及SQL优化等课程)

密码:hg3h


640?wx_fmt=png

640.png?


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值