LINUX.ORG.RU

Тюнинг диска, барахлит жутко I\O

 , , ,


0

1

Копаюсь тута в virtualbox, шаманю с жестким диском, колдую в общем. Сама проблема в том, что на реальном сервере в некоторые моменты времени очень большая задержка отправки\приема с rabbitMQ сервера. Тама отваливаются некоторые службы из-за этого по таймауту (можно конечно выставить большие тайауты, но хочу все же оттюнинговать диск и проблему решить в корне, если получится). То есть послал сообщение в rabbitMQ, тебе ответ пришел, обычно это занимает миллисекунды, но в некоторые моменты доходит аж до 3-6 сек! Графики(zabbix) показывают iowait 5%\48% (средн.\макс. значения за месяц). В связи с этим я пришел к выводу, что причина и узкое место на сервере это I\O и из-за него такие лаги с rabbitMQ.

Потом я начал грешить на raid1. Ядренный процесс jbd (в моем случае это jbd2/md2-8) который отвечает за журнализацию ext4, постоянно, без остановки, чем то занят, iotop этого процесса постоянно скачет 5..10...99%! Хотя, по сути, должен отрабатывать каждые 15 сек., ибо в параметрах монтирования raid1 я указал commit=15. То есть каждые 15 сек. должен записывать в журнал. Ещё я заметил, что если отключить zabbix-server, то процесс этот запускается как положено через каждые 15 сек. Почему так?

Посмотрел iotop ещё раз, нет других процессов с большим %, ну mysql промелькивает 0.05%, nginx и прочие потроха.

Что пробовал (три раза запуск)

dd if=/dev/zero of=/tmp/output.img bs=16k count=30k
838860800 bytes (839 MB, 800 MiB) copied, 1.05715 s, 794 MB/s
838860800 bytes (839 MB, 800 MiB) copied, 0.442051 s, 1.9 GB/s
838860800 bytes (839 MB, 800 MiB) copied, 9.11132 s, 92.1 MB/s

Скорость записи скачет в 10 раз...какие-то блокировки ужасные

А вот если больший count поставить 70k, но уже rabbitMQ идет с задержкой и все потроха валятся из-за timeout и процессу jbd2/md2-8 сносит голову до 99% I\O
dd if=/dev/zero of=/tmp/output.img bs=16k count=70k
1174405120 bytes (1.2 GB, 1.1 GiB) copied, 6.25328 s, 188 MB/s


cat /etc/fstab
/dev/md3        /       ext4    commit=15,errors=remount-ro,relatime    0       1
/dev/md2        /boot   ext4    errors=remount-ro,relatime      0       1
/dev/sda4       swap    swap    defaults        0       0
/dev/sdb4       swap    swap    defaults        0       0
proc            /proc   proc    defaults                0       0
sysfs           /sys    sysfs   defaults                0       0
tmpfs           /dev/shm        tmpfs   defaults        0       0
devpts          /dev/pts        devpts  defaults        0       0

mount | grep "/dev/md3"
/dev/md3 on / type ext4 (rw,relatime,errors=remount-ro,commit=15,data=ordered) 

cat /proc/mdstat
md2 : active raid1 sdb2[1] sda2[0]
      523200 blocks [2/2] [UU]

md3 : active raid1 sdb3[1] sda3[0]
      1952461760 blocks [2/2] [UU]
      bitmap: 15/15 pages [60KB], 65536KB chunk

unused devices: <none>


df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       1.8T  1.4T  312G  83% /
devtmpfs        7.9G     0  7.9G   0% /dev
tmpfs           7.9G     0  7.9G   0% /dev/shm
tmpfs           7.9G  772M  7.1G  10% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/md2        487M   23M  435M   5% /boot
overlay         1.8T  1.4T  312G  83% /var/lib/docker/overlay2/29d42b8f520821ac9c12919a53c6eb7f4b1cf25c63cd03fe7f2a3341e547a42f/merged
shm              64M     0   64M   0% /var/lib/docker/containers/c1d856a4dce5aeb0d0e67e4bdb1e2123a1a2fbecfbb4c4fdfe91b1d75bf0b8a8/mounts/shm




Выхлоп iotop
Total DISK READ :      68.09 K/s | Total DISK WRITE :       9.27 M/s
Actual DISK READ:      68.09 K/s | Actual DISK WRITE:     594.86 K/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
  313 be/3 root        0.00 B/s  426.44 K/s  0.00 % 73.82 % [jbd2/md3-8]
13682 be/4 bib       0.00 B/s  215.01 K/s  0.00 % 43.27 % nginx: worker process
15381 be/4 mysql       0.00 B/s    3.58 K/s  0.00 %  0.61 % mysqld
15396 be/4 mysql       0.00 B/s    3.58 K/s  0.00 %  0.02 % mysqld
15401 be/4 mysql       0.00 B/s    7.17 K/s  0.00 %  0.02 % mysqld
13678 be/4 bib       0.00 B/s  630.70 K/s  0.00 %  0.00 % nginx: worker process
13679 be/4 bib       0.00 B/s    3.58 K/s  0.00 %  0.00 % nginx: worker process
13680 be/4 bib       0.00 B/s  207.84 K/s  0.00 %  0.00 % nginx: worker process
13681 be/4 bib      64.50 K/s  731.03 K/s  0.00 %  0.00 % nginx: worker process
13684 be/4 bib       0.00 B/s  111.09 K/s  0.00 %  0.00 % nginx: worker process
13685 be/4 bib       0.00 B/s  723.87 K/s  0.00 %  0.00 % nginx: worker process
11076 be/4 root        0.00 B/s    3.58 K/s  0.00 %  0.00 % python /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf


На сервере два HDD HGST HUS726020AL по 1.8TB, RAID1

Куда копать в первую очередь? Отчего так просто загрузить IO у сервера? Диск поменять не предлагать

UDP! Не redis, а rabbitMQ )) Перепутал

★★★★

Последнее исправление: gobot (всего исправлений: 3)

Ответ на: комментарий от adn

Нет никаких ошибок. Только отчеты типа

[129564409.209104] md: data-check of RAID array md3
[129564409.209187] md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
[129564409.209273] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for data-check.
[129564409.209409] md: using 128k window, over a total of 1952461760k.
[129586930.629168] md: md3: data-check done.



Что говорит smartctl ?

/dev/sda
smartctl --all /dev/sda
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.9.87-xxxx-std-ipv6-64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Device Model:     HGST HUS726020ALA610
Serial Number:    N4GBMS6Y
LU WWN Device Id: 5 000cca 245c54a37
Firmware Version: A5GNT920
User Capacity:    2,000,398,934,016 bytes [2.00 TB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    7200 rpm
Form Factor:      3.5 inches
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   ACS-2, ATA8-ACS T13/1699-D revision 4
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Mon Dec  5 07:01:30 2022 MSK
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x84) Offline data collection activity
                                        was suspended by an interrupting command from host.
                                        Auto Offline Data Collection: Enabled.
Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever
                                        been run.
Total time to complete Offline
data collection:                (  113) seconds.
Offline data collection
capabilities:                    (0x5b) SMART execute Offline immediate.
                                        Auto Offline data collection on/off support.
                                        Suspend Offline collection upon new
                                        command.
                                        Offline surface scan supported.
                                        Self-test supported.
                                        No Conveyance Self-test supported.
                                        Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                                        power-saving mode.
                                        Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                                        General Purpose Logging supported.
Short self-test routine
recommended polling time:        (   2) minutes.
Extended self-test routine
recommended polling time:        ( 288) minutes.
SCT capabilities:              (0x003d) SCT Status supported.
                                        SCT Error Recovery Control supported.
                                        SCT Feature Control supported.
                                        SCT Data Table supported.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   016    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   136   136   054    Pre-fail  Offline      -       108
  3 Spin_Up_Time            0x0007   100   100   024    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0012   100   100   000    Old_age   Always       -       9
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   128   128   020    Pre-fail  Offline      -       18
  9 Power_On_Hours          0x0012   095   095   000    Old_age   Always       -       40961
 10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       9
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       42
193 Load_Cycle_Count        0x0012   100   100   000    Old_age   Always       -       42
194 Temperature_Celsius     0x0002   193   193   000    Old_age   Always       -       31 (Min/Max 24/53)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       0

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%         2         -
# 2  Short offline       Completed without error       00%         1         -
# 3  Short offline       Completed without error       00%         1         -

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.


gobot ★★★★
() автор топика

у меня raid1 (mb3) состоит из 2 разделов sdb3 и sda3. Смотрю iostat, хочу понять какой iops(это же tps колонка?) идет. Вижу что sda и sdb в момент времени имеют 11tps, а md3 4. Почему так? В raid1 ведь пишется на оба диска одновременно. Как вообще вычисляется tps в raid? Как jght

iostat 1

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              11.00         0.00        44.00          0         44
sdb              11.00         0.00        44.00          0         44
md3               4.00         0.00        16.00          0         16
md2               0.00         0.00         0.00          0          0

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              13.00         0.00      1584.00          0       1584
sdb              13.00         0.00      1584.00          0       1584
md3             391.00         0.00      1564.00          0       1564
md2               0.00         0.00         0.00          0          0

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              66.00         0.00     22096.00          0      22096
sdb              66.00         0.00     22096.00          0      22096
md3              60.00         0.00     22068.00          0      22068
md2               0.00         0.00         0.00          0          0

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

Откройте fdisk ом /dev/md3 , нажмите p , выхлоп скопируйте сюда, и нажмите q

/dev/root что за странное устройство смонитированное в /
по идее в / должно монтироваться /dev/md3
/dev/root это алиас какой то?

Vlad-76 ★★★★
()

Ядренный процесс jbd (в моем случае это jbd2/md2-8) который отвечает за журнализацию ext4, постоянно, без остановки, чем то занят, iotop этого процесса постоянно скачет 5..10...99%! Хотя, по сути, должен отрабатывать каждые 15 сек., ибо в параметрах монтирования raid1 я указал commit=15.

Гм. С чего ты так решил?

Запись на диск начинается либо при явном sync, либо при превышении лимитов dirty cache (vm.dirty_background_bytes/vm.dirty_bytes или vm.dirty_background_ratio/vm.dirty_ratio) или превышении времени vm.dirty_writeback_centisecs/vm.dirtytime_expire_seconds

Адские задержки начинаются при превышении vm.dirty_bytes или vm.dirty_ratio.

jbd может писать на диск неприрывно если его об этом просят, т.е. процессы записывают файлы и синхронизируют их его через fsync()/fdatasync().

какой io-планировщик используется? cat /sys/block/sd*/queue/scheduler

Что у тебя показывает sysctl vm 2>/dev/zero | grep dirty

vel ★★★★★
()
Ответ на: комментарий от gobot

Так это наверное rabbitmq. Это же сервер очередей. Помещение сообщения в очередь видимо приводит к коммиту транзакции. Коммит транзакции приводит к fsync. Частый fsync приводит к высокому writes per second и tps. Посмотри strace ом какие системные вызовы делает процесс rabbitmq.

iliyap ★★★★★
()

А персистентность на диск очередей в rabbitmq для этого применения обязательна? Может быть отключить и станет лучше кролику?

cobold ★★★★★
()
7 января 2023 г.