Основы оптимизации Linux
По умолчанию ядро Linux оптимизировано для общих случаев использования. Поэтому большинство серверов Linux работают достаточно хорошо без какой-либо дальнейшей оптимизации. Однако если вы действительно хотите добиться максимальной производительности вашего сервера, вам необходимо применить некоторые навыки оптимизации системы. В этой статье вы узнаете, как это сделать.
Внося изменения в настройки Linux, вы можете значительно повысить производительность вашего сервера. Однако существует и риск. Также относительно легко настроить сервер таким образом, что производительность будет ухудшаться, а не улучшаться. Именно поэтому настройка производительности Linux должна выполняться экспертами, которые знают, что они делают.
Чтобы научиться настраивать производительность Linux, нужно знать намного больше, чем в этой статье. Тем не менее эта статья даст вам фундамент для дальнейшего изучения и применения оптимизации системы.
Для начала, настройка производительности требует много исследований. Например на основе этой статьи: top, iostat, vmstat и pidstat. Мониторим Linux. После проведения исследования вы можете спокойно приступить к оптимизации производительности.
Но сначала вы должны усвоить некоторые правила:
Таблица 1
Помимо файлов конфигурации, упомянутых в таблице 1, существуют также каталоги идентификаторов процессов (PID). Каждый процесс, работающий в Linux, имеет уникальный PID, и каждый из этих процессов создает свою собственную среду. Хотя это нелегко для чтения, эта среда доступна через каталоги PID.
В этих каталогах вы найдете, например, файл состояния, содержащий подробную информацию об использовании памяти, или файл окружения, который дает обзор всех переменных среды, которые используются процессом.
В листинге 1 показано, как может выглядеть содержимое файла состояния. Обратите внимание, что он содержит информацию, которую нельзя легко показать каким-либо другим способом, включая количество переключений контекста, которые были сделаны в отношении этого конкретного процесса.
Листинг 1
Таблица 2
Чтобы оптимизировать систему Linux, каталог /proc/sys содержит много параметров.
Есть два способа, чтобы изменить параметр:
После того, как вы вы убедились, что всё работает, вы можете сделать его постоянным, как описано в следующем разделе. В упражнении 1 вы узнаете, как временно изменить значение имени хоста, поддерживаемое ядром. Обратите внимание, что это всего лишь пример того, как изменить системное имя хоста, которое в настоящее время известно ядру Linux. Для внесения постоянных изменений в имя хоста используйте команду hostnamectl.
Упражнение 1. Временное изменение настроек в /proc
В этом упражнении вы временно измените настройку в /proc.
Во время загрузки служба systemd-sysctl запускается. Этот сервис читает конфигурацию sysctl. Эта конфигурация предлагается через различные файлы:
Итак, файл /proc/sys/vm/swappiness упоминается как vm.swappiness в sysctl.
Чтобы получить представление обо всех доступных настройках, вы можете использовать команду sysctl -a. Эта команда выводит список всех доступных настроек. Она предлагает простой способ найти конкретные параметры, особенно когда совместно используется с grep или совместно с less. После того, как вы нашли переменную, которую хотите установить, вам нужно поместить ее в файл конфигурации sysctl.
В листинге 3 показан частичный вывод команды sysctl -a.
Листинг 3
Расположение по умолчанию для всех настраиваемых параметров - это каталог /etc/sysctl.d. В этом каталоге вы должны создать файл с именем, оканчивающимся на .conf. В этом файле вы поместите переменную со значением, которое вы хотите установить для настройки. В строках, в которые вы их помещаете, вы сначала вводите имя настраиваемого элемента, затем пробел, затем знак =, затем еще один пробел и предполагаемое значение.
Вы не должны помещать содержимое в файл /etc/sysctl.conf или в каталог /usr/lib/sysctl.d; оба места считаются управляемыми системой.
Команда sysctl также предлагает несколько полезных опций. В таблице 3 представлен их обзор, а в упражнении 2 вы узнаете, как применять некоторые параметры.
Таблица 3
Упражнение 2. Изменение параметров ядра через sysctl
В этом упражнении вы узнаете, как применять параметры sysctl. Цель этого упражнения - не научить вас оптимизировать ваш сервер, а просто чтобы показать вам, как работает sysctl.
Понимание основ оптимизации системы
Ядро Linux предлагает сложную структуру, позволяющую вашему серверу вести себя наилучшим образом. По умолчанию он настроен на среднюю рабочую нагрузку. На многих серверах средняя рабочая нагрузка просто недостаточно хороша, поэтому доступны некоторые расширенные возможности настройки Linux.Внося изменения в настройки Linux, вы можете значительно повысить производительность вашего сервера. Однако существует и риск. Также относительно легко настроить сервер таким образом, что производительность будет ухудшаться, а не улучшаться. Именно поэтому настройка производительности Linux должна выполняться экспертами, которые знают, что они делают.
Чтобы научиться настраивать производительность Linux, нужно знать намного больше, чем в этой статье. Тем не менее эта статья даст вам фундамент для дальнейшего изучения и применения оптимизации системы.
Для начала, настройка производительности требует много исследований. Например на основе этой статьи: top, iostat, vmstat и pidstat. Мониторим Linux. После проведения исследования вы можете спокойно приступить к оптимизации производительности.
Но сначала вы должны усвоить некоторые правила:
- Никогда не пробуйте настройки на рабочем сервере. Используйте тестовую систему для испытаний и к рабочим серверам применяйте только те параметры, которые вы проверили.
- Меняйте одну настройку за раз и тщательно её проверяйте. Хорошее тестирование обычно означает повторение одного и того же теста три раза. Если после выполнения трех тестов вы убедились, что производительность улучшилась, значит можно применить на рабочем сервере.
- Составьте план перед началом. Слишком большая оптимизация производительности происходит без хорошего плана, в результате чего администратор на самом деле не работает над повышением производительности, а меняет случайные настройки, надеясь, что из этого получится что-то хорошее.
Понимание файловой системы /proc
Ключ к настройке производительности Linux находится в файловой системе /proc. Эта файловая система предлагает интерфейс к ядру Linux и может использоваться для анализа текущего состояния ядра и внесения изменений в различные настройки. Далее вы узнаете, как получить информацию об оптимизации производительности из файловой системы /proc и как оптимизировать ее производительность.Многие, если не все системные утилиты (включая lscpu, uname, top, ps, lsmod и многие другие) получают информацию, которую они показывают, из файловой системы /proc. Так что, если вам не очень нравится чтение из файловой системы /proc, просто убедитесь, что вы нашли подходящий инструмент.
Использование / proc для анализа производительности
Файловая система /proc содержит много файлов, которые предоставляют информацию о текущем состоянии производительности сервера Linux. Большинство утилит для анализа производительности получают информацию из файловой системы /proc. В таблице 1 представлен обзор важных, связанных с производительностью файлы.Таблица 1
meminfo | Подробная информация об использовании памяти. |
cmdline | Строка, которая используется для загрузки текущего образа ядра. Полезно знать, какие параметры загрузки были указаны в приглашении загрузчика GRUB 2, что позволяет идентифицировать параметры загрузки, которые были введены вручную. |
cpuinfo | Подробная информация о процессоре и его функциях. |
partitions | Перечисляет все устройства хранения и разделы на этих устройствах хранения. |
sysrq-trigger | Потенциально опасный файл, который можно использовать для отправки низкоуровневых инструкций ядру. |
modules | Перечисляет все модули ядра, которые в данный момент загружены. |
kcore | Указывает на текущее состояние системной памяти. |
Помимо файлов конфигурации, упомянутых в таблице 1, существуют также каталоги идентификаторов процессов (PID). Каждый процесс, работающий в Linux, имеет уникальный PID, и каждый из этих процессов создает свою собственную среду. Хотя это нелегко для чтения, эта среда доступна через каталоги PID.
В этих каталогах вы найдете, например, файл состояния, содержащий подробную информацию об использовании памяти, или файл окружения, который дает обзор всех переменных среды, которые используются процессом.
В листинге 1 показано, как может выглядеть содержимое файла состояния. Обратите внимание, что он содержит информацию, которую нельзя легко показать каким-либо другим способом, включая количество переключений контекста, которые были сделаны в отношении этого конкретного процесса.
Листинг 1
Использование /proc/sys для настройки производительности Linux
Ключом к оптимизации производительности Linux является каталог /proc/sys. В этом каталоге вы найдете настраиваемые элементы, разделенные на разные категории. В Таблице 2 содержится обзор этих элементов.Таблица 2
Элемент | Объяснение |
abi | Это двоичный интерфейс приложения. Он используется для предоставления интерфейса приложениям, в частности приложениям с открытым исходным кодом. Вы, вероятно, никогда не будете использовать это для оптимизации. |
crypto | Криптографический интерфейс, который обеспечивает криптографию для определенных служб, таких как IPsec и dm-crypt. Используется редко для оптимизации производительности Linux. |
debug | Когда в ядре Linux включены функции отладки, этот каталог содержит настраиваемые параметры. Не часто используется для обычных задач системного администратора. |
dev | Содержит несколько настраиваемых параметров, связанных с устройствами. |
fs | Интерфейс к виртуальной файловой системе. Содержит несколько полезных настроек, таких как file-max, в которых указывается максимальное количество файлов, которые могут быть открыты одновременно. |
kernel | Интерфейс ядра. Содержит много полезных настроек. |
net | Сетевой интерфейс. Содержит много полезных настроек. |
sunrpc | Интерфейс sunrpc. Содержит несколько полезных настроек, связанных с общим доступом к файлам NFS. |
vm | Интерфейс виртуальной памяти. Содержит много полезных настроек. |
Чтобы оптимизировать систему Linux, каталог /proc/sys содержит много параметров.
Есть два способа, чтобы изменить параметр:
- Используйте echo для записи нового параметра в настраиваемый файл ядра.
- Используйте sysctl -w, чтобы записать параметр в настраиваемое ядро.
После того, как вы вы убедились, что всё работает, вы можете сделать его постоянным, как описано в следующем разделе. В упражнении 1 вы узнаете, как временно изменить значение имени хоста, поддерживаемое ядром. Обратите внимание, что это всего лишь пример того, как изменить системное имя хоста, которое в настоящее время известно ядру Linux. Для внесения постоянных изменений в имя хоста используйте команду hostnamectl.
Упражнение 1. Временное изменение настроек в /proc
В этом упражнении вы временно измените настройку в /proc.
- Войдите под root и выполните uname -a. Команда покажет текущее имя хоста.
- Введите cat /proc/sys/kernel/hostname. Это показывает то же имя хоста.
- Введите echo something.example.com > /proc/sys/kernel/hostname. Эта команда запишет новое имя хоста в настройки ядра, не делая его постоянным.
- Введите uname -a. Вы увидите, что имя хоста изменилось.
- Перезагрузите сервер, чтобы вернуться к настройкам по умолчанию.
Использование sysctl для автоматизации параметров оптимизации системы
Чтобы постоянно изменять настройки ядра, вам нужно записать их в sysctl. Sysctl - это служба, которая считывает несколько файлов конфигурации, которые применяются во время загрузки системы. В этом разделе вы узнаете, как работать с sysctl.Во время загрузки служба systemd-sysctl запускается. Этот сервис читает конфигурацию sysctl. Эта конфигурация предлагается через различные файлы:
- Файл /etc/sysctl.conf - это файл конфигурации по умолчанию. На RHEL или CentOS этот файл больше не должен использоваться.
- Каталог /usr/lib/sysctl.d используется для параметров оптимизации по умолчанию. Содержимое этого каталога предназначено для управления через RPM, а не вручную, поэтому не вносите в него никаких изменений.
- Каталог /etc/sysctl.d используется для пользовательских параметров. Если у вас есть какие-либо изменения, это нужно сделать здесь.
Итак, файл /proc/sys/vm/swappiness упоминается как vm.swappiness в sysctl.
Чтобы получить представление обо всех доступных настройках, вы можете использовать команду sysctl -a. Эта команда выводит список всех доступных настроек. Она предлагает простой способ найти конкретные параметры, особенно когда совместно используется с grep или совместно с less. После того, как вы нашли переменную, которую хотите установить, вам нужно поместить ее в файл конфигурации sysctl.
В листинге 3 показан частичный вывод команды sysctl -a.
Листинг 3
Расположение по умолчанию для всех настраиваемых параметров - это каталог /etc/sysctl.d. В этом каталоге вы должны создать файл с именем, оканчивающимся на .conf. В этом файле вы поместите переменную со значением, которое вы хотите установить для настройки. В строках, в которые вы их помещаете, вы сначала вводите имя настраиваемого элемента, затем пробел, затем знак =, затем еще один пробел и предполагаемое значение.
Вы не должны помещать содержимое в файл /etc/sysctl.conf или в каталог /usr/lib/sysctl.d; оба места считаются управляемыми системой.
Команда sysctl также предлагает несколько полезных опций. В таблице 3 представлен их обзор, а в упражнении 2 вы узнаете, как применять некоторые параметры.
Таблица 3
Опция | Объяснение |
-a | Показывает все настройки. |
--system | Показывает все параметры, которые были изменены с помощью sysctl. |
-p <filename> | Загружает значения из указанного <filename>. Используйте это для активации изменений, которые вы только что внесли в файл sysctl. Если имя файла не указано, используется файл etc/sysctl.conf. |
-w | Записывает новое значение параметра. Это имеет тот же эффект, что и использование echo для записи значения в переменную. |
-x | Ничего не делает. Эта информация не поможет вам; Я просто хотел поделиться, что у этой команды есть определенный параметр, который ничего не делает. |
Упражнение 2. Изменение параметров ядра через sysctl
В этом упражнении вы узнаете, как применять параметры sysctl. Цель этого упражнения - не научить вас оптимизировать ваш сервер, а просто чтобы показать вам, как работает sysctl.
- Выполните ping localhost. Вы должны получить ответ от localhost.
- Выполните sysctl -a | grep icmp. Команда покажет все настраиваемые параметры sysctl и отфильтрует параметры, в имени которых есть icmp. Команда выведет параметр net.ipv4.icmp_echo_ignore_all, который можно использовать для игнорирования всех запросов ping.
- Выполните echo 1> /proc/sys/net/ipv4/icmp_echo_ignore_all. Это временно устанавит значение настраиваемого параметра равным 1, что указывает вашему серверу не реагировать на пинг-пакеты.
- Выполните ping localhost, чтобы убедиться, что ping больше не работает.
- Выполните sysctl -w "net.ipv4.icmp_echo_ignore_all = 0" и снова пропингуйте localhost. Теперь должно работать снова.
- Перезагрузитесь и проверьте. Вы заметите, что настройка не была постоянной.
- С помощью редактора создайте файл /etc/sysctl.d/ping.conf и добавьте в файл строку: net.ipv4.icmp_echo_ignore_all = 1.
- Перезагрузите компьютер еще раз и проверьте, можете ли вы пропинговать свой сервер. Вы заметите, что это больше не работает.
Параметр | Для чего используется |
net.ipv4.ip_forward | Установите 1, чтобы включить пересылку пакетов между сетевыми интерфейсами. |
net.ipv4.icmp_echo_ignore_all | Установите 1, чтобы отключить все пинги. |
net.ipv4.icmp_echo_ignore_broadcasts | Установите 1, чтобы отключить широковещательный пинг. |
vm.swappiness | Используйте значение от 0 до 100, чтобы увеличить готовность вашего сервера к свопингу данных. |
kernel.hostname | Установите имя хоста системы. |