现在的位置:首页  /  云计算培训 >云计算技术教程

云计算运维工程师遇到php故障该如何处理

来源: 薪享宏福
发布时间: 2019年03月25日
分享到:
我们先来看一个场景。某天晚上你下班回到家,刚准备吃饭。同事打来电话: "小福,网站打不开了,打开首页都很卡,你赶紧看看吧”。你:”收到,我马上就看”。

在女朋友的抱怨声中你打开了电脑,趁着开机的时间把刚刚放松的心情重新收拾起来,然后静下心来思考30秒。回想这个业务的服务器架构,把域名输入到浏览器自己验证一遍问题。发现真的是打开首页都很慢,想想或查找这个业务的服务器IP ,登录服务器开始各项检查。有时你发现PHP进程挂了,重启一下就能解决 ,有时运气则没有那么好,发现访问不断出现错误502 ,排查半天也找不到原因。还得叫上研发、DBA 上线一起分析。 等你查完问题,女朋友已经吃完饭了。

是不是很熟悉的场景?也许你觉得这些好像都很正常,都是这样的过程呀。等等,故障从用户反馈时到解决完已经不知道发生了多久,你如果很熟悉业务则可以回忆起架构,但是如果不熟悉,那就还得找架构图或CMDB ,这资料还得是最新的。如果机器负载看起来还比较正常,你得再静下心来想想问题到底出在哪里了,即使发现是机器负载的问题,你又怎样才能快速处理呢?

可是你想过没有,时间就这样在一分一秒地过去,而我们对故障还是有点懵。如果是经验丰富的研发或运维或许还能知道问题大概出在哪里。但如果是运维新手呢,只能找研发一起慢慢排查,而用户是不会等你的,所以你只好眼睁睁地
看着用户流失了。大型网站上是不允许出现这种情况的,一旦出现老板肯定要追责,要进行事故定级,如果背上个一二级事故,那么年终?奖恐怕得大打折扣。

故障问题跟性能问题息息相关,又有不同之处。性能可以体现为吞吐低和高延时,达到一定的量或突破极限后往往就成为了故障。本节将尝试为大家分析PHP故障,介绍快速分析方法和解决方法。

PHP故障分类及处理思路
 
有经验的运维一般都能够快速定位到问题点,他们接到报障时就已经在心里根据故障的描述来对问题进行分类了, 进行准确的分类判断是进行下一步分析的基础,只有准确分类才能一矢中的。大部分PHP故障会反映在用户端,用户看到的可能是HTTP错误返回码、也有可能表现为卡顿。在没有经过异常处理的网站中,常见的错误码有如下几种

502错误:打开页面显示的是502 bad gateway (错误网关)的信息。原因一般是PHP执行得太久而超过了参数request terminate timeout和max_ execution_ time所设定的时间,导致FPM终止了PHP工作进程,无法为fastcgi接口返回信息。如果PHP的错误日志里出现了SIGxxxx ,那就有可能会出现这个现象。而罪魁祸首很可能是后端存储或调用外部连接反应太慢,或者挂了,导致PHP一直等待,达到了自行了断的条件。

502错误的一般处理方法:如果是执行超时时间配置不合理,则需要延长超时时间。另一种处理方法是从后端入手,找到关键的瓶颈点,比如分析数据库的慢查询、死锁、负载,执行中的SQL等,strace是个发现PHP连接后端超时的好方法。

503错误:伴随503错误出现的描述一般是整个服务临时不可用( Service temply Unavailable), 这种错误一般是Web服务器( 如Nginx)这- -层端口还活着,但无法响应用户的请求。

503错误的一般处理方法:应该重点分析机器负载, Nginx进程是否存活,端口是否存活, Nginx进程的工作饱和度,如果以上都正常则应该参照7.4节所讲的方法分析Nginx状态。

504错误: 504错误表示网关超时( gateway timeout) ,可能是请求量突发,导致PHP负载太高,无法为请求分配工作进程, 或者达到了连接数限制、某些组件达到性能瓶颈了,导致系统可用性明显下降;影响504错误的是Nginx的超时设置fastcgi connect timeout、fastcgi_ send timeout、 fastcgi_ read timeout。

504错误的一般处理方法:还是要从PHP层进行分析,如果每个请求的处理时间都是正常的,那么就是整个PHP层的资源不够用了,需要扩容;如果是某些请求的时间太长, 那么就得找到性能瓶颈点了。

404错误:表示页面不存在,静态页面或PHP文件被删除。

日常正常运行的网站如果突然变得卡顿,那么出现的故障大部分是性能问题造成的,往往是到了高峰期用户大量涌进网站,导致某些组件达到性能瓶颈。由PHP的性能问题所弓|起的故障比较常见的有如下几种。
 
PHP进程不存在:可能由于进程意外掉挂了,再没有起来,比较常见的是请求一直在处理中,达到max execute time时间,管理进程把工作进程干掉了。

PHP进程响应慢, Web服务器响应慢,达到超时后,返回503错误。

PHP进程本身慢:这种情况反而不多,只出现在少数特别复杂
的框架写的程序中。

PHP依赖的接口慢:比如请求外部的接口,外部接口很慢等。

依赖的后端存储慢:这种情况比较普遍,比如MysQL、 Redis、Memcached出现故障或性能问题。

相关推荐:

sysVinit方式下系统的启动特点

systemd方式 下系统的启动特点

sysVinit的正常启动顺序详细解析教程

运维培训班的学员要明白开发同样重要

PHP运维常见问题以及解决办法

运维程序员如何做到对php业务监控和故障发现

运维工程师如何提升桌面云存储性能,有哪些方式?

典型的桌面云网络配置场景案例分享