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