I lost track of how many times Jellyfin buffered while I tried to turn on my smart lights. How many times have I noticed the LED blinking frantically on my Raspberry Pi’s case. How many times SSH would stop responding, and I had to walk over to perform a hard reset. And I thought it was normal.

I ran Jellyfin, Home Assistant, Pi-hole, and a couple of Docker containers on a Pi 4 with 4GB of RAM. I treated it as a tiny server that ran in headless mode, always on. After several months of random freezes, reinstalls, failed updates, and inconsistent behavior, I eventually realized that the Raspberry Pi works best when it does exactly one thing.

👁 A Raspberry Pi 5
The Raspberry Pi 5 is the best Home Assistant hub you can get for cheap

The Raspberry Pi 5 delivers unmatched performance and value as a powerful, low-cost Home Assistant hub.

By  Jeff Butts

Why the Pi fails at multitasking gloriously

Ignoring hardware reality

Undoubtedly, Raspberry Pi feels like a capable SBC, since it also comes with 8GB and 16GB memory options. But that’s where I hung up on what it could run.

My setup started with installing Pi-hole and Unbound. Then, ran Jellyfin for local streaming media. A while later, I deployed Home Assistant on it. But things really went downhill when I tried running several Docker containers and building a comprehensive dashboard using Grafana and Prometheus.

Witnessing Pi’s limits, I realized my mistake of making it work like a machine it was never meant to replace — a general-purpose server.​

When the Pi started freezing and crashing often, I blamed the 4GB RAM on my Pi. So I borrowed my friend’s Pi 4 with 8GB of RAM, but the results weren’t better. I still saw swap space errors, and sustained read-write operations turned my microSD card into a bottleneck.

When I moved everything to an NVMe SSD, it did help. But it also revealed the Pi's storage constraints and limitations on PCIe support. The USB ports share a controller, and multiple high-speed transfers weren’t supported. While I mixed SSDs and HDDs, they worked acceptably for transfers, but not for multitasking. Witnessing Pi’s limits, I realized my mistake of making it work like a machine it was never meant to replace — a general-purpose server.​

A single-purpose approach makes the Raspberry Pi shine

Doing one job properly

After getting tired of endlessly tuning Pi, I wiped its storage clean and started over with one rule: use it for one primary service. First, I turned the Pi into a dedicated Jellyfin server, which resulted in a smooth, hiccup-free streaming experience.

The following week, I wiped it clean again and deployed Home Assistant OS directly on the SSD, using the Pi as the automation hub with a USB Zigbee coordinator plugged into it. Running just Home Assistant makes all automations fire instantly. But that wasn’t without issues. Home Assistant took a couple of minutes to boot properly, and building ESPHome firmware for different devices stretched to 10–15 minutes. Apart from that, there was no interference or high resource usage.

Finally, I decided to run only Pi-hole and Unbound on the Pi and enjoyed amazing reliability. No more forced reboots, no tedious maintenance.​

When running more than one service does make sense

Choose those services wisely

Running multiple services on a Raspberry Pi does have some exceptions. To experiment with that, it’s recommended to use an NVMe SSD for storage and choose lightweight services. These services need to be picked carefully so that their failures don't bring down the Pi.

So it’s important to choose what you want the Pi to primarily work as — a media server, network monitor, home automation hub, a retro gaming console, a network-wide ad blocker, a VPN server, or turn it into a travel router.

After setting that up, you can add a complimentary service or two, as long as neither takes down something critical, and you lose access to the Pi. For example, running Pi-hole and Home Assistant together seems far riskier, because the failure of either can take down your home network. But you can run a Jellyfin server with Pi-hole and Unbound DNS resolution. Typically, I’d avoid using services that require writing large databases on a Pi running from an SD card.

So I kept it simple: Only one resource-heavy service at a time, and avoided installing conflicting services.

Single-purpose things can rarely go wrong

​Eventually, I stopped trying to use the Raspberry Pi to do everything. To improve Pi’s reliability, I ditched SD cards for NVMe SSDs and switched to wired Ethernet. Those two upgrades solved most of the headaches.

Instead of splurging on a top-tier Pi, I picked up a small x86 mini PC and turned it into a single Proxmox node to run dedicated services. It handles virtualization, Docker containers, and my experimental projects way better.

Now my Raspberry Pi runs a Jellyfin server for all the devices in my family. The Raspberry Pi became more useful when I stopped pushing its limits and accepted it for what it is. And if I want a service to be always available, I’d prefer to use an appropriate Raspberry Pi model for it. For instance, using a Pi Zero 2W is a solid choice for running Pi-hole with Unbound and projects that need minimal power.

  • Raspberry Pi 4
    CPU
    Arm Cortex-a72 (quad-core, 1.8GHz)
    Memory
    1GB, 2GB, 4GB, or 8GB of LPDDR4
    Operating System
    Raspberry Pi (Official)
    Ports
    2x USB-A 3.0, 2x USB-A 2.0, 40-pin GPIO, 2x micro-HDMI, 2-lane MIPI DSI display port, 2-lane MIPI CSI camera port, 4-pole stereo audio and composite port, microSD card slot, USB-C (for 5V power), Gigabit Ethernet
    GPU
    VideoCore VI
    Wireless Connectivity
    2.4/5GHz Wi-Fi, Bluetooth 5.0
  • Raspberry Pi 5
    CPU
    Arm Cortex-A76 (quad-core, 2.4GHz)
    Memory
    Up to 8GB LPDDR4X SDRAM
    Operating System
    Raspberry Pi OS (official)
    Ports
    2× USB 3.0, 2× USB 2.0, Ethernet, 2x micro HDMI, 2× 4-lane MIPI transceivers, PCIe Gen 2.0 interface, USB-C, 40-pin GPIO header
    GPU
    VideoCore VII
    Wireless Connectivity
    Bluetooth 5.0, Dual-band 802.11ac Wi-Fi