Camunda 7 Job Executor Not Picking Jobs – Root Cause & Fixes

In Camunda 7, the Job Executor is responsible for executing background jobs such as timers, asynchronous continuations, retries, and batch operations.

A common production issue is:

Jobs are created in the database, but the Job Executor is not picking or executing them.

This blog explains the root causes, how to diagnose, and how to fix this issue in real projects.


1️⃣ What Is the Job Executor in Camunda 7?

The Job Executor is a background thread pool that:

  • Acquires jobs from the database

  • Locks them

  • Executes them asynchronously

It handles:

  • Timer events

  • Async continuations (asyncBefore, asyncAfter)

  • Failed job retries

  • Batch jobs (history cleanup, migrations, etc.)

If it is not working correctly, processes appear “stuck”.


2️⃣ Most Common Root Causes

🔴 1. Job Executor Is Disabled

By default, it can be disabled via configuration.

Check configuration:

BPMN / Engine config

<property name="jobExecutorActivate">true</property>

Camunda BPM Run (application.yml)

camunda: bpm: job-execution: enabled: true

📌 Fix: Enable the Job Executor and restart the engine.


🔴 2. Database Job Locks Are Stuck

If the engine crashes or is force-stopped, jobs may remain locked.

Check DB tables:

  • ACT_RU_JOB

  • LOCK_OWNER

  • LOCK_EXP_TIME

If LOCK_EXP_TIME is in the future, jobs won’t be picked.

📌 Fix:

  • Wait for lock expiration

  • Or manually clear locks (only with DBA approval)


🔴 3. Thread Pool Exhausted

If all job executor threads are busy or blocked, no new jobs are picked.

Symptoms:

  • No job execution logs

  • Thread dump shows blocked threads

Default settings may be too low for production.

📌 Fix: Increase thread pool size.

camunda: bpm: job-execution: core-pool-size: 10 max-pool-size: 20

🔴 4. Job Acquisition Is Failing Silently

Sometimes acquisition fails due to:

  • Database connection issues

  • Deadlocks

  • Network latency

Check logs for:

ENGINE-14019 Exception during job acquisition

📌 Fix:

  • Verify DB connectivity

  • Check connection pool size

  • Monitor DB locks


🔴 5. Failed Jobs Reached Retry Limit

Jobs with retries = 0 are not picked again.

Check in DB or Cockpit:

SELECT ID_, RETRIES_ FROM ACT_RU_JOB;

📌 Fix:

  • Increase retries manually

  • Fix root exception

  • Use Cockpit → Set retries


🔴 6. Multiple Engine Nodes Competing Incorrectly

In clustered environments:

  • Nodes must share the same database

  • Clock drift can block acquisition

📌 Fix:

  • Sync system clocks (NTP)

  • Ensure same engine configuration on all nodes


🔴 7. Custom Code Blocking Execution

Custom Java Delegates or Listeners can:

  • Block threads

  • Cause infinite loops

  • Hang transactions

📌 Fix:

  • Avoid long-running logic inside delegates

  • Move heavy logic to external workers

  • Add proper logging and timeouts


3️⃣ How to Diagnose Quickly (Checklist)

✔ Check Cockpit → Jobs
✔ Enable DEBUG logs:

org.camunda.bpm.engine.jobexecutor

✔ Verify database locks
✔ Take a thread dump
✔ Check retries and incident history


4️⃣ Production Best Practices

✅ Always enable Job Executor explicitly
✅ Tune thread pool for production load
✅ Monitor ACT_RU_JOB and incidents
✅ Use async boundaries carefully
✅ Avoid heavy logic inside delegates


5️⃣ When to Ask for Expert Help

If:

  • Jobs stop randomly in production

  • You see repeated incidents

  • Scaling causes instability

Then professional debugging is recommended.


💼 Professional Support Available

If you are facing issues in real projects related to Camunda production, Job Executor failures, or performance problems, I provide paid consulting, production debugging, project support, and focused trainings.

📧 Contactishikhanirankari@gmail.com info@realtechnologiesindia.com

🌐 WebsiteIT Trainings | Digital metal podium


Comments

Popular posts from this blog

jBPM Installation Guide: Step by Step Setup

Scopes of Signal in jBPM

OOPs Concepts in Java | English | Object Oriented Programming Explained