php 执行mysql中查询时内存溢出怎么办

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 执行mysql中查询时内存溢出怎么办相关的知识,希望对你有一定的参考价值。

不要一次性从数据库中读出所有数据,例如使用原生PDO时,不要使用$db->query($sql)->fetchAll(); 方法,题主使用的Thinkphp框架中,不要使用ORM模型的select()方法 参考技术A

内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

内存泄漏缺陷具有隐蔽性、积累性的特征,比其他内存非法访问错误更难检测。因为内存泄漏的产生原因是内存块未被释放,属于遗漏型缺陷而不是过错型缺陷。此外,内存泄漏通常不会直接产生可观察的错误症状,而是逐渐积累,降低系统整体性能,极端的情况下可能使系统崩溃。

Valgrind 是一个用于构建动态分析工具的工具框架。它提供了一组工具,每个工具都执行某种调试、分析或类似的任务,以帮助您改进程序。Valgrind 的体系结构是模块化的,因此可以轻松地创建新工具,而不会影响现有的结构。

标配了许多有用的工具:

    Memcheck 是内存错误检测器。

    Cachegrind 是一个缓存和分支预测探查器。

    Callgrind 是一个生成调用图的缓存分析器。

    Helgrind 是线程错误检测器。

    DRD 还是线程错误检测器。

    Massif 是堆分析器。

    DHAT 是另一种堆分析器。

    SGcheck 是一种实验性工具,可以检测堆栈和全局阵列的溢出。

    BBV 是一个实验性 SimPoint 基本块矢量生成器。

    关于内存泄漏,我们需要使用 valgrind 的默认工具,也就是 memcheck 工具。

    Memcheck 是内存错误检测器。它可以检测以下和内存相关的问题:

    使用未初始化的内存

    读取/写入已释放的内存

    读取/写入 malloc 块的末端

    内存泄漏

    对 malloc/new/new[]与free/delete/delete[] 的不匹配使用

    双重释放内存

以上是关于php 执行mysql中查询时内存溢出怎么办的主要内容,如果未能解决你的问题,请参考以下文章

你好,java 向数据库添加大量数据时内存溢出 在不改变内存的情况下如何解决? 你当时是怎么解决的

PHP 内存溢出

PHP 内存溢出

sqlite插入一万多条数据会报内存溢出 该怎么解决

sqlite插入一万多条数据会报内存溢出 该怎么解决

PHP查询MySQL大量数据的内存占用分析