Unrar Extraction Under Heavy Memory Pressure
Extracting archives with unrar during periods of heavy
memory pressure tests both the utility's internal memory architecture
and the host operating system's resource management. Because
unrar relies on a bounded sliding dictionary and streaming
disk I/O, its memory consumption is largely static during extraction.
Under extreme constraints, the utility relies on OS-level virtual memory
and paging to continue execution, though severe starvation will trigger
controlled allocation failures or process termination by the operating
system.
Predictable Memory Footprint via Dictionary Sizing
The core memory requirement of the RAR decompression algorithm is dictated by the dictionary size chosen during the archive's creation. In modern RAR5 formats, dictionary sizes range from 128 KB up to several gigabytes (commonly 32 MB to 1 GB), while legacy RAR4 archives rarely exceed 4 MB.
When extraction begins, unrar pre-allocates this
decompression dictionary along with standard input/output buffers.
Because this buffer size remains fixed throughout the lifecycle of
extracting a solid block or file, unrar does not
continually consume expanding amounts of RAM during normal
operations.
Behavior During Low Available Memory
When physical RAM is saturated by other processes, unrar
interacts with the operating system in several distinct phases:
1. OS Swapping and Paging Thrash
If physical RAM is exhausted, the operating system kernel offloads
inactive portions of unrar's sliding dictionary and working
memory to swap space or page files on disk.
- Because decompression algorithms continuously access the sliding dictionary to resolve backward references, paging these segments in and out of storage introduces massive latency.
- The operation shifts from being CPU-bound to I/O-bound, resulting in a dramatic slowdown known as disk thrashing, though decompression continues logically intact.
2. Allocation Failures (Graceful Abortion)
If physical memory and swap are completely exhausted before
unrar can allocate its required decompression window, the
memory allocation call (such as malloc or virtual memory
reservation) fails.
- Rather than causing silent data corruption,
unraris programmed to intercept allocation errors. - The utility terminates the extraction process and exits with an
error status indicating insufficient memory (such as
ERAR_NO_MEMORY). - Partially extracted files may remain on the disk or be automatically deleted depending on whether the overwrite and keep-broken-files flags are set.
3. Kernel OOM Killer Intervention
On modern Linux and Unix-like operating systems that employ memory
overcommit mechanisms, the OS may promise memory to unrar
that cannot be physically backed when written to. If the system enters
an unrecoverable memory state:
- The Linux Out-Of-Memory (OOM) Killer may designate
unraras a candidate for termination. - In this scenario, the process receives a
SIGKILLand halts abruptly without running its cleanup routines, potentially leaving corrupt partial files on the filesystem.
Streaming Architecture Limits Dynamic Bloat
Unlike archiving tools that may attempt to read large chunks of
compressed data into memory, unrar relies on streaming I/O.
It reads compressed blocks in small segments from storage, passes them
through the fixed-size sliding window, and immediately streams the
decompressed output to the destination drive. This pipeline prevents
memory usage from scaling with the size of the target files, ensuring
that heavy memory pressure affects extraction speed via the operating
system's memory subsystem rather than causing dynamic unbounded memory
expansion within unrar itself.