Durability modes
The three durability options are:- PERFORMANCE_OPTIMIZED — minimizes disk I/O to maximize throughput. Builds with this setting behave like Freestyle jobs after an unclean shutdown and may not be resumable.
- MAX_SURVIVABILITY — writes runtime state frequently to disk to give the best chance of resuming after an unclean shutdown. This is the slowest option; use it for critical deployments or infrastructure tasks.
- SURVIVABLE_NON_ATOMIC — a compromise: better survivability than PERFORMANCE_OPTIMIZED with less disk I/O than MAX_SURVIVABILITY, but without full atomic guarantees.

Default durability is MAX_SURVIVABILITY. Choose PERFORMANCE_OPTIMIZED only when you need higher throughput and can tolerate losing the ability to resume builds after an unclean shutdown.
Quick comparison
| Durability Option | Trade-off | Best use case |
|---|---|---|
| MAX_SURVIVABILITY | Highest disk I/O, best resumability | Production-critical pipelines or infrastructure changes |
| SURVIVABLE_NON_ATOMIC | Medium disk I/O, partial resumability | Long-running pipelines where some resiliency is desired |
| PERFORMANCE_OPTIMIZED | Lowest disk I/O, may not resume after crash | High-throughput pipelines where resumability is not required |
Where to configure durability
You can change durability at several scopes depending on whether you want a cluster-wide policy or per-job behavior.| Scope | How to set | Notes |
|---|---|---|
| Global (default) | Manage Jenkins → Configure System → Pipeline Speed / Durability | Sets cluster-wide default for new jobs |
| Job (Pipeline) | Job configuration → Pipeline options / Durability | Overrides global default for that job |
| Multi-branch / branch-level | Repository sources → Property strategy → branch exceptions | Assign different durability per branch (e.g., main = MAX_SURVIVABILITY, feature branches = PERFORMANCE_OPTIMIZED) |

Branch-level settings in Multi-branch projects
For GitHub Organization or Multibranch Pipeline jobs, use the repository source’s property strategy to add exceptions per branch. This allows, for example, main/master to use MAX_SURVIVABILITY while feature branches run with PERFORMANCE_OPTIMIZED for speed.
Pipeline-level configuration and demonstration
You can set durability for an individual Pipeline job. The example below demonstrates how MAX_SURVIVABILITY preserves runtime state so a pipeline resumes after an unclean controller restart, whereas PERFORMANCE_OPTIMIZED may not. Create a simple Pipeline job and set its durability to MAX_SURVIVABILITY. Use this Jenkinsfile — it writes one line per second intonumbers.txt for 60 iterations:
numbers.txt once per second.

Demonstration — MAX_SURVIVABILITY
- Configure the job to use MAX_SURVIVABILITY and start the pipeline.
- On the Jenkins controller, simulate an unclean shutdown by killing the Jenkins process:
- Restart Jenkins and open the build console. With MAX_SURVIVABILITY the Pipeline should resume from where it left off. Example console excerpt showing resumption:
Switching to PERFORMANCE_OPTIMIZED
Repeat the test after changing the job’s durability to PERFORMANCE_OPTIMIZED. Start the pipeline and simulate an unclean shutdown as before.Using PERFORMANCE_OPTIMIZED reduces disk I/O and improves pipeline throughput, but it increases the risk that builds cannot be resumed after an unclean shutdown. Use it only when resumability is not required.
Summary
- MAX_SURVIVABILITY: safest option; highest disk I/O; use for production-critical or infrastructure pipelines.
- SURVIVABLE_NON_ATOMIC: intermediate choice; reasonable resiliency with lower I/O than MAX_SURVIVABILITY.
- PERFORMANCE_OPTIMIZED: best throughput; lowest I/O; may lose resumability after unclean shutdowns.