phpQuery是一个用php实现的类似jQuery的开源项目,可以在服务器端以jQuery的语法形式解析网页元素。 相对于正则或其它方式匹配网页方式,phpQuery使用起来要方便的多。

在使用phpQuery采集网页时,遇到一个问题:在处理大量网页之后,phpQuery占用的内存数量非常惊人(很快就超过了1G),

比如这段代码:

while (true) {
    phpQuery::newDocumentFile($htmlFile);
    // 处理网页元素...
    echo memory_get_usage() . "\n";
}

谨慎运行上面这段代码,它会很快用光你的内存。

经过查看phpQuery的源代码终于发现了问题所在,phpQuery在每处理一个网页就会产生一个DOMDocumentWrapper 对象,而每个DOMDocumentWrapper 对象会被保存在静态成员$documents中(phpQuery::createDocumentWrapper中),这个变量是一个数组,每解析一个网页数组元素就增加一个。

phpQuery::$documents[$wrapper->id] = $wrapper;

找到问题后,解决就很容易了,每次解析完一个网页,把phpQuery::$documents置空即可。

while (true) {
    phpQuery::newDocumentFile($htmlFile);
    // 处理网页元素...
    phpQuery::$documents = array();
    echo memory_get_usage() . "\n";
}

内存占用稳定了。

转载自: http://www.linuxsong.org/2011/01/phpquery-memory-leak/

phpQuery占用过多内存的解决方法相关推荐

  1. 桌面窗口管理器(dwm.exe)占用高内存的解决方法

    前往我的主页以获得更好的阅读体验桌面窗口管理器(dwm.exe)占用高内存的解决方法 - DearXuan的主页https://blog.dearxuan.com/2022/01/14/%E6%A1% ...

  2. Win10 Antimalware Service Executable占用CPU,内存高解决方法

    文章目录 前言 一.原因分析 二.解决方法(最有效) 总结 前言 在Win10系统下,如果某一个进程占用CPU或是内存很高,那么极大的可能就是拖慢系统的速度,从而我们使用电脑会变的非常卡,那么最近有朋 ...

  3. Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决

    Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决 参考文章: (1)Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决 (2)https://www.cnblog ...

  4. windows7系统内存占用过高的解决方法

    电脑的内存空间取决了电脑的运行流畅度,时间一久内存就会爆满导致占用过高这样就会使电脑变得延迟,那么windows7系统内存占用过高怎么办呢?下面就一起来看看windows7系统内存占用过高的解决方法吧 ...

  5. Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续)

    Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续) 参考文章: (1)Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续) (2)https://www. ...

  6. 荣耀linux版开机内存占用高,win10开机内存占用50怎么办_win10一开机内存就占用过高的解决方法...

    win10开机内存占用50怎么办?相信很多用户都遇到过这种情况,但内存占用过高会导致我们使用电脑变得很不流畅,那要怎么解决这一问题呢?下面小编就以win10旗舰版为例,来为大家整理了win10一开机内 ...

  7. pycharm在C盘创建.pycharm2019.3严重占用内存的解决方法

    转载自https://www.cnblogs.com/LuckBelongsToStrugglingMan/p/12689836.html pycharm在C盘创建.pycharm2019.3严重占用 ...

  8. Linux内存耗尽宕机6,转载:Linux服务器Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案...

    原文链接: https://blog.csdn.net/u014740338/article/details/66975550 问题描述 Linux内存使用量超过阈值,使得Java应用程序无可用内存, ...

  9. linux weblogic 内存溢出,weblogic10内存溢出解决方法

    在开发过程中经常会遇到weblogic内存溢出问题,用下面的办法解决了. 找到domain/bin下的setDomainEnv.cmd文件,里面可以找到以下四行代码,将值该打一倍,重启服务. set ...

  10. 联想小新为硬件保留2G内存的解决方法

    联想小新为硬件保留2G内存的解决方法 如下图,我们可以看到,系统为硬件保留了2.1G内存,实际可用内存减小 在任务管理器中查看GPU的占用可以看到,保留内存是被核心显卡共享走了,你电脑的集显需要显存, ...

最新文章

  1. maven package 知识(转载)
  2. html5 自定义属性data-*
  3. android平板2018,荣耀平板5和ipad2018哪个值得买 荣耀平板5和ipad2018哪个好
  4. c#如何实现叫号操作_微信预约排队叫号系统操作指南
  5. 玩转Linux文件描述符和重定向
  6. oracle 远程连接超时问题
  7. 正常的vite创建项目并且安装vue router,vant的代码示例
  8. 可能促使您决定创建自定义数据绑定控件的一些原因:
  9. JDK 安装 Java环境变量配置
  10. EDA技术实用教程VHDL篇--名词释义
  11. 关于BT.709标准
  12. 数学建模竞赛最全竞赛案例分析总结
  13. matlab计算星期,在matlab中计算周数
  14. 【成神之路】Nuxt入门
  15. dell-inspiron 14r笔记本电脑除尘总结
  16. 冰山理论(理解笔记)
  17. Php扫码签到功能怎么实现,python扫码签到程序python中如何定义类
  18. 智能对话 | 使用 Java实现 智能对话机器人
  19. 小波神经网络(时间序列预测)
  20. CCR炒币机器人:量化策略炒币机器人成新一代网红

热门文章

  1. ie11加载项启用不了 java,IE11网页加载项和控件不能运行怎么办
  2. 非线性动力学中的同步,同步有哪几类?
  3. 谷歌金山词霸合作版下载
  4. Idea翻译插件google翻译失败超时
  5. Picasso 源码解读
  6. java 输出 new date,new Date() 方法到底是获取什么时间
  7. 无线通信设备安装工程概预算编制_祁东设备安装工程施工承包-设计安装_天霖工程...
  8. Unity3d如何制作声音开关按钮
  9. java中前加加++和后加加++的详解
  10. 【计算机组成原理】Verilog语言编写32位并行加法器的理解