php - 如何调试冻结而不返回错误的脚本?(更新 SQL 表 - 大约 1.5 小时的过程)
问题描述
我有一个脚本,我可以设置它在 X 项数据上运行,处理每个项目的数据,并使用处理后的数据更新数据库表。
它在 500 个数据项(大约 2 分钟)和 2500 个数据项(大约需要 10 分钟)上成功运行,但是对于 20,000 个数据项,它在大约一小时后冻结(应该在大约 1.5 小时内完成)
我无法发布代码,因为脚本太大而且我什至不确定它是否重要,并且无论如何它在运行时间较短时运行良好。主要问题是如何调试此类问题?
没有显示 PHP 错误日志(如果有其他错误,它们会显示),也没有在 MYSQL 错误日志中看到错误。
该脚本只是停止更新其处理日志,这意味着它不再向表中插入记录,即使它应该。然后我只能杀死它,然后我会在我的 sql 日志中看到错误,例如:
[警告] Aborted connection 192356 to db: 'db' user: 'user' host: 'localhost' (读取通信数据包时出错)
解决方案
你可以使用 xdebug。Xdebug 是 PHP 的一个扩展,用于协助调试和开发。您可以在 Linux 和 macOS1 上通过 PECL 安装 Xdebug。您可以使用 PECL 安装 Xdebug:
pecl 安装 xdebug
完成后,您仍然需要将正确的行添加到您的 php.ini
zend_extension="/usr/local/php/modules/xdebug.so"
推荐阅读
- docker - 为 docker 容器安装 python pip 不起作用
- ios - 如何在我的应用程序委托 applicationWillTerminate 中访问 MPVolumeView?
- apache-spark - Pyspark 在创建 SparkContext 时抛出 JNI 错误
- excel - PowerQuery:“for”循环遍历所有元素
- c++ - 错误“3 [main] a 8724 cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到 a.exe.stackdump”
- c# - 我对作为 Azure 应用服务 (P3) 托管的 .NET Core 2 Web api 的基线 RPS 有什么期望?
- c# - 已经有一个与此命令关联的打开的 DataReader,必须先关闭它。在asp.net C#中
- c# - WinForms:ItemCheck 事件在某些项目上触发两次
- android - 显示长位图
- python - 使用 UI 获取变量和调用函数。玛雅蟒