【问题标题】:Drupal (6.19) cron exhausts memory when doing search indexingDrupal (6.19) cron 在进行搜索索引时耗尽内存
【发布时间】:2011-01-24 08:19:26
【问题描述】:

我的 Drupal 6.19 安装已经运行了大约六个月。客户已在积极使用它发布更多内容。

但是,发生了一些事情,因为现在 cronjob 没有完成。

致命错误:第 444 行 /XXX/modules/search/search.module 中允许的内存大小为 134217728 字节已用尽(尝试分配 36230464 字节)

如您所见,我在 PHP.ini 中有 128M 的内存限制,而 search.module 正在尝试分配相当大的数量,即 36M。因为我想不出任何原因 search.module 会这样做,所以我问你们是否有任何提示我可以如何进一步进行。由于 Drupal 处于托管环境中,因此无法增加内存限制。

我一次将索引限制为 10 个节点,并将最短字长更​​改为 5 个字符。我无法理解索引 10 个节点会如何消耗所有内存。

如何调试?尝试什么?任何想法将不胜感激!

【问题讨论】:

  • 内存消耗不仅取决于您索引的节点数量,还取决于您激活的模块。如果你有很多活动模块(或一些资源消耗模块,如 CCK/views),Drupal 会占用大量 RAM。
  • 我的坏人。我不明白,cmets也被索引了。我没有注意到的另一件事是,我有超过 250 000 个垃圾邮件 cmets,它们从文件系统中占用了大约 600M 的空间。有人会问:你怎么能错过它。答案是:你不应该。谢谢大家。

标签: php drupal memory-management


【解决方案1】:

看看 /XXX/modules/search/search.module 中的第 444 行,那里的代码是什么?

我认为我们需要更多地了解您网站的内容。网站有多大?多少个节点?每个节点大约有多少文本?

检查您的数据库,您的节点使用了多少存储空间?整个数据库的大小是多少?

您是否安装了允许您搜索附加文件和文件系统上的文件的模块(如http://drupal.org/project/search_files)?

【讨论】:

    【解决方案2】:

    好的,你说客户一直在发布更多内容。我们没有关于 cronjob 之前使用了多少内存的信息。很可能直到最近你的记忆力都在极限,现在你已经过去了。当不知道自己在做什么的人建立网站时,这种事情总是会发生。

    如何进行下一步?增加搜索模块的内存分配。我的意思是这似乎有点明显。你担心这不会扩展吗?好吧,您并不确定,因为直到现在您还没有分析问题。

    需要考虑的一点是,搜索引擎是一种在运行搜索时用磁盘空间换取 I/O 的方式。您可以为每次搜索扫描所有文档(使用 I/O),或者查看索引(在磁盘上)以获取信息。因此,为您的网站编制索引的 cron 脚本自然需要一定数量的内存(作为一种临时磁盘空间)才能完成工作。

    【讨论】:

    • 所有正确的观点——我看不出他们中的任何一个将如何帮助@Jasmo 解决他的问题。
    【解决方案3】:

    我的第一个怀疑是队列中有一个很大的节点让你超出了限制。有几种方法可以对此进行测试:

    检查您的数据库中的search_dataset 表,查找与您的站点一个节点相对应的最大sid。然后,查看nids 比这更大的节点。其中一个异常大,还是奇怪?尝试将其编辑为空白正文(确保保留旧版本),看看是否有帮助。

    如果没有,请发表评论,我们会尝试其他方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 2010-09-17
      • 2019-02-24
      • 2011-11-25
      • 2021-12-07
      • 2012-03-04
      • 1970-01-01
      相关资源
      最近更新 更多