nginx+php-fpm故障排查-阿里云开发者社区

开发者社区> 技术小能手> 正文

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)

image

$ top

image

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

查看过nginx和php-fpm的

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

strace 跟踪close的系统调用,

都是以下的信息:

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

image

$ lsof | more

image

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

image

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

image

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

image

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

image

发现现在是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)
显示下图所示:

image

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

image

php-fpm进程频繁的去读取文件,整个操
作下来花费4ms的时间。
然后排查recvfrom:
$ strace -T -ttp $(pgrep -n
php-fpm) 2&>1 |
grep -B 10 recvfrom >
./recvfrom.log

image

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

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

原文发布时间为:2018-07-18
本文作者:陈天庆
本文来自云栖社区合作伙伴“老叶茶馆”,了解相关信息可以关注“老叶茶馆

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10077 0
kubernetes 中 nginx-ingress 问题排查及配置调优
随着容器化的深入,越来越多的服务陆续迁移到kubernetes集群中,有些问题在测试环境并未凸显,但是在生产环境中这些问题就显得格外的扎眼。这里就对实践中kubernetes集群中的7层负载均衡器ingress遇到的问题进行总结。
2450 0
Nginx-504 Gateway Time-out排查及解决方案
  前段时间碰到了一个调用服务失去响应的问题,服务是采用Java开发,部署在Tomcat上,前端使用Nginx做代理,但是通过Nginx调用服务的时候一直报504 Gateway Time-out错误,跨过Nginx直接调用服务又正常,所有锁定错误和Nginx有关,后经排查发现是Nginx的日志过大,将存储盘空间占满了,导致自身日志不能正常写入。
2096 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13884 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11889 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4503 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7365 0
+关注
技术小能手
云栖运营小编~
7208
文章
9
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载