PHP系统问题排查实践--信海龙@PHPCon2016

2020-02-27 219浏览

  • 1.PHP系统问题排查实践 信海龙
  • 2.个人简介 十年 法学 搜索:信海龙 Tclip 图片裁剪 2
  • 3.目录 Ø  PHP系统常见问题形式 Ø  解决问题的基本思路 Ø  PHP程序导致CPU被占满 Ø  找出代理集群有问题的机器 Ø  程序后端执行过程中的坑 Ø  Crond脚本执行填坑记 3
  • 4.常见问题形式 常见问题形式
  • 5.常见问题形式
  • 6.常见问题形式
  • 7.常见问题形式 [20-Dec-2014 21:20:17]WARNING:[pool www] child 31401 said intostderr:"NOTICE:PHPmessage:PHPWarning:PDO::__construct():MySQL server has gone away in ./abstract.class.php on line 26"
  • 8.解决问题基本思路 解决问题基本思路
  • 9.基本思路 验证 排查问题 恢复服务 保留现场 9
  • 10.基本思路 恢复服务 ²  摘机 ² 摘除有问题的机器 ²  回滚 ²  回滚到之前版本 ²  重启 ²  重启服务 ²  降级 ²  提供基本的服务 10
  • 11.基本思路 保留现场 ²  运行状态 ²  有问题时的状态数据 ²  外部监控 ²  第三方监控数据 ²  系统日志 ²  系统内部日志数据 11
  • 12.基本思路 排查问题 知识 + 工具 + 数据 12
  • 13.基本思路 知识 ²  语言 ²  基本语法,PHP运行机制 ²  系统 ²  操作系统,软件相关的知识 ²  协议 ²  Tcp协议 Mysql通信协议 13
  • 14.基本思路 工具 ²  系统 ²  top vmstat star ²  网络 ²  tcpdump wireshark netstat ²  进程 ²  gdb pstack strace 14
  • 15.基本思路 工具 15
  • 16.案例分析 案例分析
  • 17.Case1:CPU 100% 现象 Server端宕机 -> CPU 100% 17
  • 18.Case1:CPU 100% 18
  • 19.Case1:CPU 100% 解决过程 ²  摘机 & 重启 ²  查看日志 ²  GDB分析进程 ²  验证 19
  • 20.Case1:CPU 100% 对有问题进程分析 20
  • 21.Case1:CPU 100% 有问题代码行 21
  • 22.Case1:CPU 100% 进一步跟踪 22
  • 23.Case1:CPU 100% 解决方案 23
  • 24.Case2:找出有问题机器 [20-Dec-2014 21:20:17]WARNING:[pool www] child 31401 said intostderr:"NOTICE:PHPmessage:PHPWarning:PDO::__construct():MySQL server has gone away in ./abstract.class.php on line 26" 24
  • 25.Case2:找出有问题机器 25
  • 26.Case2:找出有问题机器 ² 把超时时间改回原来值 ² 分析PHP-FPM日志 ² 使用工具进行抓包分析 ² 摘除有问题的机器,持续观察 26
  • 27.Case2:找出有问题机器 tcpdump –i eth0 –s 3000 port 3306 –w ~/sql.pcap 27
  • 28.Case2:找出有问题机器 28
  • 29.Case2:找出有问题机器 29
  • 30.Case2:找出有问题机器 告诉相关负责人,把有问题的机器下线 30
  • 31.Case3:程序后端执行 */1 * * * * admin php test.php 31
  • 32.Case3:程序后端执行 php test.php & exit 退出终端 32
  • 33.Case3:程序后端执行 33
  • 34.Case3:程序后端执行 登录 -> 开始会话 -> 建立连接 -> 可读可写 退出 -> 关闭会话 -> 建立连接 -> 不能读写 34
  • 35.Case3:程序后端执行 php test.php > ./test.log 2>&1 & nohup php test.php & 35
  • 36.Case3:Crond脚本 36
  • 37.Case4:Crond脚本 */1 * * * * root /usr/bin/flock -xn /tmp/test.lock -c '/usr/bin/php /home/hailong/test.php > /tmp/ test.tt 2>&1' 37
  • 38.Case4:Crond脚本 38
  • 39.Case4:Crond脚本 ² 判断锁文件是否存在 ² 判断进程是否存在 39
  • 40.Thank you