Last Updated on 1 week by Sachin G

Have you ever wondered why your Linux machine sometimes takes forever to boot, while other times it starts up in seconds? Slow boot times can be frustrating, especially when you’re troubleshooting production servers or working on performance tuning. Fortunately, modern Linux distributions come with a powerful tool called systemd-analyze that helps you examine, measure, and troubleshoot boot-up performance.

In this post, I’ll share how to diagnose and optimize your Linux system’s boot performance using systemd-analyze. We’ll explore essential commands like systemd-analyze time, systemd-analyze blame, and systemd-analyze critical-chain to identify bottlenecks, measure startup delays, and improve overall boot efficiency.

I’ve personally used these commands on Ubuntu, CentOS, RHEL, and Fedora systems to troubleshoot slow startup issues. The results were eye-opening because they provided clear, actionable data rather than leaving me guessing.

Why Analyze Boot Performance in Linux?

Before we dive into commands, let’s answer an important question: Why bother analyzing boot performance?

  • Identify Bottlenecks: Slow boots often occur due to a specific service hanging during startup.
  • Optimize Boot Time: Understanding delays helps you fine-tune your system.
  • Improve Reliability: Troubleshooting boot issues reduces downtime and frustration.
  • Performance Benchmarking: Measuring boot time gives you a baseline before and after changes.

Now, let’s jump into the step-by-step guide to measure boot performance on Linux using systemd-analyze.

What is systemd-analyze?

In most modern Linux distributions, systemd is the default init system responsible for managing services during startup. It also provides built-in tools for performance analysis, and systemd-analyze is one of the most important.

This command-line utility gives you detailed information about the system boot process, including:

  • Total boot time (kernel + initrd + userspace)
  • Which services take the longest to start
  • Dependency chains that can delay other units
  • A graphical SVG plot of the boot sequence

Supported Distributions

  • Ubuntu (18.04, 20.04, 22.04, 24.04)
  • CentOS / RHEL
  • Fedora
  • Debian
  • SUSE Linux Enterprise

Understanding systemd-analyze and Boot Timing

Here I am showing four basic interesting commands to look at boot performance. This utility will work on CentOS, RHEL, Fedora, Ubuntu.

  • Systemd-analyze
  • systemd-analyze blame
  • systemd-analyze critical-chain
  • systemd-analyze plot

Step 1: Check Total Boot Time Using systemd-analyze

The simplest way to check Linux startup time using systemd-analyze is with the time option.

# systemd-analyze

Sample Output:

Startup finished in 1.189s (kernel) + 2.012s (initrd) + 10.425s (userspace) = 13.626s

What does this mean?

  • Kernel: Time taken to load the Linux kernel
  • initrd: Time taken by the initial RAM disk
  • Userspace: Time taken by services and applications

This total boot time is useful for quick checks. For example, on my Fedora system, I noticed an unusually high userspace time, which hinted at service-level delays.

Real-World Example

On Ubuntu 22.04 workstation, the total boot time jumped from 9s to 25s after I installed a VPN client. Running systemd-analyze confirmed the spike was in the userspace segment, which led me to investigate further using the next command.

Step 2: Find Slow Services with systemd-analyze blame

This will show a list of all running units, along with when they were introduced. This data may be utilized to streamline boot-up times. This output may be misdirecting as the startup of one service load is slow because it waits for the other service to complete initialization.

This is where interpret systemd-analyze blame results becomes essential. The blame subcommand lists services in descending order of the time they took to initialize. I found that NetworkManager-wait-online.service was adding a whopping 18 seconds to my boot. After tweaking its timeout and disabling unnecessary network scripts, the boot time dropped dramatically.

# systemd-analyze blame

Sample Output:

18.233s NetworkManager-wait-online.service
 5.215s mariadb.service
 3.108s network.service
 2.421s plymouth-quit-wait.service

Why is this useful?

  • It shows which services are taking the most time.
  • In the above output, NetworkManager-wait-online.service delayed the boot by 18 seconds.

My Experience

On one of my RHEL servers, the NetworkManager-wait-online.service was the culprit. Disabling it reduced boot time by 15 seconds instantly. This is why systemd-analyze blame is my go-to command for quick boot issue analysis.

Pro Tip: Do not disable services blindly. Research their purpose first, especially on production servers.

Step 3: Examine Dependencies with systemd-analyze critical-chain

Another powerful command is:

This shows a tree view of services and their dependencies. I often refer to this as a system boot profiler, showing which services are delaying others. It’s perfect when you want the systemd-analyze critical chain output explained visually. To analyse in which units critical points in the start-up run the command below, for example.

multi-user.target @10.406s
└─mariadb.service @5.187s +5.215s
└─network.target @4.885s
└─network.service @1.763s +3.108s
└─basic.target @1.748s
└─paths.target @1.738s
└─brandbot.path @1.738s
└─sysinit.target @1.670s
└─systemd-update-utmp.service @1.615s +52ms
└─auditd.service @1.458s +137ms
└─systemd-tmpfiles-setup.service @1.414s +36ms
└─rhel-import-state.service @1.340s +68ms
└─local-fs.target @1.332s
└─local-fs-pre.target @1.329s
└─systemd-tmpfiles-setup-dev.service @1.034s +287ms
└─kmod-static-nodes.service @900ms +127ms
└─systemd-journald.socket
└─-.mount
└─system.slice
└─-.slice

How to Interpret This?

  • multi-user.target completed at 10.4s.
  • mariadb.service started at 5.1s and took 5.2s.
  • This shows which service delayed others due to dependencies.

Use Case: This is invaluable when two services appear slow in blame, but one is waiting on the other. It helps prioritize optimizations.

Learn Smarter. Level Up Faster →

Want to master Linux, DevOps, Ansible, or Cloud workflows the smart way? I’ve curated a list of top-rated, real-world Udemy courses — based on student reviews and practical feedback.

Visit the Recommended Courses page to explore and enroll in courses trusted by the community.

See Curated Courses →

Step 4: Visualize Boot Process with systemd-analyze plot

You can generate an SVG file showing the entire boot process visually.

#systemd-analyze plot > techtransit.svg

Open boot-performance.svg in your browser. You’ll see a timeline where each bar represents a service and its startup duration.

Image of SVG ploted graph 

SVG graph showing Linux boot performance analysis
Screenshot by TechTransit.org: Visualize Linux boot process with systemd-analyze plot

Additional Commands and Tips

  • systemd-analyze dump → Shows complete systemd state information.
  • journalctl -b → View logs for the current boot.
  • Remove unused services to reduce delays.
  • Enable parallelization of services with systemd defaults.

Best Practices for Linux Boot Optimization

  • Keep your system updated.
  • Disable unnecessary services using systemctl disable <service>.
  • Optimize networking scripts for faster startup.
  • Use SSD storage for significant improvement.

FAQ: Examine Boot-up Performance through systemd-analyze on Linux

Q1: How do I analyze Linux boot performance using systemd-analyze?

Use systemd-analyze to check total boot time, systemd-analyze blame for slow services, and systemd-analyze critical-chain for dependency delays.

Q2: Can systemd-analyze work on all Linux distributions?

Yes, it works on most systemd-based distros like Ubuntu, RHEL, CentOS, Fedora, Debian, and SUSE.

Q3: How can I visualize the boot process?

Run systemd-analyze plot > output.svg and open the file in a browser.

Q4: Is it safe to disable services shown in blame output?

Not always. Check the service purpose before disabling, especially in production.

Examining and improving boot-up performance in Linux doesn’t have to be guesswork. With systemd-analyze, you have a set of powerful commands that provide detailed insights into every stage of the boot process. Whether you’re a sysadmin troubleshooting delays or a Linux enthusiast optimizing your desktop, these tools are invaluable.

Take time to run these commands on your system today. You’ll be surprised at what’s slowing you down — and how quickly you can fix it.

Learn Smarter. Level Up Faster →

Want to master Linux, DevOps, Ansible, or Cloud workflows the smart way? I’ve curated a list of top-rated, real-world Udemy courses — based on student reviews and practical feedback.

Visit the Recommended Courses page to explore and enroll in courses trusted by the community.

See Curated Courses →