
Краткая справка: у меня есть 10-гигабитный файловый сервер с шестью SSD-дисками данных под управлением CentOS 8, и я изо всех сил пытаюсь заполнить линию. Все в порядке, если я ограничиваю пропускную способность до 5 или 6 Гбит/с. Вот несколько диаграмм из Cockpit, показывающих, что все хорошо (~850 одновременных пользователей, ограничение 5 Гбит/с).
К сожалению, когда я повышаю, пропускная способность колеблется гигантскими волнами. Обычно это признак переполненного диска (или карты SATA), и на Windows-боксах я решил это так:
- Откройте «Монитор ресурсов».
- Выберите вкладку «Диск».
- Следите за графиками «Длина очереди». Любой диск/рейд с длиной очереди стабильно выше 1 является узким местом. Обновите его или уменьшите нагрузку.
Теперь я вижу эти симптомы на сервере CentOS 8, но как мне определить виновника? Мои SATA SSD разделены на три программных массива RAID0, вот так:
# cat /proc/mdstat
Personalities : [raid0]
md2 : active raid0 sdg[1] sdf[0]
7813772288 blocks super 1.2 512k chunks
md0 : active raid0 sdb[0] sdc[1]
3906764800 blocks super 1.2 512k chunks
md1 : active raid0 sdd[0] sde[1]
4000532480 blocks super 1.2 512k chunks`
iostat
колеблется в широких пределах и обычно имеет высокий %iowait. Если я правильно понял, это указывает на то, что md0 (sdb+sdc) имеет наибольшую нагрузку. Но является ли это узким местом? В конце концов, %util далеко не 100.
# iostat -xm 5
avg-cpu: %user %nice %system %iowait %steal %idle
7.85 0.00 35.18 50.02 0.00 6.96
Device r/s w/s rMB/s wMB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 106.20 57.20 0.89 0.22 3.20 0.00 2.93 0.00 136.87 216.02 26.82 8.56 3.99 0.92 14.96
sde 551.20 0.00 153.80 0.00 65.80 0.00 10.66 0.00 6.75 0.00 3.44 285.73 0.00 0.64 35.52
sdd 571.60 0.00 153.77 0.00 45.80 0.00 7.42 0.00 6.45 0.00 3.40 275.48 0.00 0.63 35.98
sdc 486.60 0.00 208.93 0.00 305.40 0.00 38.56 0.00 20.60 0.00 9.78 439.67 0.00 1.01 49.10
sdb 518.60 0.00 214.49 0.00 291.60 0.00 35.99 0.00 81.25 0.00 41.88 423.52 0.00 0.92 47.88
sdf 567.40 0.00 178.34 0.00 133.60 0.00 19.06 0.00 17.55 0.00 9.68 321.86 0.00 0.28 16.08
sdg 572.00 0.00 178.55 0.00 133.20 0.00 18.89 0.00 17.63 0.00 9.81 319.64 0.00 0.28 16.00
dm-0 5.80 0.80 0.42 0.00 0.00 0.00 0.00 0.00 519.90 844.75 3.69 74.62 4.00 1.21 0.80
dm-1 103.20 61.40 0.40 0.24 0.00 0.00 0.00 0.00 112.66 359.15 33.68 4.00 4.00 0.96 15.86
md1 1235.20 0.00 438.93 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 363.88 0.00 0.00 0.00
md0 1652.60 0.00 603.88 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 374.18 0.00 0.00 0.00
md2 1422.60 0.00 530.31 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 381.72 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
5.14 0.00 22.00 72.86 0.00 0.00
Device r/s w/s rMB/s wMB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 34.00 37.40 0.15 0.15 5.20 0.00 13.27 0.00 934.56 871.59 64.34 4.61 4.15 0.94 6.74
sde 130.80 0.00 36.14 0.00 15.00 0.00 10.29 0.00 5.31 0.00 0.63 282.97 0.00 0.66 8.64
sdd 132.20 0.00 36.35 0.00 14.40 0.00 9.82 0.00 5.15 0.00 0.61 281.57 0.00 0.65 8.62
sdc 271.00 0.00 118.27 0.00 176.80 0.00 39.48 0.00 9.52 0.00 2.44 446.91 0.00 1.01 27.44
sdb 321.20 0.00 116.97 0.00 143.80 0.00 30.92 0.00 12.91 0.00 3.99 372.90 0.00 0.91 29.18
sdf 340.20 0.00 103.83 0.00 71.80 0.00 17.43 0.00 12.17 0.00 3.97 312.54 0.00 0.29 9.90
sdg 349.20 0.00 104.06 0.00 66.60 0.00 16.02 0.00 11.77 0.00 3.94 305.14 0.00 0.29 10.04
dm-0 0.00 0.80 0.00 0.01 0.00 0.00 0.00 0.00 0.00 1661.50 1.71 0.00 12.00 1.25 0.10
dm-1 38.80 42.20 0.15 0.16 0.00 0.00 0.00 0.00 936.60 2801.86 154.58 4.00 4.00 1.10 8.88
md1 292.60 0.00 111.79 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 391.22 0.00 0.00 0.00
md0 951.80 0.00 382.39 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 411.40 0.00 0.00 0.00
md2 844.80 0.00 333.06 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 403.71 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Между тем производительность сервера ужасна. Каждое нажатие клавиши через SSH регистрируется за секунды, рабочий стол GNOME практически не отвечает, а пользователи сообщают о разрывах соединений. Я бы показал диаграммы Cockpit, но время входа истекает. Ограничение пропускной способности работает прекрасно, но я хотел бы разблокировать остальное. Так как же мне определить узкое место(а)? Буду рад любым предложениям!
решение1
Виновником оказался sda, магнитный диск CentOS. Большинство улик указывали на него. Как кто-то прокомментировал (и, похоже, удалил), время ожидания на sda, dm-0 и dm-1 выглядит подозрительно. Конечно, dm-0 (корень) и dm-1 (подкачка) также находятся на sda. Наблюдая за работой iotop, узкое место, похоже, было вызвано быстрой вспышкой активности Gnome, за которой последовал kswapd (подкачка), засоряющий работу. Закрытие Gnome с помощью "init 3" дало определенное улучшение, но нет никакого способа, чтобы такая мощная машина была парализована бездействующим экраном входа в систему. SMART также сообщает о 8000+ поврежденных секторах на sda. Я предполагаю, что многие из них находятся в пространстве подкачки, из-за чего подкачки парализуют систему.
Одна мысль была переместить swap на другой диск, но замена sda показалась мне более практичной. Я начал клонирование диска с помощью CloneZilla, но он оценивал это в 3 часа, а новая установка была бы быстрее, поэтому я пошел на это. Теперь сервер работает отлично! Вот снимок экрана, показывающий более 1300 файлов, транслируемых одновременно на скорости 8 Гбит/с, хорошо и стабильно. Проблема решена!