专栏首页「3306 Pai」社区nginx+php-fpm故障排查

nginx+php-fpm故障排查

小明初到一家公司做运维的工作,刚来的第一天就开始部署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)
$ top

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

查看过nginx和php-fpm的

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

strace 跟踪close的系统调用,

都是以下的信息:

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

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


前端挂了nginx压测ab压测结果:
tps基本没变第一个Time per 
requset快了87.52%。
接着继续排查tps上不去的原因,
继续strace后端的nginx。$ strace -cp $(pgrep -n nginx)发现现在是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)显示下图所示:access cpu时间消耗最多那就先
排查access
系统调用:
$ strace -T -ttp 
$(pgrep -n php-fpm) 2&>1 |
grep -B 10 access >
 ./access.log
php-fpm进程频繁的去读取文件,整个操
作下来花费4ms的时间。然后排查recvfrom:
$ strace -T -ttp $(pgrep -n 
php-fpm) 2&>1 |
grep -B 10 recvfrom > 
./recvfrom.log频繁的去访问10.0.0.156的6379,端口,
明显就是访问redis读取数据的过程,
整个过程花费12ms。
让小明把上面两个strace信息发给开发,
第一个得到回复是老版本的流程,
新版本改了,但还是有些判断没有处理。
第二个问题让开发使用redis连接池,
无需频繁创建连接读取数据,
频繁创建连接开销很大的。
总结
当遇上性能问题时,排查日志无法解决时,
使用strace工具来查看一下系统调用,
看时间到底消耗在哪里了,
可以轻松的找到问题所在。

本文分享自微信公众号 - 3306pai(pai3306),作者:陈天庆

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL性能测试 : 新的InnoDB Double Write Buffer

    新的MySQL8.0.20版本重新设计了InnoDB Double Write(DBLWR),确实是一个大的历史烦人的事情。为什么在过去这么痛苦,让我们付出了这...

    [3306 Pai ] 社区
  • 3306π年会,深圳站精彩预告

    [3306 Pai ] 社区
  • 3306π嘉宾专访-点融网架构师许增伟

    分享议题:《深入数据同步技术研究》

    [3306 Pai ] 社区
  • 39.Linux应用调试-strace命令

    1.strace简介 strace常用来跟踪进程执行时的系统调用和所接收的信号。通过strace可以知道应用程序打开了哪些文件,以及读写了什么内容,包括消耗的时...

    张诺谦
  • 【玩转腾讯云】Serverless+CVM实战

    写过一篇Serverless初探,后期结合Tencent Serverless Toolkit for VS Code的IDE插件,刚好借此使用下,相较于之前没...

    KaliArch
  • 1082 射击比赛 (20 分)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    韩旭051
  • 使用NPM

    Nodejs生态圈很强大,第一个原因就是NPM,因为全球有无数的程序员在NPM中贡献了自己的力量。

    代码之风
  • linux学习第二十六篇:正则介绍,grep,sed,awk命令

    正则介绍 正则就是一串有规律的字符串,掌握好正则对于编写shell脚本有很大帮助,各种编程语言中都有正则,原理是一样的。正则表达式是这样解释的:它是指一个用来...

    用户1215343
  • 携程、阿里、京东、腾讯iOS春招面试过程以及面试题总结!

    五一假期,春招基本上已经结束了,剩下少量面试和少量流程中。虽然还没有最终决定,不过也还是决定来开个帖子,写一些总结。

    iOSSir
  • windows完成端口(一)

    系列目录 windows完成端口(一) windows完成端口(二) windows完成端口(三) windows完成端口(四) windows完成端口(五) ...

    范蠡

扫码关注云+社区

领取腾讯云代金券