1.最近发现项目的cpu过高。排查问题想不到好方法。在网上找了下。可以使用linux gdb+zbacktrace+php-src来排查php执行过多的程序

top

此时,看到进程PID 16229 占cpu 88.7

gdb -p 16229source /datas/soft/php-src/.gdbinitzbacktrace

这时就能看到导致你的cpu过高的程序

最后,我这边一看就是读取redis的频率过高的原因。每500毫秒请求一次。前一次请求没有释放,后一次请求又来了。后面把swoole-timer 时间改成每秒执行。

php-src【SourceCode:https://github.com/php/php-src】

gdb工具的使用

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,可以用来调试C/C++开发的程序,PHP和Swoole是使用C语言开发的,所以可以用GDB来调试PHP+Swoole的程序。

gdb调试是命令行交互式的,需要掌握常用的指令。

使用方法

gdb -p 进程ID
gdb php
gdb php core

gdb有3种使用方式:

  • 跟踪正在运行的PHP程序,使用gdb -p 进程ID
  • 使用gdb运行并调试PHP程序,使用gdb php -> run server.php 进行调试
  • PHP程序发生coredump后使用gdb加载core内存镜像进行调试 gdb php core

如果PATH环境变量中没有php,gdb时需要指定绝对路径,如gdb /usr/local/bin/php

常用指令

  • p:print,打印C变量的值
  • c:continue,继续运行被中止的程序
  • b:breakpoint,设置断点,可以按照函数名设置,如b zif_php_function,也可以按照源代码的行数指定断点,如b src/networker/Server.c:1000
  • t:thread,切换线程,如果进程拥有多个线程,可以使用t指令,切换到不同的线程
  • ctrl + c:中断当前正在运行的程序,和c指令配合使用
  • n:next,执行下一行,单步调试
  • info threads:查看运行的所有线程
  • l:list,查看源码,可以使用l 函数名 或者 l 行号
  • bt:backtrace,查看运行时的函数调用栈
  • finish:完成当前函数
  • f:frame,与bt配合使用,可以切换到函数调用栈的某一层
  • r:run,运行程序

zbacktrace

zbacktrace是PHP源码包提供的一个gdb自定义指令,功能与bt指令类似,与bt不同的是zbacktrace看到的调用栈是PHP函数调用栈,而不是C函数。

下载php-src,解压后从根目录中找到一个.gdbinit文件,在gdb shell中输入

source .gdbinit
zbacktrace

.gdbinit还提供了其他更多指令,可以查看源码了解详细的信息。

使用gdb+zbacktrace跟踪死循环问题

gdb -p 进程ID
  • 使用ps aux工具找出发生死循环的Worker进程ID
  • gdb -p跟踪指定的进程
  • 反复调用 ctrl + czbacktracec 查看程序在哪段PHP代码发生循环
  • 找到对应的PHP代码进行解决

转载于:https://www.cnblogs.com/GreenForestQuan/p/10972021.html

gdb+zbacktrace找到cpu过高php代码相关推荐

  1. 与服务器竟然打架!java系统线程占用CPU过高问题,到底怎么办?

    1.下载Windows系统和应用程序监视工具Process Explorer https://download.sysinternals.com/files/ProcessExplorer.zip[建 ...

  2. java进程cpu占用高如何排查

    问题: 公司参加HW期间,项目两台双活的jboss服务器频繁触发cpu利用率过高告警,cpu利用率长时间在90%以上. 排查思路: 第一步:在两台Linux服务器上,执行top命令,并按大写P以cpu ...

  3. CPU飙高 解决方法

    1, top查找出哪个进程消耗的CPU高(top -c) 2.,top -h -p查找出哪个线程消耗的cpu高(top -h -p pid) 这个命令就能显示刚刚找到的进程的所有线程的资源消耗情况. ...

  4. oracle查询cpu占用率高,ORACLE CPU过高的sql查询

    1. 根据占用CPU高的进程号来查询这个进程执行的SQL语句: CPU过高的进程号: #首先找到CPU过高的进程号 # top -bn1 是静态找到占用最高的进程 [root@localhost ~] ...

  5. CPU飙高和内存飙高的一般处理步骤

    目录 cpu飙高处理步骤 内存飙高处理步骤 GC引起的单核飙高 常见SY飙高 IO飙高 抖动问题 cpu飙高处理步骤 1. top查找出哪个进程消耗的CPU高(top -c) 2. top -h -p ...

  6. 线上CPU飚高(死循环,死锁……)?帮你迅速定位代码位置

    top基本使用: top命令参考本篇文章 查看内存和CPU的top命令,别看输出一大堆,理解了其实很简单 top 命令运行图: 第一行:基本信息 第二行:任务信息 第三行:CPU使用情况 第四行:物理 ...

  7. linux中找到最耗CPU的那段Java代码

    linux下查找java进程占用CPU过高原因 查找进程 top查看进程占用资源情况:top 明显看出java的两个进程22714,12406占用过高cpu. 其他命令列出相关的java进程, 以及对 ...

  8. windows linux cpu 抢占式 时间片_阿里技术专家谈:CPU飙高,系统性能问题如何排查?...

    导读:压测时或多或少都收到过CPU或者Load高的告警,如果是单机偶发性的,经常会认为是"宿主机抢占导致的",那事实是否真是如此呢?是什么引起了这些指标的飙高?网络.磁盘还是高并发 ...

  9. Linux中Python程序CPU占用高排查

    Linux中Python程序CPU占用高排查,Linux中Python程序CPU占用高排查,Linux中Python程序CPU占用高排查 kafka-python==2.0.2和 gevent 新版本 ...

最新文章

  1. docker下的mysql my.ini_Docker + MySQL 主从环境搭建
  2. ateq测漏仪f620说明书_上海壁挂式测漏仪安全使用说明,煤气房报警器安装安全使用说明...
  3. 张学友演唱会成犯罪分子噩梦,阿里云云盾人发布脸对比功能将进一步提升罪犯监察力度...
  4. 计算机视觉测试数据集 dataset
  5. 雾霾经济:这10款产品,马云看了都想投资
  6. JavaScript:从此不再怕闭包
  7. TListBox的项目个数
  8. 如何在CRM和C4C中用代码判断当前是否处于configuration模式
  9. 人工智能AI实战100讲(三)-激光雷达原理和分类
  10. 14-项目开发总结报告(GB8567——88)
  11. Hibernate在MyEclipse8.6中生成报错解决方法
  12. 【转载】前端开发之CSS兼容写法经验总结
  13. Azkaban的安装部署
  14. JPA如何查询部分字段
  15. Web前端:HTML5 CSS3
  16. ClickHouse的核心特性及架构
  17. SYNPROXY抵御DDoS攻击的原理和优化
  18. 推荐几个在线处理文件、图片、音视频的工具,免费又好用!
  19. Java蚂蚁金服面试
  20. Android 跳转到高德、百度、腾讯地图进行导航

热门文章

  1. avast从隔离区恢复后,仍无法打开被误杀文件的解决方案
  2. 如何创建 SVN 服务器,并搭建自己的 SVN 仓库
  3. 20155207王雪纯 《Java程序设计》实验一报告
  4. 解决Ajax中的缓存问题
  5. laxcus的新功能:支持表跨数据库操作
  6. ios进度条Demo一个
  7. Com/ATL编程 一些学习链接
  8. 提前批无笔试,3天后截止!!字节跳动智能创作实验室-图像团队2022秋招提前批投递...
  9. 清华博士直播 | 如何让AI模型更皮实、更稳定?
  10. 致盲目标检测算法,阿里清华发起 “对抗攻击” 挑战赛!