位置: 编程技术 - 正文

记录一次排查PHP脚本执行卡住的问题

编辑:rootadmin

推荐整理分享记录一次排查PHP脚本执行卡住的问题,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

发现问题

最近忽然从监控中发现,我们一个服务的一台机器负载比同机房的其他机器要高,而流入流出流量没有差别,进一步查看发现每个机房都有一台机器存在相同的现象,梳理后发现有问题的这些机器相比正常的机器多跑了一些PHP脚本,于是猜测是执行脚本出问题导致。

解决问题

登录机器后执行top命令,果然发现存在一个CPU占用较高的PHP进程,然后执行下列命令,发现存在一个由crontab启动的执行了很长时间的PHP脚本:

由于之前也遇到过PHP脚本执行卡住的类似情况,当时的怀疑是跨机房的Mysql查询在网络抖动时导致Mysql连接卡住了,于是理所当然的将所有卡住的进程都kill掉了,再从负载上看机器马上就恢复正常了,于是心满意足的跑去干别的了。

过了一段时间,刷了下监控,发现问题又出现了,注释掉crontab并kill掉进程后,手动执行问题脚本,竟然能稳定复现问题!看来是把问题想得太简单了,尝试用strace命令看下卡住的进程当前究竟在干什么:

什么输出都没有!再用netstat看下这个进程是否打开了什么端口:

可以看到进程打开了两个端口,分别与Mysql和Redis建立了连接,并且处于连接建立(ESTABLISHED)和对方主动关闭连接(CLOSE_WAIT)的状态;初看确实像是和数据库的连接卡住了,但是因为吃过亏上过当,咱们使用tcpdump抓包看进程和数据库之间的交互:

记录一次排查PHP脚本执行卡住的问题

抓了好一会,~/mysql.cap 文件中却也没有任何输出,难道进程和Mysql之间已经没有任何交互了?那为什么连接建立没有关闭呢?看来只能从头追踪一下脚本的执行情况了:

首先为了能来得及strace到进程,在PHP脚本最开始的时候输出进程的pid并sleep s:

然后启动tcpdump准备抓包本机和Mysql的交互过程。

最后执行PHP脚本,并复制输出的pid后在新窗口中执行strace命令。

这下strace和tcpdump都有内容了!从strace结果看recvfrom之后不再有poll,但并没有看出来有什么不对:

再从抓包结果看,执行了两条SQL查询语句之后,进程没有再次发送查询请求的包,从程序记录SQL语句日志中,也发现确实只执行了两条:

但从这些现象中,仍然没有能看出任何端倪,只好祭出终极大法:输出调试!大概看了下代码,并在关键地方添加输出语句,于是代码看起来如下:

执行后输出如下,查询type为2的网址时卡住了:

开始怀疑调用的getSites()方法有问题,代码如下:

原来这里为了实现拿8个不重复的网址写了2个循环,如果结果中不重复的网址只有7个就会有一个空,少于7个就会有死循环!于是查了下type为2的网址个数,果然是只有6个!

总结

该问题从发现到解决花了大概1天时间,虽然最后证明是低级的代码BUG导致,但是整个排查过程还是挺有收获的,最开始的想当然证明是非常肤浅的,过程中tcpdump和strace的结果也已经很能说明问题了,对各个工具的应用应该要更加熟练,工具的结果也要深入分析。

标签: 记录一次排查PHP脚本执行卡住的问题

本文链接地址:https://www.jiuchutong.com/biancheng/296326.html 转载请保留说明!

上一篇:PHP串行化与反串行化实例分析(php循环字符串)

下一篇:PHP面向对象程序设计OOP继承用法入门示例(PHP面向对象程序设计调研)

  • 收入纳税数据是什么意思
  • 稳岗返还资金最新账务处理
  • 企业出售资产要交增值税吗
  • 实收资本增加印花税怎么算
  • 税金及附加怎么记忆
  • 非增值税应税项目可以抵扣进项税吗
  • 2021年9月个税申报截止时间
  • 核定征收变更查账征收利润怎么办
  • 研发费用属于哪个费用
  • 豆粕适用税率
  • 净资产增加额计算公式
  • 合同金额与结算金额一致,如何约定
  • 存货项目包括哪些具体内容
  • 有形动产租赁服务
  • 提取资本公积会计凭证
  • 出口报关单上的运费和保费和实际不一致
  • 收到一张建筑服务*施工费发票
  • 电子设备折旧率一般多少
  • 增值税进项没收到必须开销项怎么办?
  • 开出的发票什么情况下需要补税?
  • 预缴税款是开票金额的多少
  • 取得专用发票不交增值税
  • 补记去年收入分录
  • 实收资本何时交税
  • 财务费用负数是什么意思
  • 行政单位代管资金怎么做账
  • 或有事项确认资金怎么填
  • 网易打不开怎么退出游戏
  • ie增强的安全配置已启用上不了网
  • 清算资金往来借贷方什么意思
  • 公司自有房屋出租 没有从租计征房产税
  • 软件开发公司怎么做账
  • 印花税是怎么计算
  • 公司购车要交哪些税
  • win10打开txt
  • 预计负债属于什么类
  • 抵扣农产品进项税时,也要抵扣运费吗
  • 贸易公司出口退税政策最新
  • 计提坏账可以冲回吗
  • Sublime Text v4.0(4143)破解方法
  • 企业无偿提供劳务
  • wordpress使用
  • 计提补贴会计分录
  • 预收账款为什么是负债类的
  • Vue3:探讨一下mixin
  • 被黑客攻击
  • blat命令
  • python极客项目编程 豆瓣
  • 电竞公司要求
  • 担保公司的风险准备金在报表中如何反应
  • 工程行业预交税款怎么算
  • 应付账款坏账损失的会计分录
  • 公司收到社保局的提醒函怎么办
  • 小规模纳税人企业所得税怎么算
  • 专用发票的用途
  • 购买土地需要缴纳哪些费用
  • 已经发出的商品替换零部件进成本还是费用
  • 利润表的所得税和所得税申报表所得税
  • 迟到扣发工资
  • 微信支付的账务在哪里
  • 收到支持学校工作的短信怎么回复
  • 对公账户往来款需要开票吗
  • 蔬菜销售方式
  • 利息支出和利息收入区别
  • 一般纳税人可抵扣的票证有哪些?
  • 挂靠建筑公司预交的增值税如何做凭证?
  • mysql事务用法
  • xampp3.2.4安装教程与配置
  • 用Win7系统的Syskey命令来设置系统的启动密码
  • win8系统怎么查看隐藏文件
  • E: Encountered a section with no Package: header错误解决方法
  • win7远程设置在哪
  • unity 漫反射
  • 最简单的游戏开发工具
  • javascript的理解
  • scp 将数据从一台linux服务器复制到另一台linux服务器
  • jquery作品
  • jquery导入
  • 2023浙江高考首考状元
  • 鄞江在哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设