Machine Sizing
Here are a few ways to set the size (CPU and memory) of your Machine VMs. This guide describes creating and sizing individual Machines with the Machines API and fly machine
commands. For Fly Launch apps, the same general sizing rules apply, but you can also use fly scale
commands to update groups of Machines or set a default VM size in the fly.toml
configuration file.
General Rules
We have some preset sizes for you to choose from. Each CPU selection defaults to a specific amount of memory.
You can, however, scale your machine’s CPU and memory separately. Memory limits are 2gb * shared CPU size
or 8gb * performance CPU size
. Minimum memory is 256m * shared CPU size
or 2048m * performance CPU size
.
Examples:
- If you have 4 shared CPUs, the max memory you can add is
2048 * 4 = 8192
. - If you have 4 performance CPU’s, the max memory you can add is
8192 * 4 = 32768
.
Using Size Presets
Any size listed for Machines on the pricing page can be used when creating a Machine.
Here’s what that looks like to launch a performance-2x
machine (2 CPU, 4gb memory):
curl -i -X POST \
-H "Authorization: Bearer ${FLY_API_TOKEN}" \
-H "Content-Type: application/json" \
"http://${FLY_API_HOSTNAME}/v1/apps/my-app-name/machines" \
-d '{
"name": "savvy-machine",
"config": {
"image": "some-savvy-image",
"size": "performance-2x"
}
}'
If you’re using flyctl
, the equivalent command looks like this:
fly machine run \
-a my-app-name \
--name savvy-machine \
--vm-size performance-2x \
some-savvy-image
Custom Sizes
When creating a machine, you can define the CPU and memory sizes yourself. Memory must be a multiple of 256 for shared sizes, and 2048 for performance sizes.
Here we create a machine with a 2 CPUs but double the RAM you’d get if using size shared-cpu-2x
.
curl -i -X POST \
-H "Authorization: Bearer ${FLY_API_TOKEN}" \
-H "Content-Type: application/json" \
"http://${FLY_API_HOSTNAME}/v1/apps/my-app-name/machines" \
-d '{
"name": "savvy-machine",
"config": {
"image": "some-savvy-image",
"guest": {
"cpu_kind": "shared",
"cpus": 2,
"memory_mb": 1024
}
}
}'
The cpu_kind
parameter can be one of shared
or performance
. Learn more about CPU types and performance here.
If you’re using flyctl
, the equivalent command looks like this:
fly machine run \
-a my-app-name \
--name savvy-machine \
--vm-cpus 2 \
--vm-memory 1024 \
some-savvy-image
There is not yet a CLI flag for shared
vs performance
. It defaults to shared
CPU types.
Adjusting Machine Size
You can adjust CPU and memory by updating a Machine. Updating a machine replaces the VM with a new one, but machine ID stays the same.
If we create a machine with the same command as above (using 1024m memory), but later want to reduce that to 512m (the minimum allowed), we can make the following API call:
# Updating a machine requires the *entire* config
# so treat this as an example
curl -i -X POST \
-H "Authorization: Bearer ${FLY_API_TOKEN}" \
-H "Content-Type: application/json" \
"http://${FLY_API_HOSTNAME}/v1/apps/my-app-name/machines/73d8d46dbee589" \
-d '{
"config": {
"image": "some-savvy-image",
"guest": {
"cpu_kind": "shared",
"cpus": 2,
"memory_mb": 512
}
}
}'
If you’re using flyctl
, the equivalent command looks like this:
fly machine update \
-a my-app-name \
-i some-savvy-image \
--vm-cpus 2 \
--vm-memory 512 \
73d8d46dbee589