Running the default config of 0.1.0-rc2 on a raspberry Pi 4-B (aarch64, libc, Debian 13) immediately OOMs:
/ferrumc-0.1.0-rc2 $ ./target/release/ferrumc
2026-04-20T06:26:12.312360Z INFO Starting server...
2026-04-20T06:26:12.312663Z INFO Server setup complete.
thread 'main' (120408) panicked at src/lib/world/src/lib.rs:98:14:
Failed to initialize database: DatabaseInitError("Cannot allocate memory (os error 12)")
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
/ferrumc-0.1.0-rc2 $ RUST_BACKTRACE=1 strace -f -e trace=mmap,brk ./target/release/ferrumc
brk(NULL) = 0x55b230d000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fba3f5000
mmap(NULL, 27392, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fba3ee000
mmap(NULL, 263104, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_DENYWRITE, -1, 0) = 0x7fba37c000
mmap(0x7fba380000, 197568, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = 0x7fba380000
mmap(0x7fba3af000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1f000) = 0x7fba3af000
mmap(NULL, 720920, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_DENYWRITE, -1, 0) = 0x7fba2cf000
mmap(0x7fba2d0000, 655384, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = 0x7fba2d0000
mmap(0x7fba36f000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x8f000) = 0x7fba36f000
mmap(NULL, 1892368, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_DENYWRITE, -1, 0) = 0x7fba101000
mmap(0x7fba110000, 1826832, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = 0x7fba110000
mmap(0x7fba2bd000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19d000) = 0x7fba2bd000
mmap(0x7fba2c2000, 49168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fba2c2000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fba3ec000
brk(NULL) = 0x55b230d000
brk(0x55b232e000) = 0x55b232e000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_DROPPABLE|MAP_ANONYMOUS, -1, 0) = 0x7fba3f4000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fba3f3000
mmap(NULL, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7fba3ee000
2026-04-20T06:26:35.273296Z INFO Starting server...
2026-04-20T06:26:35.274054Z INFO Server setup complete.
mmap(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fba00f000
mmap(NULL, 2101248, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb9e0e000
mmap(NULL, 8256, PROT_READ|PROT_WRITE, MAP_SHARED, 4, 0) = 0x7fba3e9000
mmap(NULL, 1073741824000, PROT_READ, MAP_SHARED, 5, 0) = -1 ENOMEM (Cannot allocate memory)
thread 'main' (120501) panicked at src/lib/world/src/lib.rs:98:14:
Failed to initialize database: DatabaseInitError("Cannot allocate memory (os error 12)")
stack backtrace:
mmap(NULL, 32654832, PROT_READ, MAP_PRIVATE, 4, 0) = 0x7fb81eb000
brk(0x55b2356000) = 0x55b2356000
brk(0x55b23d4000) = 0x55b23d4000
brk(0x55b2464000) = 0x55b2464000
brk(0x55b2584000) = 0x55b2584000
0: __rustc::rust_begin_unwind
1: core::panicking::panic_fmt
2: core::result::unwrap_failed
3: <ferrumc_world::World>::new::<&alloc::string::String>
4: ferrumc::launch::create_state
5: ferrumc::main
mmap(NULL, 1716616, PROT_READ, MAP_PRIVATE, 4, 0) = 0x7fb8047000
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
+++ exited with 101 +++
OS: Debian GNU/Linux 13 (trixie) aarch64
Host: Raspberry Pi 4 Model B Rev 1.4
Kernel: Linux 6.12.75+rpt-rpi-v8
CPU: BCM2711 (4) @ 1.80 GHz
GPU: Broadcom bcm2711-vc5 [Integrated]
Work OOTB.
The bug is easy to work around: reduce the map_size. I'm creating this issue to help others who run into it, and to see if the default could be fixed on this platform.
Describe the Bug
Running the default config of 0.1.0-rc2 on a raspberry Pi 4-B (aarch64, libc, Debian 13) immediately OOMs:
With memory stracing:
The
mmap(NULL, 1073741824000, PROT_READ, MAP_SHARED, 5, 0) = -1 ENOMEM (Cannot allocate memory)line points at the default config of taking 1 TB of shmem. This is workaroundable by just changing the limit to e.g. 100GB inconfig.toml.To Reproduce
Just
cargo run --releaseon this machine, specifically with the defaultmap_size = 1000:Expected Behaviour
Work OOTB.
The bug is easy to work around: reduce the map_size. I'm creating this issue to help others who run into it, and to see if the default could be fixed on this platform.
Screenshots / Videos
N/A
FerrumC Version
0.1.0-rc2 (built from source)
Rust Version
rustc 1.97.0-nightly (e22c616e4 2026-04-19)
Server Logs
See above
Additional Context
No response
Is there an existing issue for this?