| title | Machines |
|---|---|
| description | Configure the number of vCPUs and GBs of RAM you want the task to use. |
The machine configuration is optional. Using higher spec machines will increase the cost of running the task but can also improve the performance of the task if it is CPU or memory bound.
import { task } from "@trigger.dev/sdk/v3";
export const heavyTask = task({
id: "heavy-task",
machine: "large-1x",
run: async ({ payload, ctx }) => {
//...
},
});The default machine is small-1x which has 0.5 vCPU and 0.5 GB of RAM. You can change the default machine in your trigger.config.ts file:
import type { TriggerConfig } from "@trigger.dev/sdk/v3";
export const config: TriggerConfig = {
machine: "small-2x",
// ... other config
};| Preset | vCPU | Memory | Disk space |
|---|---|---|---|
| micro | 0.25 | 0.25 | 10GB |
| small-1x (default) | 0.5 | 0.5 | 10GB |
| small-2x | 1 | 1 | 10GB |
| medium-1x | 1 | 2 | 10GB |
| medium-2x | 2 | 4 | 10GB |
| large-1x | 4 | 8 | 10GB |
| large-2x | 8 | 16 | 10GB |
You can view the Trigger.dev cloud pricing for these machines here.
You can also override the task machine when you trigger it:
await tasks.trigger<typeof heavyTask>(
"heavy-task",
{ message: "hello world" },
{ machine: "large-2x" }
);This is useful when you know that a certain payload will require more memory than the default machine. For example, you know it's a larger file or a customer that has a lot of data.
Sometimes you might see one of your runs fail with an "Out Of Memory" error.
TASK_PROCESS_OOM_KILLED. Your task ran out of memory. Try increasing the machine specs. If this doesn't fix it there might be a memory leak.
We automatically detect common Out Of Memory errors, including when ffmpeg throws an error because it ran out of memory.
You can explicitly throw an Out Of Memory error in your task. This can be useful if you use a native package that detects it's going to run out of memory and then stops before it runs out. If you can detect this, you can then throw this error.
import { task } from "@trigger.dev/sdk/v3";
import { OutOfMemoryError } from "@trigger.dev/sdk/v3";
export const yourTask = task({
id: "your-task",
machine: "medium-1x",
run: async (payload: any, { ctx }) => {
//...
throw new OutOfMemoryError();
},
});If OOM errors happen regularly you need to either optimize the memory-efficiency of your code, or increase the machine.
If you are seeing rare OOM errors, it might make sense to add a setting to your task to retry with a large machine when an OOM happens:
import { task } from "@trigger.dev/sdk/v3";
export const yourTask = task({
id: "your-task",
machine: "medium-1x",
retry: {
outOfMemory: {
machine: "large-1x",
},
},
run: async (payload: any, { ctx }) => {
//...
},
});