尝试将100K记录的数组有效负载发送到Laravel作业(Horizon和Redis)时,会引发内存问题:
Allowed memory size of 536870912 bytes exhausted (tried to allocate 77598720 bytes)
内存设置为512MB。
我使用的代码是
CreateSmsBroadcast::dispatch($user, $smsBroadcast, iterator_to_array($contacts),
$requestData)->onQueue('create-sms-broadcast');
传递有效负载contacts (iterator)
时,
CreateSmsBroadcast::dispatch($user, $smsBroadcast, $contacts, $requestData)
->onQueue('create-sms-broadcast');
然后出现以下问题:
// vendor/laravel/framework/src/Illuminate/Queue/Queue.php
protected function createObjectPayload($job)
{
return [
'displayName' => $this->getDisplayName($job),
'job' => 'Illuminate\Queue\CallQueuedHandler@call',
'maxTries' => $job->tries ?? null,
'timeout' => $job->timeout ?? null,
'timeoutAt' => $this->getJobExpiration($job),
'data' => [
'commandName' => get_class($job),
'command' => serialize(clone $job), // line of error
],
];
}
Serialization of 'Generator' is not allowed
我不想增加内存。因此,建议我如何解决上述问题?