【问题标题】:PHP CLI - Unauthorized access to memory SIGSEGVPHP CLI - 未经授权访问内存 SIGSEGV
【发布时间】:2011-06-15 21:57:43
【问题描述】:

我在将 PHP 导入到 MySQL 数据库时遇到问题。当我从终端运行 PHP 脚本时,大约 500 次插入后,php shudown 并返回:

未经授权访问内存 SIGSEGV。

我有:

PHP 5.3 MySQL 5.1.54-1ubuntu4 Ubuntu 11.04

感谢您的帮助!

【问题讨论】:

  • 没有看到您的代码,无法回答。但是由于 PHP 没有提供在低级别管理内存的机制,所以这个错误只能由 PHP 本身或加载的模块之一引起。可能是资源泄漏。
  • 我认为 PHP 源代码不是什么东西,这有什么帮助,因为在另一台装有 Windows + Apache + 相同 PHP/MySQL 的计算机上,这个导入脚本工作正常.. 我认为那个错误在分配的内存/时间限制等中。我不知道,但 Linux 可能会限制很多 mysql 请求。
  • 也许,但如果你展示了代码,我相信我们可以建议如何改变它以首先使用更少的内存。你还应该看看两台机器上给php分配了多少内存,并使用php自己的函数来显示内存使用情况。
  • 脚本是一次性使用的,我只需要在表之间转换一些数据(街道数据库,城市部分等。所以它的大数据表)。所以这个源不是优化的:) 而且这个代码是建立在 Nette 框架上的,带有 notORM 数据库层,所以重构代码并不重要。现在,我重新安装了所有 php、apache 包,但仍然相同;( ... 并且内存使用返回 (ater error) 46MB
  • 我尝试了一个“内存测试”:$a = "";而 (1) { $a .= str_repeat(".", 100);回声 memory_get_usage() 。 "\n";睡眠(10);并且它没问题(以 err 内存限制 128Mb 结束,所以它是正确的)。

标签: php memory command-line-interface segmentation-fault


【解决方案1】:

很高兴您发现了错误:

我找到了解决方案.. 错误出现在 notOrm 类 NotORM_Cache_Session 中,它为查询的选择部分提供会话缓存。

扩展它以帮助可能遇到类似错误的其他人,如果 php.ini 中的session.save_path 不可写或不可读,则在使用 PHP 会话时会出现段错误。

要解决,请将php.ini中的session.save_path行编辑为

session.save_path = "/var/lib/php/session"

并在终端中运行:

chmod 755 /var/lib/php/session

如果您从 root 运行 PHP,您可能还需要添加:

chown root /var/lib/php/session

【讨论】:

    猜你喜欢
    • 2015-03-05
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2014-07-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多