# Laravel Queue: Illuminate\Queue\MaxAttemptsExceededException: App\Jobs\SendReport has been attempted too many times or run too long

**Code:** `MaxAttemptsExceededException (queue job)` · **Category:** Laravel · **Seen on:** Laravel, PHP

A queued job failed repeatedly or ran past its timeout, so it was marked failed.

## Meaning

Check `failed_jobs` and logs for the root exception. A worker `--timeout` shorter than the job time kills it; `retry_after` in `config/queue.php` must exceed the job timeout or jobs get released and retried while still running. Make jobs idempotent and set `$tries`, `$backoff`, `$timeout`.

## Common causes

- Job takes longer than `--timeout` / `$timeout`
- `retry_after` shorter than job duration (job picked up twice)
- Exception thrown on each try
- Memory exhausted in worker
- External service failing

## Quick fix

1. Read `php artisan queue:failed` and `storage/logs`
2. Set `public $timeout = 120;` and `retry_after` > timeout
3. Use `$tries`, `$backoff` and `failed()` handler

## Detailed fix by platform

### Laravel

1. `php artisan queue:failed` ; `php artisan queue:retry all` ; `php artisan queue:work --timeout=120 --tries=3`

## How to diagnose

1. **Exception** — First failure reason?
2. **Timeouts** — timeout vs retry_after?
3. **Idempotent** — Safe to retry?

---
Source: [WhatIsMyError](https://whatismyerror.com/errors/laravel/queue-max-attempts-exceeded)
