{"id":1925,"date":"2017-08-10T11:54:30","date_gmt":"2017-08-10T06:24:30","guid":{"rendered":"https:\/\/pheonixsolutions.com\/blog\/?p=1925"},"modified":"2026-09-08T09:50:46","modified_gmt":"2026-09-08T04:20:46","slug":"install-iotop-linux-host","status":"publish","type":"post","link":"https:\/\/pheonixsolutions.com\/blog\/install-iotop-linux-host\/","title":{"rendered":"How to Install and Use iotop on Linux Hosts"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p class=\"isSelectedEnd\">When a Linux server experiences slow performance, high disk latency, or unexpected storage bottlenecks, identifying the process responsible for excessive disk I\/O becomes critical. While tools such as <code dir=\"ltr\">top<\/code> and <code dir=\"ltr\">htop<\/code> help monitor CPU and memory usage, they do not provide detailed visibility into disk input\/output activity.<\/p>\n<p class=\"isSelectedEnd\"><code dir=\"ltr\">iotop<\/code> is a powerful command-line utility that displays real-time disk I\/O usage by processes and users, making it easier for system administrators to troubleshoot performance issues, identify resource-intensive applications, and monitor storage activity.<\/p>\n<p class=\"isSelectedEnd\">This guide explains how to install and use <code dir=\"ltr\">iotop<\/code> on Ubuntu, Debian, CentOS, RHEL, and other Linux distributions.<\/p>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h2>What is iotop?<\/h2>\n<p class=\"isSelectedEnd\"><code dir=\"ltr\">iotop<\/code> is an interactive monitoring tool that shows:<\/p>\n<ul data-spread=\"false\">\n<li>Real-time disk read\/write activity<\/li>\n<li>Processes generating the most I\/O<\/li>\n<li>Per-user disk utilization<\/li>\n<li>Total disk bandwidth consumption<\/li>\n<li>Accumulated I\/O statistics<\/li>\n<\/ul>\n<p class=\"isSelectedEnd\">The tool works similarly to the <code dir=\"ltr\">top<\/code> command but focuses specifically on disk I\/O operations.<\/p>\n<h3>Key Benefits<\/h3>\n<ul data-spread=\"false\">\n<li>Quickly identify disk-intensive processes<\/li>\n<li>Troubleshoot slow server performance<\/li>\n<li>Monitor database and application workloads<\/li>\n<li>Detect backup jobs or rogue processes consuming storage resources<\/li>\n<li>Analyze disk bottlenecks in real time<\/li>\n<\/ul>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h2>Prerequisites<\/h2>\n<p class=\"isSelectedEnd\">Before installing <code dir=\"ltr\">iotop<\/code>, ensure:<\/p>\n<ul data-spread=\"false\">\n<li>Root or sudo privileges are available.<\/li>\n<li>The Linux kernel supports task I\/O accounting (enabled by default on most modern distributions).<\/li>\n<\/ul>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h2>Installing iotop<\/h2>\n<h3>Ubuntu \/ Debian<\/h3>\n<p class=\"isSelectedEnd\">Update the package repository and install <code dir=\"ltr\">iotop<\/code>:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">sudo apt update\nsudo apt install iotop -y<\/code><\/pre>\n<p class=\"isSelectedEnd\">Verify the installation:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">iotop --version<\/code><\/pre>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h3>CentOS 7 \/ RHEL 7<\/h3>\n<p class=\"isSelectedEnd\">Install using YUM:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">sudo yum install iotop -y<\/code><\/pre>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h3>CentOS Stream \/ Rocky Linux \/ AlmaLinux \/ RHEL 8+<\/h3>\n<p class=\"isSelectedEnd\">Install using DNF:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">sudo dnf install iotop -y<\/code><\/pre>\n<p class=\"isSelectedEnd\">Verify installation:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">iotop --version<\/code><\/pre>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h2>Running iotop<\/h2>\n<p class=\"isSelectedEnd\">Launch <code dir=\"ltr\">iotop<\/code> with root privileges:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">sudo iotop<\/code><\/pre>\n<p class=\"isSelectedEnd\">You will see a real-time display showing:<\/p>\n<ul data-spread=\"false\">\n<li>Process ID (PID)<\/li>\n<li>User<\/li>\n<li>Disk read rate<\/li>\n<li>Disk write rate<\/li>\n<li>Swap usage<\/li>\n<li>I\/O percentage<\/li>\n<li>Command executed<\/li>\n<\/ul>\n<p class=\"isSelectedEnd\">Example:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">PID  USER      DISK READ  DISK WRITE  COMMAND\n2451 mysql     10.25 M\/s  1.50 M\/s    mysqld\n3204 root      5.00 M\/s   2.30 M\/s    rsync<\/code><\/pre>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h2>Useful iotop Commands<\/h2>\n<h3>Display Only Active I\/O Processes<\/h3>\n<p class=\"isSelectedEnd\">Show only processes currently performing disk operations:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">sudo iotop -o<\/code><\/pre>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h3>Monitor Specific User Activity<\/h3>\n<p class=\"isSelectedEnd\">Filter activity by user:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">sudo iotop -u mysql<\/code><\/pre>\n<p class=\"isSelectedEnd\">Replace <code dir=\"ltr\">mysql<\/code> with the required username.<\/p>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h3>Batch Mode Output<\/h3>\n<p class=\"isSelectedEnd\">Generate output suitable for scripts and logging:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">sudo iotop -b<\/code><\/pre>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h3>Capture Limited Iterations<\/h3>\n<p class=\"isSelectedEnd\">Display 10 updates and exit:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">sudo iotop -b -n 10<\/code><\/pre>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h3>Display Accumulated I\/O Statistics<\/h3>\n<p class=\"isSelectedEnd\">Show total I\/O usage since process start:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">sudo iotop -a<\/code><\/pre>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h3>Sort Processes by I\/O Usage<\/h3>\n<p class=\"isSelectedEnd\">Run:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">sudo iotop<\/code><\/pre>\n<p class=\"isSelectedEnd\">Then use interactive keys:<\/p>\n<ul data-spread=\"false\">\n<li><code dir=\"ltr\">r<\/code> \u2013 Sort by read activity<\/li>\n<li><code dir=\"ltr\">w<\/code> \u2013 Sort by write activity<\/li>\n<li><code dir=\"ltr\">o<\/code> \u2013 Toggle active I\/O processes only<\/li>\n<li><code dir=\"ltr\">a<\/code> \u2013 Toggle accumulated I\/O mode<\/li>\n<li><code dir=\"ltr\">q<\/code> \u2013 Quit<\/li>\n<\/ul>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h2>Troubleshooting<\/h2>\n<h3>&#8220;Netlink error: No such file or directory&#8221;<\/h3>\n<p class=\"isSelectedEnd\">If you receive an error similar to:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">Netlink error: No such file or directory<\/code><\/pre>\n<p class=\"isSelectedEnd\">Ensure task I\/O accounting is enabled:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">cat \/proc\/sys\/kernel\/task_delayacct<\/code><\/pre>\n<p class=\"isSelectedEnd\">If the output is <code dir=\"ltr\">0<\/code>, enable it:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">sudo sysctl kernel.task_delayacct=1<\/code><\/pre>\n<p class=\"isSelectedEnd\">To make the setting persistent:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">echo \"kernel.task_delayacct=1\" | sudo tee -a \/etc\/sysctl.conf\nsudo sysctl -p<\/code><\/pre>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h2>Alternative Tools<\/h2>\n<p class=\"isSelectedEnd\">If <code dir=\"ltr\">iotop<\/code> is unavailable, consider these alternatives:<\/p>\n<table>\n<tbody>\n<tr>\n<th>Tool<\/th>\n<th>Purpose<\/th>\n<\/tr>\n<tr>\n<td>iostat<\/td>\n<td>Disk utilization statistics<\/td>\n<\/tr>\n<tr>\n<td>dstat<\/td>\n<td>System resource monitoring<\/td>\n<\/tr>\n<tr>\n<td>atop<\/td>\n<td>Advanced system monitoring<\/td>\n<\/tr>\n<tr>\n<td>sar<\/td>\n<td>Historical performance analysis<\/td>\n<\/tr>\n<tr>\n<td>pidstat<\/td>\n<td>Per-process resource statistics<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h2>Conclusion<\/h2>\n<p class=\"isSelectedEnd\"><code dir=\"ltr\">iotop<\/code> is an essential monitoring tool for Linux administrators and DevOps engineers who need visibility into disk I\/O activity. It provides real-time insights into which processes and users are consuming storage resources, helping quickly identify performance bottlenecks and troubleshoot system slowdowns.<\/p>\n<p class=\"isSelectedEnd\">Whether you&#8217;re managing application servers, database hosts, or storage-intensive workloads, <code dir=\"ltr\">iotop<\/code> offers a simple and effective way to monitor disk usage and maintain optimal system performance.<\/p>\n<p class=\"isSelectedEnd\">For detailed command options and advanced usage, refer to the manual page:<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">man iotop<\/code><\/pre>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h2>Frequently Asked Questions (FAQ)<\/h2>\n<h3>1. What is iotop used for?<\/h3>\n<p class=\"isSelectedEnd\"><code dir=\"ltr\">iotop<\/code> is a Linux monitoring utility that displays real-time disk I\/O usage by processes and users. It helps administrators identify applications or services causing high disk read\/write activity.<\/p>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h3>2. Is iotop installed by default on Linux?<\/h3>\n<p class=\"isSelectedEnd\">No. Most Linux distributions do not include <code dir=\"ltr\">iotop<\/code> by default. It must be installed manually using the package manager (<code dir=\"ltr\">apt<\/code>, <code dir=\"ltr\">yum<\/code>, or <code dir=\"ltr\">dnf<\/code>).<\/p>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h3>3. Do I need root privileges to run iotop?<\/h3>\n<p class=\"isSelectedEnd\">Yes. Root or sudo privileges are typically required because <code dir=\"ltr\">iotop<\/code> needs access to kernel-level I\/O statistics.<\/p>\n<pre dir=\"ltr\"><code dir=\"ltr\">sudo iotop\n<\/code><\/pre>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<pre dir=\"ltr\"><code dir=\"ltr\"><\/code><\/pre>\n<h2>Related Articles<\/h2>\n<pre dir=\"ltr\"><code dir=\"ltr\"><\/code><\/pre>\n<ol class=\"markdown__list\">\n<li><a href=\"https:\/\/pheonixsolutions.com\/blog\/wp-admin\/post.php?post=11093&amp;action=edit\">SSL\/TLS Configuration and Verification on Linux<\/a><\/li>\n<li><a href=\"https:\/\/pheonixsolutions.com\/blog\/wp-admin\/post.php?post=10350&amp;action=edit\">How the Linux Kernel Handles Network Connections Using DNS and Routing<\/a><\/li>\n<li><a href=\"https:\/\/pheonixsolutions.com\/blog\/wp-admin\/post.php?post=10029&amp;action=edit\">How to Install Plesk on a Linux Server<\/a><\/li>\n<\/ol>\n<div contenteditable=\"false\">\n<hr \/>\n<\/div>\n<h2 id=\"talk-to-our-experts\" class=\"wp-block-heading\" tabindex=\"-1\">Talk to our experts<\/h2>\n<p class=\"wp-block-paragraph\">Looking for the right technology solution for your business? Our team of experts can help you with development, cloud, DevOps, design, and a wide range of other technology needs. Get in touch with our team\u00a0<a href=\"https:\/\/pheonixsolutions.com\/contact\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n<p><code dir=\"ltr\"><br \/>\n<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction When a Linux server experiences slow performance, high disk latency, or unexpected storage bottlenecks, identifying the process responsible for [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1022],"tags":[161,361,261,274],"class_list":["post-1925","post","type-post","status-publish","format-standard","hentry","category-web-architecture","tag-centos","tag-iotop","tag-linux","tag-ubuntu","psol-cat-web-architecture"],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/phn2x7-v3","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/1925","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=1925"}],"version-history":[{"count":2,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/1925\/revisions"}],"predecessor-version":[{"id":11504,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/1925\/revisions\/11504"}],"wp:attachment":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=1925"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=1925"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=1925"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}