web-dev-qa-db-fra.com

Laravel les files d'attente se "tuer"

Parfois, lorsque j'envoie un jeu de données volumineux vers un Job, mon utilitaire de file d'attente se ferme brusquement.

// $taskmetas is an array with other arrays, each subsequent array having 90 properties.
$this->dispatch(new ProcessExcelData($Excel_data, $taskmetas, $iteration, $storage_path));

La classe de travail ProcessExcelData crée un fichier Excel à l’aide de box/spout package.

  • dans le premier exemple, $taskmetas a 880 lignes - fonctionne très bien
  • dans le deuxième exemple, $taskmetas a 10 000 lignes - se termine brusquement

1er exemple - sortie de la file d'attente avec un petit jeu de données:

forge@user:~/myapp.com$ php artisan queue:work --tries=1
[2017-08-07 02:44:48] Processing: App\Jobs\ProcessExcelData
[2017-08-07 02:44:48] Processed:  App\Jobs\ProcessExcelData

2ème exemple - sortie en file d'attente avec un grand ensemble de données: _

forge@user:~/myapp.com$ php artisan queue:work --tries=1
[2017-08-07 03:18:47] Processing: App\Jobs\ProcessExcelData
Killed

Je ne reçois aucun message d'erreur, les journaux sont vides et le travail n'apparaît pas dans la table failed_jobs comme pour les autres erreurs. La limite de temps est fixée à 1 heure et la limite de mémoire à 2 Go.

Pourquoi mes files d'attente s'arrêtent-elles brusquement?

6
PeterInvincible

Vous pouvez essayer avec un délai d'attente. Pour par exemple. File d'attente artisanal: travail - timeout = 120

Par défaut, le délai d'expiration est de 60 secondes. Par conséquent, nous annulons avec force le délai d'expiration mentionné ci-dessus.

3
Smruti Ranjan

Cela a fonctionné pour moi:

J'ai eu un travail Supervisord:

Job ID, Queue, Processes, Timeout, Sleep Time, Tries, Action Job_1,
Default, 1, 60, 3, 3

https://laravel.com/docs/5.6/queues#retrying-failed-jobs dit:

Pour supprimer tous vos travaux ayant échoué, vous pouvez utiliser la commande queue: flush:

php artisan queue:flush

C'est ce que j'ai fait (après avoir exécuté php artisan queue:failed pour voir qu'il y avait des travaux en échec).

Ensuite, j'ai supprimé mon travail Supervisord et en ai créé un nouveau avec un délai d'expiration de 360 ​​secondes.

Il est également important de se rappeler que le redémarrage du travail Supervisord (dans le panneau de configuration de mon application Cloudways) et le processus complet de Supervisord (dans le panneau de configuration de mon serveur Cloudways).

Après avoir tenté de relancer mon travail, je l'ai remarqué dans la table failed_jobs et lu que l'exception était liée aux autorisations de fichiers cache. J'ai donc cliqué sur le bouton Réinitialiser les autorisations dans le tableau de bord Cloudways de mon application.

0
Ryan

Il y a 2 options. Soit manque de mémoire, soit dépasse le temps d'exécution.

Essayez $ dmesg | grep php Cela vous montrera plus de détails

Augmentez max_execution_time et/ou memory_limit dans votre fichier php.ini.

0
Owais Alam