php项目,cpu暴增问题查找

背景:

前几天通过WordPress上线一个应用(前后台部署分离,后台走内网内部使用,前台做了全站缓存对外使用)。

今天访问后台应用发现开始报504,一段时间后全部504.

解决方案:

登录容器发现容器内nginx日志全部499。

通过top指令发现php-fpm占用cpu暴增。

netstat -anp|grep ‘php-fpm端口号‘  发现所有php-fpm状态都为syn_recv(服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态)

所有php-fpm状态都为syn_recv,导致控制SYNqueue的队列数量满,所有新的请求直接拒绝。

立马通过strace命令进行追踪pid,发现一直在循环执行gettimeofday等一些函数

网上查找资料说如果开启xdebug扩展会引发这样的状况,通过php -m发现果然使用了xdebug,关闭此扩展,重启php-fpm。

进行观察发现,cpu使用率平稳,php-fpm状态正常,一切正常。

总结:

线上不要开启xdebug扩展,为什么xdebug会引起此种问题,暂时未深入了解,但是xdebug性能低不适合线上使用,建议使用php_trace扩展代替

通过php_trace来检测php代码执行流程,关于怎样使用php_trace,可查看之前所写的文章。(php_trace为360开源的工具,性能强大,经他们测试在线上只会损耗百分之几左右的性能)

开启php-fpm状态监控,最好能增加报警机制,已及时发现与获取问题原因。

解释:

这里有必要解释下, TCP连接为什么会积压在队列里, 要理解这个问题, 需要先理解linux 对TCP 三次握手的一些具体实现。

我们知道, 在server端,监听一个端口, 调用socket,bind 最后调用listen:

int listen(intsockfd, int backlog);

listen的第二个参数叫做backlog, 用来设置连接队列的大小。实际Linux 维护两个队列, 一个是在接收到SYN后,此时没有完成三次握手, 处于半连接状态,存放到SYNqueue(我们的问题就是发生在此处),

另一个是三次握手完成后, 成功建立连接,存放到acceptqueue,等待应用调用accept 来消费队列。这里的backlog就是用来设置accept queue(旧版内核用来设置SYN queue,详细请man listen)的大小。

TCP 传输跟系统调用实际是一个异步的过程, 系统通过队列来保存最新的TCP状态或数据。也就是说,TCP三次握手由内核来完成, 跟应用层是否调用accept无关, 内核将完成三次握手的socket 放到acceptqueue中,应用调用accept 时,从accept queue中获取连接。那么,如果backlog 非常大,而我又不及时调用accept 来消费队列,则连接就被积压到accept queue中了。

同样, 在三次握手完成后, 客户端就可以发送数据了, 数据由内核接收, 并保存在TCP 的buffer中, 而此时应用(PHP)可能还没有调用accept。

最后感谢一下曾经的面试官,因为之前有问到如何查找线上cpu暴增问题,后来查找了下基本资料,没想到这次用到了。。

时间: 2024-12-16 19:34:25

php项目,cpu暴增问题查找的相关文章

MySQL CPU暴增

增加 tmp_table_size 值.mysql 的配置文件中,tmp_table_size 的默认大小是 32M.如果一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误,如果你做很多高级 GROUP BY 查询,增加 tmp_table_size 值.这是 mysql 官方关于此选项的解释: tmp_table_size This variable determines the maximum size for atemporary t

网站TCP链接暴增

昨天上线后,TCP链接暴增,红点增多. 问题在查.其中有一部分,多线程修改,突破了线程数 64的限制.线程内,会发起网络请求. 怀疑是热点之一.其他的部分也有修改,也被怀疑.准备下次,2部分分开上线.进行线上测试. 昨天的情况是cpu,内存没有峰值,抖动,但是tcp有峰值,部分接口访问失败.超时. 多线程,网络,果然是编程的重点部分啊. 网站TCP链接暴增

数据库实战案例—————记一次TempDB暴增的问题排查

前言 很多时候数据库的TempDB.日志等文件的暴增可能导致磁盘空间被占满,如果日常配置不到位,往往会导致数据库故障,业务被迫中断. 这种文件暴增很难排查,经验不足的一些运维人员可能更是无法排查具体原因,导致问题不能彻底解决. 场景描述 客户系统比较稳定,用了5台机器做了AlwaysOn高可用组,完全实现了读写分离.磁盘也做了规划,主库日常操作TempDB需求在20G以下,所以TempDB所在的磁盘只配置了100个G的空间. 本案例是客户突然接到监控报警,显示TempDB磁盘空间不足,可用空间不

故障排查实战案例——某电器ERP系统日志暴增

前言 本篇文章写在新春佳节前夕,也是给IT运维朋友一个警醒,在春节长假前请妥善体检自己的系统安心过个年. 千里之堤毁于蚁穴,一条看似简单的语句就能拖垮整个系统,您的SQL Server很久没体检了吧? 就像一块藏着刀片的蛋糕!怎能安度春节? 日志暴增的问题处理过很多,这只是很常规的一次,但是对于不是很熟练的运维兄弟,可能日志暴增这样的问题会被一带而过,或者解释成突发情况而不去处理,那么隐患依然存在,在春节这样的长假发生可怎么办呢? 本文使用的工具:SQL专家云平台专业体检工具 :www.zhua

为什么SSL证书流量暴增?

为什么SSL证书流量暴增? 网络服务提供商 Sandvine 近日发布了一份报告,中提到了一个非常有趣的现象:和去年的数据相比,加密网络流量(SSL)在今年正在呈现出爆发式增长. 这个变化在欧洲表现得十分明显:和去年的 1.47% 相比,今年整个欧洲的 SSL 流量在高峰期间的份额翻了四番,达到了 6.1%.这个增长幅度,远超整体流量的增长水平.(下图) 在北美,SSL 流量份额也有小幅增加,从去年的 2.29% 增长到了今年的 3.8%,涨幅几近一倍.尽管 SSL 流量的占比并不算大,但考虑到

北京新房成交10月下旬暴增 二手房均价年内首次微涨

北京新房成交10月下旬暴增 二手房均价年内首次微涨 行业动态北京晨报[微博]杨奕2014-11-04 07:19 我要分享 4 [摘要]新政出台,无论是新房还是二手房,成交量肯定会上升.不过对于一手房的价格来讲,9万多套的库存依然是摆在开发商面前的严峻问题,因此目前价格还是以稳定为主. 晨报讯(记者杨奕)“银十”过去,房贷新政出台已经满月,一系列利好政策带动楼市回暖.10月份,北京新房和二手房成交量均有明显回升,二手房成交均价今年内首次出现微幅上涨. 10月,北京商品住宅成交经历了“过山车”式的

django之创建第8-1个项目-数据库之增删改查/数据库数据显示在html页面

1.为test.DB数据库预先创建下面数据 1    张三    16    2015-01-02    12    李四    17    2015-01-04    13    王五    14    2015-04-24    0 2.配置C:\djangoweb\helloworld\blog\urls.py文件 # -*- coding: UTF-8 -*- from django.conf.urls import patterns, include, url urlpatterns

Oracle 11g SYSTEM表空间暴增问题

Oracle 11g SYSTEM表空间暴增问题 一..查看SYSTEM表空间前9大的段SQL> set lines 120SQL> col owner for a30SQL> col segment_name for a30SQL> col owner for a30SQL> SELECT 2 FROM (SELECT BYTES, segment_name, segment_type, owner 3 FROM dba_segments 4 WHERE tablespac

企业应如何解决网站流量暴增问题?

为什么12306经常崩溃? 根据中国国家铁路集团有限公司的统计显示,铁路系统年售票量已超过31亿张,日售票能力达到1500万张,高峰时每秒售票量达700张,网页浏览量超过1500亿次/天.互联网售票占铁路售票总量的82.8%,12306已经成为世界上规模最大的实时票务交易系统. 如此大数据量的访问,以及瞬时提交订单数量,并发量过高会导致服务器无法正常运转.如果这时,不断有更多的访问与请求进来,那么服务器就会崩溃.相应例子,还有双11.双12等购物节,大家在凌晨进购物平台抢购时,也会出现类似问题.