Я использую Ubuntu 15.04 с MD RAID1, LVM и LXC сверху их как веб-сервер. У меня есть среднее число нормальной нагрузки приблизительно 1-2, и все работает хорошо, пока я не выполняю крупной операции IO. Странная вещь состоит в том, что я делаю эти операции на неиспользуемых дисках. Так, например, sdc и sdd находятся в RAID1, используемой веб-сервером, и я делаю dd если =/dev/zero =/dev/sdb или просто выполняю du. После нескольких секунд средние переходы загрузки к 10 и больше и система стали почти неприменимыми. Nmon показывает, что все диски стали перегруженными, и если я не остановлю операцию, перегрузка продолжит расти.
Я присоединяю снимки экрана nmon. Перегрузка с dd, если =/dev/zero =/dev/sdb.
Вывод uname:
... 3.19.0-39-универсальный # SMP с 44 Ubuntu вторник 1 декабря 14:39:05 GNU/Linux UTC 2015 x86_64 x86_64 x86_64
ОБНОВЛЕНИЕ:
Я изменил настройку дисков, заменили системные диски большим количеством устойчивого HGST. Псевдонимы системного диска были изменены после системной перезагрузки.
Вывод lsblk:
NAME FSTYPE SIZE MOUNTPOINT
sda 1,8T
├─sda1 1M
├─sda2 linux_raid_member 50G
│ └─md0 LVM2_member 50G
│ ├─system-swap swap 10G [SWAP]
│ └─system-root ext4 40G /
└─sda3 linux_raid_member 881,5G
└─md1 LVM2_member 881,4G
├─lxc-hosting ext3 450G
├─lxc-ns1-real 1G
│ ├─lxc-ns1 ext3 1G
│ └─lxc-ns1--snap6 ext3 1G
└─lxc-ns1--snap6-cow 1G
└─lxc-ns1--snap6 ext3 1G
sdb 1,8T
├─sdb1 1M
├─sdb2 linux_raid_member 50G
│ └─md0 LVM2_member 50G
│ ├─system-swap swap 10G [SWAP]
│ └─system-root ext4 40G /
├─sdb3 linux_raid_member 881,5G
│ └─md1 LVM2_member 881,4G
│ ├─lxc-hosting ext3 450G
│ ├─lxc-ns1-real 1G
│ │ ├─lxc-ns1 ext3 1G
│ │ └─lxc-ns1--snap6 ext3 1G
│ └─lxc-ns1--snap6-cow 1G
│ └─lxc-ns1--snap6 ext3 1G
└─sdb4 ext4 931,5G
sdc linux_raid_member 931,5G
└─md2 LVM2_member 931,4G
└─reserve-backups ext4 931,4G /var/backups/mounted
sdd linux_raid_member 931,5G
└─md2 LVM2_member 931,4G
└─reserve-backups ext4 931,4G /var/backups/mounted
Вывод lsscsi:
[0:0:0:0] disk ATA HGST HUS726020AL W517 /dev/sda
[1:0:0:0] disk ATA HGST HUS726020AL W517 /dev/sdb
[2:0:0:0] disk ATA WDC WD1002FBYS-0 0C06 /dev/sdc
[3:0:0:0] disk ATA WDC WD1002FBYS-0 0C06 /dev/sdd
Я выполнил новый тест с объемом плазмы (см. Загрузку с объемом плазмы </dev/zero>/dev/md2). Теперь ситуация лучше. Операция на дисках sdc и sdd все еще влияет на производительность sda, но среднее число загрузки сохраняет 6-7, и система не перегружается. И я думаю теперь, что я понимаю то, что может быть причиной проблемы. С тех пор sda и sdb (как части RAID) используемый для веб-сервера, у них есть постоянный поток параллельных запросов. Жесткие диски имеют к constanly, двигают их головами, таким образом, уменьшающими производительность IO, но система, кэш IO (я верю Linux, использует всю свободную память с этой целью) помогает минимизировать количество доступов к диску. Когда я начинаю интенсивно использовать другие диски, кэш becames заполненный новыми данными, именно поэтому это увеличивает нагрузку на главные диски. Если я буду прав, то увеличивание суммы RAM поможет. Теперь это - только 16 ГБ.
Скорее всего, диски - все на том же контроллере, и контроллер является узким местом. То есть существует предел пропускной способности суммарного итога io ко всем дискам, поэтому когда Вы начинаете использовать тот в большой степени, там менее доступно другим.
Вы могли попробовать другой дисковый планировщик. Проверьте для наблюдения то, что используется в настоящее время на дисках (т.е. для sda):
кошка/sys/block/sda/queue/scheduler
Вы могли бы видеть:
noop упреждающий крайний срок [cfq]
Затем Вы могли решить, какой планировщик использовать для каждого диска, в зависимости от того, какой тип они (ssd, HDD) или какой контроллер они идут. Просто установите его на другой планировщик путем ввода:
эхо {ИМЯ ПЛАНИРОВЩИКА}>/sys/block/{ИМЯ УСТРОЙСТВА}/queue/scheduler
Таким образом, если бы Вы хотите использовать крайний срок для sda, это было бы:
крайний срок эха>/sys/block/sda/queue/scheduler
Вы могли бы найти, что крайний срок использования на сервере даст Вам лучшую скорость отклика в то время как под большой нагрузкой.
Если Вы хотите изменить планировщик для ВСЕХ дисков:
Редактирование/etc/default/grub:
нано sudo/etc/default/grub
Необходимо добавить elevator=deadline. Измените GRUB_CMDLINE_LINUX_DEFAULT = "тихий всплеск" к
GRUB_CMDLINE_LINUX_DEFAULT = "подавляют шумы всплеска elevator=deadline"
Затем выполненный
обновление-grub2 sudo
и перезапуск.