Сервер раздаёт несколько торрентов с помощью transmission, также на сервере настроена Samba. Включаем просмотр видео из samba-папки с помощью xbmc на другом компьютере.

Параллельно с этим, начинаем раздавать на третьем компьютере торренты из этой samba-папки (суммарная скорость раздачи всех торрентов на всех компах — 3 МБ/с). Сразу же воспроизведение видео прекращается. Проблема!

Первое, что нужно проверить — это load average. Смотреть его можно командами uptime или w . Для оценки загруженности достаточно первого параметра — он сообщает, сколько процессов находится в очереди к процессору. В первом приближении, эта цифра должна быть не больше количества ядер процессора (т.е. один процесс на каждое ядро). Это не жёсткое правило, но на него стоит обратить внимание.

Далее, можно узнать более подробную информацию командой top. Она покажет список процессов, занятую память и прочее, а также статистику по задачам процессов (3 строчка):

%Cpu(s): 0,0 us, 4,3 sy, 0,0 ni, 64,5 id, 31,2 wa, 0,0 hi, 0,0 si, 0,0 st

Здесь подробно расписано, на что процессор тратит время. Что означает каждый пункт?

us — user — пользовательские процессы (с исходным приоритетом);

sy — system — системные (ядерные) процессы;

ni — nice — процессы с изменённым приоритетом;

id — idle — бездействие;

wa — I/O_wait — ожидание ввода-вывода;

hi — hardware interrupt — обработка аппаратных прерываний (сообщения от мыши, от других устройств);

si — software interrupt — обработка программных прерываний (интерфейсы BIOS, системные вызовы);

st — steal — для виртуальных машин, означает «время, украденное хостом у виртуалки».

nice — дословно, «учтивость» перед другими процессами. Чем она выше, тем более учтиво процесс относится к другим, отдаёт им больше времени, и тем ниже его приоритет. Ещё раз: выше nice — ниже приоритет, и наоборот.

Можно залезть ещё глубже, разбив статистику по ядрам процессора нажатием клавиши «1».

%Cpu0 : 0,0 us, 6,4 sy, 0,0 ni, 0,0 id, 91,5 wa, 0,0 hi, 2,1 si, 0,0 st
%Cpu1 : 0,0 us, 0,0 sy, 0,0 ni,100,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
%Cpu2 : 0,0 us, 1,0 sy, 0,0 ni, 96,1 id, 2,9 wa, 0,0 hi, 0,0 si, 0,0 st
%Cpu3 : 1,0 us, 1,9 sy, 0,0 ni, 97,1 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st

О чём говорят высокие показатели (конечно, кроме id = idle)?

us+sy>70: именно эти значения отражают реальную вычислительную работу процессора, так что если они высоки — нужно менять процессор на более мощный.

wa>30: дисковая подсистема не справляется с нагрузкой. Возможно несколько вариантов:

  • жёсткий диск близок к смерти, либо можно попробовать использовать SSD.
  • слишком частый сброс большого объёма данных в своп — нужно увеличить оперативку.
  • какой-то процесс очень часто пишет что-то в лог.

Дальше нужно решать проблему с помощью iotop/iostat.

st>10 (на виртуальной машине): нужно переходить на более высокий тарифный план хостера.

Можно увеличить скорость обновления таблицы top: нажать d 1 [Enter] Shift-W.

В немного более красивом виде информацию предоставляет утилита htop (sudo apt-get htop), а ещё в ней можно менять приоритет (nice) процессов.

Важное замечание: иногда некоторые процессы linux переходят в состояние зомби — они завершили свою работу, но не уведомили об этом операционную систему. Тем самым они остались в таблице процессов, и занимают место. Их невозможно убить ничем кроме как рестартом системы (неожиданная вещь для линукса, правда?). Их количество отображает утилита top.

В моём случае, я узнал что проблема в диске. Торрент-клиенты эксплуатируют диск в рваном режиме: крайне непоследовательное чтение коротких кусков файлов. А ведь раздача идёт на скорости 3 МБайт/с, и видимо это предел для диска в режиме случайного чтения.
Как решение именно дисковой проблемы, можно создать виртуальный диск в памяти, но в любом случае его объёма не хватит для торрентов.
Поэтому лучше сделать так: уменьшить приоритет торрент-качалки до низких значений, а приоритет самбы поднять. Правда, у меня есть ещё и торрент-качалка, раздающая с самба-директории — но значит, не судьба.

Источник