【问题标题】:Magento export out of memory even via SSH即使通过 SSH,Magento 也会内存不足
【发布时间】:2012-12-24 17:39:58
【问题描述】:

我有一个相对较小的商店,大约 20k sku 所有简单的产品。我正在使用 magento 1.7.2,但所有旧版本都有同样的问题。我根本无法将我的产品导出到 CSV。直接从magento后端的数据流配置文件运行时内存不足,从shell运行时同样的错误。

Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 71 bytes) in /home/public_html/app/code/core/Mage/Eav/Model/Entity/Attribute/Source/Table.php on line 62

我已将 magentos htaccess 中的内存限制和执行时间增加到 512m,将 magentos php.ini 增加到 512m,并将我的 VPS php 配置 ini 增加到 512mb。它仍然会在大约 4 分钟内烧毁并耗尽内存。

我很困惑,我的整个数据库(压缩)只有 28mb!为了使 magento 导出所有产品功能正常工作,我缺少什么?

【问题讨论】:

  • 你试过output_buffering吗?

标签: php magento ssh export


【解决方案1】:

Magento 数据流确实倾向于使用大量内存,这使得在大型商店中导出变得困难。对于拥有大量产品目录的商店,编写脚本直接从数据库导出而不是通过数据流导出通常要快得多、更容易。

【讨论】:

  • 是的,如果您使用 product_flat 设置并导出 catalog_product_flat_x 表(作为提示),我认为您的数据非常正确?
【解决方案2】:

这可能是您的.htaccess 文件没有覆盖您在php.ini 中全局设置的memory_limit 设置的问题。

其他选项在你index.php 中设置为无限制memory_limit 用于测试。然后你就会知道 .htaccess 中的更改是否没有生效。

【讨论】:

  • 你给-1 提供了memory_limit 吗?
【解决方案3】:

我通过一次导出 500、1000 或任意数量(使用自定义导出脚本)解决了这个问题。

我制作了一个文件,它作为参数 $start 和 $productsToExport 接收。该文件取了产品的集合,然后使用了

LIMIT ($start-1)*$productsToExport, $productsToExport

此脚本仅返回导出的产品数量。

我制作了第二个主脚本,它对第一个文件执行递归 AJAX,参数 $start = 0,$productsToExport = 500。AJAX 完成后,它对 $start = 1 执行相同的操作,并且以此类推,直到没有产品。

这样做的好处是它不会使服务器过载(一个 ajax 仅在前一个完成后运行) - 如果发生错误,脚本会继续。 memory_limit 和 max_execution_time 也是 sa

【讨论】:

    【解决方案4】:

    如果 20k skus 是指 20.000,那么这是完全可能的。不幸的是,导出非常需要内存。在这种情况下我总是将memory_limit增加到2000M,然后创建文件需要一段时间,但最终成功。

    【讨论】:

      猜你喜欢
      • 2016-04-11
      • 1970-01-01
      • 2013-10-05
      • 2012-08-22
      • 2013-09-26
      • 2022-11-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      相关资源
      最近更新 更多