Вы не задавали вопрос. Я полагаю, вы хотели спросить «почему моя система работает медленно» или «как я могу сделать это быстрее», оба из которых слишком расплывчаты, чтобы отвечать за них. Я собираюсь частично ответить на менее амбициозный вопрос: «Как я могу исследовать мое узкое место в производительности».
Видимо, когда ваша система не отвечает, на диске много активности. Мой ответ основан на этом.
RAM и своп
Независимо от того, насколько быстро у вас есть диск, обмен будет медленным. Вы ничего не можете сделать, чтобы сделать обмен заметно быстрее. Если ваша система меняет местами, единственное реальное лечение - использовать меньше памяти или покупать больше памяти.
Интерпретация выходных free
Вы можете получить снимок того, сколько памяти использует ваша система, с помощью команды free
. Это показывает что-то вроде этого:
total used free shared buffers cached
Mem: 3538356 3057180 481176 0 8588 280412
-/+ buffers/cache: 2768180 770176
Swap: 5124692 1563140 3561552
Mem
, total
цифра (здесь 3538356, что составляет около 3,3 ГБ) - это объем оперативной памяти, доступной процессам (за исключением памяти, используемой видеокартой или ядром).
(Люди с 64-битным ядром могут пропустить этот параграф.) Из-за сложностей в архитектуре x86 ядро может получить доступ к ОЗУ несколькими способами. Сегодня на практике вы можете выбрать один из двух режимов: режим PAE , который позволяет ядру использовать до 64 ГБ ОЗУ; и режим без PAE, который позволяет ядру использовать только около 3 ГБ. Причина, по которой существует режим без PAE, заключается в том, что у режима PAE есть накладные расходы на использование памяти, что стоит затрат только при наличии более 3 ГБ ОЗУ. Обеспокоенные пользователи Ubuntu должны прочитать страницу PAE в вики Ubuntu.
Mem
, free
рисунок показывает, сколько памяти не используется ни для чего. Обычно он достаточно мал (например, 10–50 МБ в системе с несколькими ГБ ОЗУ), если только ОЗУ не используется недостаточно или система только что загрузилась. Здесь эта цифра довольно высока (450 МБ), возможно, потому, что приложение, использующее столько памяти, было недавно закрыто. Не волнуйся, скоро он заполнится.
Строка с заголовком -/+ buffers/cache
показывает, сколько памяти используется процессами, а не дисковым кешем. Здесь мы видим, что для кэша доступно всего около 730 МБ. Это всего лишь 20% оперативной памяти, это не так много. Наличие большого объема оперативной памяти, используемой для дискового кэша, важно для обеспечения отзывчивости системы.
Последняя строка указывает, сколько свопа используется. Это нормально, когда используется своп, даже если оперативная память не заполнена. Linux копирует память для превентивной замены, когда диск простаивает, в случае, если память понадобится позднее, когда диск может не простаивать.
Linux часто перемещает память процесса для подкачки, чтобы освободить место для дискового кэша. Это нормальное поведение системы, и попытка снизить его может привести к замедлению работы системы. Существует настраиваемый параметр, на который Linux должен поменяться местами, который называется vm.swapiness
; Если вы экспериментируете с этим, обязательно попробуйте увеличить свопинг, а также уменьшить его.
В нашем примере free
вывода мы видим, что около 40% памяти процесса находится в разделе подкачки. Повреждает ли это производительность, зависит от того, для чего используется эта память. Если это одно большое приложение, которое в данный момент не используется, это не повредит. Если часть активно используемых процессов поменяна местами, система может быть очень не отвечает.
Так что использует всю эту память?
Анализировать использование памяти сложно. Для каждого процесса вы можете измерить, сколько адресного пространства он выделяет; Вы можете (попытаться) измерить, сколько памяти он активно использует в данный момент времени; Вы должны отслеживать память с файловой поддержкой (например, код, загруженный из исполняемого файла процесса и библиотек) и память без файловой поддержки (стек и куча процесса). И, конечно, значительный объем памяти распределяется между процессами, поэтому не имеет особого смысла говорить о том, сколько памяти использует данный процесс.
Вы можете получить представление об использовании памяти с помощью инструментов командной строки, таких как top
и htop
, или с любым количеством графических системных мониторов и измерителей производительности. Для htop
, если вы заинтересованы в использовании памяти, включите опции «скрыть потоки ядра» и «скрыть потоки пользовательского пространства» в параметрах настройки / отображения.
При отображении top
или htop
соответствующие столбцы - это VIRT
и RES
. VIRT
указывает, сколько адресного пространства выделил процесс, включая разделяемую и выделенную, но неиспользуемую память; не беспокойся об этом. RES
указывает, сколько оперативной памяти (т.е. не считая подкачки) процесс использует в настоящее время.
Один из способов убедиться, что ваша система активно переключается, - это смотреть top
дисплей во время работы. Если вы видите, что показатель RES
растет для некоторых процессов, а для других - уменьшается, это означает, что последние процессы меняются местами, чтобы освободить место для первых. Если это случается часто, вам нужно больше оперативной памяти, чтобы чувствовать себя комфортно с вашими моделями использования.
Скорость диска
Из прошлого опыта вы подозреваете, что ваш диск не использует самый быстрый доступный режим доступа. Но Linux это не Windows (что особенно в старые времена часто требовало сторонних драйверов). Установка дистрибутива Linux почти всегда дает вам самые быстрые режимы доступа для всех периферийных устройств, которые, как известно, не вызывают сбои или потерю данных. (Видеодрайверы являются чем-то вроде исключения.)
Вы можете подтвердить использование режима DMA вашей системой с помощью hdparm -i
. Например, оба ваших диска показывают UDMA modes: … *udma6
, что означает, что они используют самый быстрый доступный режим. (Как правило, UDMA быстрее, чем DMA, быстрее, чем PIO; а для числовой части, чем выше, тем быстрее.)
Вы можете измерить сырую пропускную способность вашего диска с помощью hdparm -t
. Число само по себе не дает прямой информации о том, насколько отзывчивой будет ваша система, но может быть полезно сравнить скорость двух дисков или двух режимов доступа на одном диске.
Иногда BIOS вашего компьютера позволяет вам выбирать между различными режимами работы ваших дисков. Когда появились первые диски SATA, многие операционные системы (такие как Windows и Linux) не поставлялись с подходящими драйверами. Таким образом, в BIOS появилась возможность использовать режим эмуляции PATA, который в принципе был медленнее, но более совместим. В то время диски были недостаточно быстрыми для насыщения SATA-соединений, но в наши дни это возможно. Совместимая настройка часто называется «IDE» или «ATAPI», в то время как более быстрая настройка обычно называется «AHCI».
Ошибки диска
Одним из возможных источников замедления, связанного с диском, является сбой диска, и система должна повторить попытку доступа к нему несколько раз. Иногда замедление является первым проявлением, а фактические ошибки в виде нечитаемых файлов появляются позже.
Чтобы узнать, так ли это, просмотрите журналы ядра, обычно в /var/log/kern.log
. Если вы видите строки, как
end_request: I/O error, dev sda, sector 123456789
ata3.00: error: { UNC }
убедитесь, что резервные копии обновлены, и немедленно замените диск. Обратите внимание, что приведенные выше строки являются только примерами, сообщения об ошибках очень разнообразны.
Вы можете получить отчет о состоянии вашего диска с помощью инструментов мониторинга SMART.