【问题标题】:JOB_TOO_BIG Pheanstalk - what can be done?JOB_TOO_BIG Pheanstalk - 可以做什么?
【发布时间】:2015-05-25 19:07:28
【问题描述】:

在 Laravel 4.2 和 Laravel Forge 上

我犯了一个错误,不小心将一些代码推送到了生产服务器上,但是出现了一个错误,它将一个作业推送到队列中,而一旦完成就没有删除它。 现在我不能再在队列中推送任何东西了,我得到:

Pheanstalk_Exception JOB_TOO_BIG:作业数据超出服务器强制限制

我能做什么?

【问题讨论】:

    标签: php laravel queue laravel-forge pheanstalk


    【解决方案1】:

    您可以使用 Beanstalkd 的 -z 选项增加最大作业大小:http://linux.die.net/man/1/beanstalkd

    要在 Forge 上执行此操作,您需要通过 SSH 连接到服务器并编辑 /etc/default/beanstalkd 文件。

    添加以下行(或取消注释现有的 BEANSTALKD_EXTRA 行并进行编辑): BEANSTALKD_EXTRA="-z 524280"

    进行更改后重新启动 beanstalkd: sudo service beanstalkd restart

    大小应以字节为单位。

    我不确定这是否会对性能产生严重影响 - 到目前为止,这对我来说非常好。我将不胜感激任何关于性能的 cmet。

    【讨论】:

    • 这个答案帮助了我两次……相隔两年。
    【解决方案2】:

    这是因为您试图在队列本身中存储太多数据。尽量减少你推送到队列中的数据。

    例如,如果您的队列作业涉及使用模型,只需将模型 ID 传递到队列中并作为作业的一部分从数据库中获取它们,而不是将整个模型实例传递给队列。

    如果您使用 eloquent 模型,它们会自动以这种方式处理。

    【讨论】:

    • 谢谢大佬,有什么原因它以前可以正常工作,但现在不行了吗?以前从未有过这个问题,直到我忘记删除一个工作。从那时起,每次队列有一点数据时,它都会崩溃。 - 将尝试仅传递 id 来尝试,但这很奇怪....
    • @commandantp 抱歉,回复太晚了,刚刚收到关于这篇文章的通知。您之前存储的数据量没有达到每个任务的数据限制,而现在您尝试推送到队列的数据量却达到了。这可能是您的数据库中的更多列等。
    • 我正在阅读一些代码,想知道为什么我们传递的是 id 而不是模型对象。好吧,这很好地清除了它!
    猜你喜欢
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多