Обожавам iotop защото позволява да видя кой процес работи по-сериозно със диска и така може да се видят дисково-интензивните операции. За HDD където iops е около 100-200 това е много полезно. За SSD където iops е от ранга на 30000-50000 също е много полезно.
Проблема е, че на текущо Ubuntu iotop не може да ми покаже swapin и io защото ключов параметър CONFIG_TASK_DELAY_ACCT е забранен.
На по-стари kernel-и това може да се реши като се активира това във /etc/default/grub:
GRUB_CMDLINE_LINUX_DEFAULT=“delayacct“
и се активира
sudo update-grub
и след това се рестартира.
Обаче на по-новите kernel 5.14 и нагоре това е изнесено като настройка и може да се активира/дезактивира без рестарт. Ето как се активира:
sudo sysctl kernel.task_delayacct=1
и как се дезактивира:
sudo sysctl kernel.task_delayacct=0
По-принцип е хубаво това да е изключено и да се пуска само когато ще се проверява нещо. При мен това е iotop. Затова може да се направи следния alias:
alias iotopd='bash -c "sudo sysctl kernel.task_delayacct=1 && sudo iotop ; sudo sysctl kernel.task_delayacct=0"'
при който се активира параметъра, пуска се iotop и при изход се деактивира параметъра.
Друг вариант е следния bash скрипт:
#!/bin/bash
# This script enables task delay accounting in the Linux kernel, runs iotop,
# then on exit sets task_delayacct back to 0.
# Disable task delay accounting when the script exits
disable_task_delayacct() {
sudo sysctl kernel.task_delayacct=0
}
# Trap the EXIT signal to call the disable_task_delayacct function
trap 'disable_task_delayacct' EXIT
# Enable task delay accounting
sudo sysctl kernel.task_delayacct=1
# Run iotop with administrative privileges
sudo iotop
Както виждате варианти много.