Pingu
Computer MySQL PostgreSQL Books Publications
Spielereien Kanu Geopolitik Business TopoDB POI Klettersteigen History TransPool Thermal Baden Brokenstuben Goldwaschen
Blog Contact
Shinguz
Google
/ch/open

Linux Disk I/O

/ home / computer / linux / .

iotop

Ich habe immer wieder Performance-Probleme mit meinem I/O System (spinning disk, hdd). Daher ziehe ich zur Problemanalyse öfters mal das Linux Tool iotop zu Rate:

$ apt install iotop
$ iotop

Hier ein erstes Beispiel

Total DISK READ:         0.00 B/s | Total DISK WRITE:        23.87 K/s
Current DISK READ:       0.00 B/s | Current DISK WRITE:      94.23 K/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
    252 be/3 root        0.00 B/s   11.31 K/s  0.00 %  0.00 % [jbd2/sdb1-8]
    879 be/3 root        0.00 B/s   11.31 K/s  0.00 %  0.00 % [jbd2/sdb3-8]
  33639 be/4 mysql       0.00 B/s 1286.49 B/s  0.00 %  0.00 % bin/mariadbd --datadir=/home/mysql/database/mariadb-114/data
...
CONFIG_TASK_DELAY_ACCT and kernel.task_delayacct sysctl not enabled in kernel, cannot determine SWAPIN and IO %

Die unterste Zeile gibt eine Warnung aus: Die Spalten SWAPIN und IO sind immer null.

Man kann diese Kernel-Einstellung dynamisch ändern:

$ sudo sysctl kernel.task_delayacct=1

Diese gilt für alle Prozesse, die nach der Änderung neu gestartet werden. Es kann ein weilchen dauern, bis sie aktiv wird. Gegebenenfalls iotop stoppen, etwas warten und dann neu starten.

Persistieren geht auf DEB basierten Systemen wie folgt:

$ sudo echo 'kernel.task_delayacct=1' >>/etc/sysctl.d/90-shinguz.conf

Anschliessend sollte der Service neu gestartet werden:

$ sudo service procps start

ACHTUNG: Die Aktivierung dieser Kernel-Einstellung kann auf Kosten der Systemperformance gehen. Das iotop Monitoring selbst geht auch schon zu Lasten der CPU (top):

top - 15:56:43 up 17:19,  1 user,  load average: 0.66, 0.67, 0.97
Tasks: 404 total,   1 running, 403 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.7 us,  0.9 sy,  0.0 ni, 95.1 id,  2.3 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  15674.9 total,   4183.2 free,   5552.8 used,   6637.0 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.  10122.0 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  61503 root      20   0   32076  20736   9216 S   6.3   0.1   0:33.78 iotop
   3454 mysql     20   0 3978432 627052  41104 S   0.7   3.9   0:11.43 mysqld
   4108 mysql     20   0 1957752 435524  46968 S   0.7   2.7   0:10.69 mysqld
  75252 oli       20   0 4451236 541724 257692 S   0.7   3.4   0:23.30 firefox
   3894 mysql     20   0 2621560 286524  26048 S   0.3   1.8   0:23.00 mariadbd

Quellen:

Weitere Beispiele

Beispiel 2

Man kann sehen, dass zwei verschiedene MariaDB Datenbank Instanzen am Laufen sind und ob Systemthreads die Last verursachen oder Userthreads (one_connection).

Total DISK READ:         0.00 B/s | Total DISK WRITE:       953.47 K/s
Current DISK READ:       0.00 B/s | Current DISK WRITE:     278.78 K/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
    252 be/3 root        0.00 B/s  216.41 K/s  0.00 %  0.00 % [jbd2/sdb1-8]
    314 be/3 root        0.00 B/s  692.51 K/s  0.00 %  0.00 % systemd-journald
    884 be/3 root        0.00 B/s    2.55 K/s  0.00 %  0.00 % [jbd2/sda1-8]
   1263 be/4 syslog      0.00 B/s   31.82 K/s  0.00 %  0.00 % rsyslogd -n -iNONE [rs:main Q:Reg]
  22375 be/4 mysql       0.00 B/s 1303.54 B/s  0.00 %  0.00 % bin/mariadbd --datadir=/home/mysql/database/dwh/data [one_connection]
  22380 be/4 mysql       0.00 B/s    5.09 K/s  0.00 %  0.00 % bin/mariadbd --datadir=/home/mysql/database/dwh/data [one_connection]
   4077 be/4 mysql       0.00 B/s    2.55 K/s  0.00 %  0.00 % bin/mariadbd --datadir=/home/mysql/database/mariadb-114/data
  33639 be/4 mysql       0.00 B/s 1303.54 B/s  0.00 %  0.00 % bin/mariadbd --datadir=/home/mysql/database/mariadb-114/data

Beispiel 3

Das (gleichzeitige) Starten von Thunderbird und Firefox verursacht heftige Systemlast (bis zu 100% IO). Es ist mir schon öfter aufgefallen, dass Thunderbird beim Starten SEHR I/O intensiv sein kann.

Jetzt, mit aktivierter task_delayacct Einstellung sehen wir auch, wer wieviel Prozent der I/O-Last macht.

Total DISK READ:         5.51 M/s | Total DISK WRITE:       862.20 K/s
Current DISK READ:       8.22 M/s | Current DISK WRITE:     777.60 K/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
  62967 be/4 oli         4.45 M/s   26.13 K/s  0.00 % 36.81 % thunderbird
  62992 be/4 oli         0.00 B/s   10.35 M/s  0.00 % 21.49 % firefox [glean.dispatche]
  63206 be/4 oli        21.15 K/s    0.00 B/s  0.00 %  9.01 % thunderbird [Cache2 I/O]
  63007 be/4 oli       216.48 K/s    0.00 B/s  0.00 %  5.55 % thunderbird [Socket Thread]
  63210 be/4 oli        14.93 K/s    4.98 K/s  0.00 %  1.61 % thunderbird [BgIOThr~Pool #1]
  63347 be/4 oli       517.57 K/s    0.00 B/s  0.00 %  1.50 % thunderbird [StreamTrans #10]
  63365 be/4 oli        36.08 K/s    0.00 B/s  0.00 %  1.02 % thunderbird [WRScene~ilder#1]
  63694 be/4 oli       135.61 K/s    0.00 B/s  0.00 %  0.91 % thunderbird [StreamTrans #27]
  63304 be/4 oli        21.15 K/s    0.00 B/s  0.00 %  0.30 % thunderbird [TaskCon~ller #0]
  63333 be/4 oli        39.81 K/s    0.00 B/s  0.00 %  0.29 % thunderbird [ImageIO]
  63319 be/4 oli        65.94 K/s    4.98 K/s  0.00 %  0.14 % thunderbird [Renderer]
  62977 be/4 oli        11.20 K/s   67.18 K/s  0.00 %  0.08 % thunderbird [glean.dispatche]
    252 be/3 root        0.00 B/s  528.77 K/s  0.00 %  0.00 % [jbd2/sdb1-8]
    314 be/3 root        0.00 B/s  196.58 K/s  0.00 %  0.00 % systemd-journald
   1263 be/4 syslog      0.00 B/s    2.49 K/s  0.00 %  0.00 % rsyslogd -n -iNONE [rs:main Q:Reg]