IOTOP(8) System Manager's Manual IOTOP(8)
NAME
iotop - simple top-like I/O monitor
SYNOPSIS
iotop [OPTIONS]
DESCRIPTION
iotop watches I/O usage information available in the Linux kernel
(requires 2.6.20 or later) and displays a table of current I/O usage by
processes or threads on the system. At least the CON-
FIG_TASK_DELAY_ACCT, CONFIG_TASK_IO_ACCOUNTING, CONFIG_TASKSTATS and
CONFIG_VM_EVENT_COUNTERS options need to be enabled in your Linux ker-
nel build configuration.
Running iotop as non-root user is possible by adding the NET_ADMIN
capability. This can be done by e.g.:
$ sudo setcap 'cap_net_admin+eip' <path-to>/iotop
Be warned that this will also allow other users to run it and get
access to information that normally should not be available to them.
iotop displays columns for the I/O bandwidth read and written by each
process/thread during the sampling period. It also displays the per-
centage of time the thread/process spent while swapping in and while
waiting on I/O. For each process, its I/O priority (class/level) is
shown.
In addition, the total I/O bandwidth read and written during the sam-
pling period are displayed at the top of the interface. Total DISK
READ and Total DISK WRITE values represent total read and write band-
width between processes and kernel threads on one side and kernel block
device subsystem on the other. While Current DISK READ and Current DISK
WRITE values represent corresponding bandwidths for current disk I/O
between the kernel block device subsystem and the underlying hardware
(HDD, SSD, etc.). Thus Total and Current values may not be equal at any
given moment of time due to data caching and I/O operations reordering
that take place inside the Linux kernel.
Use the left and right arrows to select the sort column, r or space to
reverse the sorting order, o to toggle the --only option (this uses the
visible values from the GRAPH column or the IO column in case the GRAPH
column is hidden), p to toggle the --processes option, a to cycle
between the --accumulated, --accum-bw and normal operation, i to change
the priority of a thread or a process's thread, f to change filtering
by UID/PID (--user and --pid options), 1-9 to toggle the visibility of
the respective column, v to toggle the visibility of the VFS READ and
VFS WRITE columns, 0 to show all columns, up/down arrows,
page-up/page-down/home/end keys to scroll and q to quit. Any unrecog-
nized key will be ignored.
All processes or threads that have exited are displayed grayed for as
long as their data is visible in the GRAPH column, or for two refresh
cycles when it is hidden. The invalid data points in the GRAPH column
are displayed inverse or with letter x (see option --dead-x and x
shortcut). When using Unicode characters each position contains two
datapoints and only the positions with two invalid data points are
reversed.
It is possible for threads of a process to have different priority from
their main process. This is shown with ! in the PRIO column of the main
process as e.g. !be/4.
With -P the values of a process include all its threads. When showing
threads, the row of the main process shows only the values of the main
thread.
When showing threads, they appear below their main process, unless they
are listed alone with --flat. The processes are sorted by the values of
the whole process and the threads of each process by their own values.
There are two ways to change the IO priority of a process or thread -
press i and use arrows to select the process or thread from the visible
ones on screen or press i and type its TID (PID and TID have the same
value for the main process). Then use tab and arrows to change the pri-
ority value and confirm with enter. Shortcuts esc or q will cancel this
mode.
To change the UID and PID filters, press f and use tab to select the
UID or PID field, then type the numerical id or n to remove the filter
and confirm with enter. Filtering is always done by TID because it is
unique. Note that for the main process PID is the same as TID. Short-
cuts esc or q will cancel this mode.
Starting with Linux kernel 5.14.x task_delayacct is configurable at
runtime and set to off by default. This setting can be changed in
interactive mode by the Ctrl-T shortcut. In batch mode a warning is
printed when the setting is OFF. From the command line this can be
enabled by:
$ sudo sysctl kernel.task_delayacct=1
and disabled again by:
$ sudo sysctl kernel.task_delayacct=0
It is advisable to keep this option off when not using this or another
monitoring program because when enabled it has some effect on system
performance.
OPTIONS
-v, --version
Show the version number and exit
-h, --help
Show usage information and exit
-H, --help-type=TYPE
Set the type of interactive help shown. Accepted values for TYPE
are none, win and inline.
-o, --only
Only show processes or threads actually doing I/O, instead of
showing all processes or threads. This can be dynamically tog-
gled by pressing o
--no-only
Show all processes or threads
-b, --batch
Turn on non-interactive mode. Useful for logging I/O usage over
time. The columns of non-interactive mode are fixed so that its
output can be parsed: the options that hide or show columns,
also from the config file, apply only to the interactive view,
except for the VFS READ and VFS WRITE columns
-n NUM, --iter=NUM
Set the number of iterations before quitting (never quit by
default). This is most useful in non-interactive mode
-d SEC, --delay=SEC
Set the delay between iterations in seconds (1 second by
default). Accepts non-integer values such as 1.1 seconds
-p PID, --pid=PID
A process/thread id to monitor (all by default). In non-inter-
active mode only the tasks of its process are read, which is
much faster on systems with many tasks; the Total DISK READ and
Total DISK WRITE then cover only that process
-u USER, --user=USER
A user id to monitor (all by default). It is matched against
the real user id of the tasks, which the USER column shows. The
value will always be resolved first unless it is prefixed by +
in which case it is treated as numeric only. Values that do not
resolve but appear to be numeric are used as numeric
-P, --processes
Only show processes. Normally iotop shows processes and all
threads
--threads
Show processes and all threads
--flat List the threads alone, sorted by their own values, instead of
grouping them below their process. This has no effect when only
processes are shown and in batch mode, which always lists the
threads alone
--no-flat
List the threads grouped below their process
-a, --accumulated
Show accumulated I/O instead of bandwidth. In this mode, iotop
shows the amount of I/O processes have done since they started,
or with --no-lifetime since iotop first saw them. Note that
this option and --accum-bw are exclusive and they will turn each
other off
--no-accumulated
Show bandwidth (useful when changing config file with --write)
-A, --accum-bw
Show accumulated I/O as bandwidth for the whole sampling period.
In this mode, iotop shows the amount of I/O per second for the
whole period since the process started, or with --no-lifetime
since iotop first saw it. Note that this option and --accumu-
lated are exclusive and they will turn each other off
--no-accum-bw
Show bandwidth (useful when changing config file with --write)
--lifetime
Accumulate the I/O of each process or thread since it started.
This is the default. The kernel counts the I/O of each thread,
so the total of a process includes its threads that iotop saw,
but not the threads that exited before. With --accum-bw the
average is over the time since the process or thread started
--no-lifetime
Accumulate the I/O of each process or thread since iotop first
saw it
-k, --kilobytes
Use kilobytes instead of a human friendly unit. This mode is
useful when scripting the batch mode of iotop. Instead of choos-
ing the most appropriate unit iotop will display all sizes in
kilobytes
--no-kilobytes
Use human friendly units
-t, --time, --timestamp
Add a timestamp on each line (implies --batch). Each line will
be prefixed by the current time
-c, --fullcmdline
Show processes' full file path and parameters
--no-fullcmdline
Show processes' names only
-1, --hide-pid
Hide PID/TID column
--show-pid
Show PID/TID column
-2, --hide-prio
Hide PRIO column
--show-prio
Show PRIO column
-3, --hide-user
Hide USER column
--show-user
Show USER column
-4, --hide-read
Hide DISK READ column
--show-read
Show DISK READ column
--show-vfs-read
Show VFS READ column
--hide-vfs-read
Hide VFS READ column
-5, --hide-write
Hide DISK WRITE column
--show-write
Show DISK WRITE column
--show-vfs-write
Show VFS WRITE column
--hide-vfs-write
Hide VFS WRITE column
--show-vfs
Show VFS READ and VFS WRITE columns
--hide-vfs
Hide VFS READ and VFS WRITE columns
-6, --hide-swapin
Hide SWAPIN column
--show-swapin
Show SWAPIN column
-7, --hide-io
Hide IO column
--show-io
Show IO column
-8, --hide-graph
Hide GRAPH column
--show-graph
Show GRAPH column
-9, --hide-command
Hide COMMAND column
--show-command
Show COMMAND column
-g TYPE, --grtype=TYPE
Set GRAPH column data source. Accepted values for TYPE are io,
r, w, rw and sw.
-R, --reverse-graph
Reverse GRAPH direction - show most recent values on the right
side
--no-reverse-graph
Do not reverse GRAPH direction - show most recent values on the
left side
-q, --quiet
Suppress headers before each run (implies --batch). This option
can be specified up to three times to suppress the output of
different header lines:
-q column names are only printed on the first iteration,
-qq column names are never printed,
-qqq the I/O summary is never printed
-x, --dead-x
Show exited processes/threads with letter x instead of inverse
background
--no-dead-x
Show exited processes/threads with inverse background
-e, --hide-exited
Hide exited processes
--show-exited
Show exited processes
-l, --no-color
Do not colorize values
--color
Colorize values. This will override the effect of the environ-
ment variable NO_COLOR when explicitly specified on the command
line.
-T, --hide-time
Do not show time clock in upper right corner
--show-time
Show time clock in upper right corner
--si Use SI units of 1000 when printing values. The default is non-SI
1024
--no-si
Use non-SI units of 1024 when printing values
--threshold=1..10
Set the threshold to switch to next unit. The default value is 2
--ascii
Disable using Unicode
--unicode
Use Unicode drawing chars
-N, --inverse
Use inverse interface (black on white)
--no-inverse
Use normal interface (useful when changing config file with
--write)
--filter=REGEX
Filter processes by TID and COMMAND. This will only show pro-
cesses where TID or COMMAND are matching the REGEX.
--uid2name=MODE
Set the UID to user name resolution mode for the USER column.
The USER column shows the real user id of a task, as the kernel
reports it in taskstats, so a set-user-ID program shows the user
that started it. Accepted values for MODE are always (always
resolve UID to username using getpwuid(3)), none (do not resolve
UID, show numeric UID instead), cyclic (cache resolved usernames
internally for each refresh cycle to avoid repetitive getp-
wuid(3) lookups), and static (cache resolved usernames perma-
nently across all refresh cycles, the default; Ctrl-L clears the
cache).
-W, --write
Merge the preceding options to the current config, save the con-
fig and exit. Note that all options after this one will be
ignored.
--debug-write
Like -W (--write), but write the config with the preceding
options to standard output instead of saving it, and exit. Note
that all options after this one will be ignored. Do not use in
normal operation; this option is for debugging and testing.
KEYBOARD SHORTCUTS
q, Q Exit
W Save current settings to configuration file in a place conform-
ing to XDG Base Directory Specification. The respective path is
created in case it does not exist. In case of error creating or
accessing the config file, a warning with the reason is shown
and the configuration is not saved.
$XDG_CONFIG_HOME/iotop/iotoprc - if environment variable
XDG_CONFIG_HOME is set and not empty.
$HOME/.config/iotop/iotoprc - if environment variable XDG_CON-
FIG_HOME is not set or empty, but HOME is set and not empty.
There is no configuration file if neither of them is set and not
empty.
D Reset all settings to their default values
<space>, r
Toggle sort order
<home> Scroll to the top of the list
<end> Scroll to the bottom of the list
<page-up>
Scroll one screen up
<page-down>
Scroll one screen down
<up> Scroll one line up
<down> Scroll one line down
<right>
Sort by next column
<left> Sort by previous column
<esc> Cancel ionice, filter or search. In case only the help window is
open then close it
o, O Toggle showing only processes with IO activity
p, P Toggle showing processes/threads
Ctrl-F Toggle grouping threads below their process
a, A Cycle showing accumulated/accum-bw/current values
Ctrl-A Toggle accumulating since the processes started or since iotop
first saw them
? Toggle showing inline help
h, H Toggle showing window help
<, > Scroll the help window up and down when it does not fit on the
screen
c, C Toggle showing full command line
1, 2, 3, 4, 5, 6, 7, 8, 9
Toggle showing the column (column number corresponds to the
shortcut)
0 Show all columns
g, G Cycle GRAPH source (IO=IO, R=DISK READ , W=DISK WRITE, R+W=DISK
READ+DISK WRITE, SW=SWAPIN). Using g will cycle forward and G
will cycle backward.
R Toggle reverse GRAPH direction
i, I IOnice a process/thread (depends on process/thread display mode)
f, F Change UID and PID filters
u, U Toggle using Unicode/ASCII characters for pseudo graph
l, L Toggle colorizing values
n, N Toggle inverse interface (black on white)
x, X Toggle the display mode of exited processes/threads between let-
ter x and inverse background
e, E Toggle the display of exited processes
T Toggle the display of time clock in upper right corner
s, S Toggle freeze of data collection
Ctrl-B, b
Toggle SI units
Ctrl-R, t
Cycle unit threshold
Ctrl-T Toggle task_delayacct kernel sysctl
Ctrl-L Redraw screen and clear UID cache
/ Change search regular expression. While the search regular
expression is being edited, there is an indicator next to it
that shows if the expression is valid. The search is confirmed
by <enter> or cancelled by <esc>.
List of shortcuts in the editor:
<esc> Cancel editing and remove the regular expression filter
<enter>
Confirm the current regular expression and exit edit
mode. In case the regular expression is empty or invalid
it will match everything.
Alt/Meta-<backspace>, Ctrl-W
Delete one word from cursor to the left
Alt/Meta-D
Delete one word from cursor to the right
Alt/Meta-B, Ctrl-<left>
Move the cursor to the beginning of the word on the left
Alt/Meta-F, Ctrl-<right>
Move the cursor after the end of the word on the right
Ctrl-A, <home>
Move the cursor to the leftmost position
Ctrl-E, <end>
Move the cursor after the last character
Ctrl-B, <left>
Move the cursor to the left
Ctrl-F, <right>
Move the cursor to the right
Ctrl-H, <backspace>
Delete the character left of cursor
Ctrl-D, <del>
Delete the character under the cursor
Ctrl-K Delete from the character under the cursor to the end of
the line
Ctrl-U Delete everything
[anything-else]
Non-printable characters are ignored. Normal characters
are inserted before the character under the cursor. UTF-8
sequences are parsed and treated as a single character.
Unicode combining characters will be appended to the
character under the cursor.
ENVIRONMENT
NO_COLOR
As per the recommendation of https://www.no-color.org/ iotop
honors the contents of the environment variable NO_COLOR and
when it is set to a non empty string, all color output is sup-
pressed. The config file keeps the colors only when they differ
from what it gives, so --write and W do not save it as a set-
ting.
HOME, XDG_CONFIG_HOME
Used to determine the config file path. See the W shortcut for
details.
IOTOP_NO_RENICE
Disable the i shortcut. The user will not be able to change pro-
cesses' nice values.
SEE ALSO
ionice(1), top(1), vmstat(1), atop(1), htop(1), getpwuid(3)
AUTHOR
The original Python iotop implementation was written by Guillaume Chaz-
arain. This rewrite in C was started in 2014 by Vyacheslav Trushkin
and reworked to include all missing features from the original Python
code and several new ones since 2020 by Boian Bonev.
This manual page was started by Paul Wise for the Debian project and is
placed in the public domain.
October 19, 2026 IOTOP(8)