Linux оптимизация sysctl desktop 2012

Обновлено: 02.07.2024

Linux дает много преимуществ своим пользователям. Например, его можно считать свободным от вирусов, поскольку их существует очень небольшое количество. Для многих очень важно, что никто, кроме вас, не будет контролировать то что вы делаете в системе. Свободное программное обеспечение звучит очень привлекательно, в свете последних событий, когда в прошлом году мы узнали что большие компании вроде Microsoft и Apple следят за своими пользователями.

Свободное программное обеспечение становится очень актуальным если вы не хотите платить за использование самой новой версии операционной системы.

Многие помнят, что кликнув двойным щелчком по ярлыку в Windows нужно достаточно долго подождать, пока запустится программа. Здесь у Linux тоже преимущество - он намного быстрее. И это касается всех, кто использует компьютер с новеньким восьмиядреным процессором, и тех у кого старый ноутбук прошлого века. Если вы хотите еще больше скорости в Linux, следуйте инструкциям из этой статьи. Дальше мы рассмотрим как ускорить Linux. Мы будем ориентироваться в первую очередь на Ubuntu, но все эти советы могут быть применены также к другим дистрибутивам.

Используйте VirtualBox

Некоторые из приведенных здесь советов включают модификацию системных файлов от имени root пользователя. При таком способе редактирования всегда есть шанс случайно что-нибудь сломать и сделать ваш компьютер неработоспособным. Поэтому лучше сделайте резервную копию всех файлов, с которыми вы будете работать, чтобы потом при необходимости восстановить старые настройки.

Еще лучше поэкспериментировать сначала с виртуальной машиной. Таким образом, вы можете делать все что захотите, а потом просто откатиться к последнему рабочему снимку.

Как ускорить Linux

1. Ускорение загрузчика Grub

Если у вас установлено две операционные системы, то вы, наверное, знакомы с этим меню загрузки. Но то что вы, скорее всего, не заметили, это обратный отсчет в самом низу, под областью ввода. Это время, на протяжении которого система будет ждать, перед тем как начать загружать дистрибутив по умолчанию.

Например, в Ubuntu - это 10 секунд. Обычно вы можете нажать Enter, но если вы находитесь далеко от машины, более благоразумным будет поставить интервал покороче, например, 3 секунды. Этого будет вполне достаточно чтобы выбрать ОС.

Чтобы ускорить загрузку Linux откройте файл /etc/default/grub от имени root. Измените значение GRUB_TIMEOUT = 10, на 3.

sudo vi /etc/default/grub

А затем обновите конфигурацию Grub. Вот:

sudo grub2-mkconfig -o /boot/grub/grub.cfg

2. Отключите сервисы

Во время загрузки системы, есть огромная разница между загрузкой ядра и готовностью к работе рабочего стола. Дело в том, что система загружает очень больше количество сервисов, и не все из них вам нужны. В большинстве современных дистрибутивов используется система инициализации systemd. У этой системы инициализации есть специальная утилита, позволяющая проанализировать какие сервисы сколько времени заняли во время загрузки. Это systemd-analyze:

Кроме того, вы можете посмотреть все сервисы списком, добавленные в автозагрузку:

systemctl list-unit-files --state=enabled

Определить какие сервисы, нужны, а какие нет, вы можете просто выполнив поиск в интернете. Во многих дистрибутивах есть графические приложения для управления сервисами, но, в Ubuntu для этого придется воспользоваться консольной утилитой systemctl, это поможет сильно ускорить работу linux. Чтобы отключить сервис выполните:

sudo systemctl disable имя_сервиса

3. Отключите приложения

Приложения, запускаемые по умолчанию после старта оболочки тоже могут сильно замедлять запуск системы. В Gnome есть утилита Приложения запускаемые по умолчанию, которую можно открыть из главного меню:

Удалите оттуда все приложения, которые вы не используете. Для отключения автозагрузки можно просто снять галочку напротив программы.

4. Ускорение файлового менеджера

Файловый менеджер в Gnome по умолчанию при открытии каждой папки выполняет быстрое сканирование всех файлов, чтобы показать миниатюры и дополнительную информацию. В принципе это быстрое сканирование, но в папке с большим количеством файлов, этот процесс будет совсем небыстрым.

Чтобы перестать тратить процессорное время на эту задачу кликните по иконке бутерброда, затем выберите пункт Параметры:

В открывшемся меню перейдите на вкладку Поиск и предпросмотр файлов, в разделе Миниатюры измените параметр из Всегда или Только локальные файлы на Никогда.

Вы увидите, что теперь Nautilus работает намного быстрее.

5. Используйте легкое окружение


Для слабого оборудования принято выбирать более легкие дистрибутивы. В них меньше ненужных программ, а самое главное - используется более легкое окружение рабочего стола. Вы можете установить легкое окружение или даже легковесный оконный менеджер в свою систему. Если вы используете тяжелые окружения вроде KDE или Gnome, попробуйте что-либо более простое. Это даст значительный прирост производительности.

Самая важная задача рабочего окружения - управлять запущенными графическими программами, и давать вам достаточно контроля над ними. Но такие окружения могут выполнять намного больше функций чем вам нужно. Вы можете попробовать XFCE, LXDE или какой либо оконный менеджер. Они ещё более лековесны и быстры. К самым популярным можно отнести Openbox, Fluxbox, i3wm, awesome и другие.

Кроме того, вы можете использовать легкий оконный менеджер вместо стандартного оконного менеджера окружения. Для этого, например, после установки для запуска оконного менеджера openbox наберите:

Через несколько секунд вы увидите, что стиль окон изменился. Это и есть Openbox. с помощью контекстного меню вы можете перемещать окна, закреплять или устанавливать поверх других. Но больше ничего другого. Ваши окна теперь двигаются быстрее.

6. Ускорьте KDE

Если вы используете окружение рабочего стола KDE, то у вас есть отличный шанс получить ускорение работы linux. Хотя Plasma работает довольно быстро если у вас современная машина, но это сложный стек программного обеспечения. Каждый компонент KDE может быть настроен для более эффективной его работы. Мы уже рассматривали как ускорить KDE, читайте об этом подробно в отдельной статье.

7. Заблокируйте рекламу

При просмотре веб-страниц вы заметите что сайт загружается не сразу, он ждет пока будут загружены все компоненты страницы, в том числе и рекламные объявления. Flash анимация очень раздражает при большом количестве блоков на странице, поэтому вы можете ее заблокировать (не нужно этого делать на нашем сайте, мы белые и пушистые).

Для большинства популярных браузеров - Chromium, Firefox, Opera есть расширение AdGuard или AdBlock, которое отлично справляется с этой функцией. Программа использует базу данных чтобы заблокировать наиболее популярные источники объявлений.

8. Используйте сочетания клавиш

Кому-то это может показаться очевидным. Работа только с клавиатурой намного быстрее, чем движение от мышки к клавиатуре и обратно. Много функций можно сделать с помощью клавиатуры. Например, стандартные команды копирования и вставки из меню правка.

Стоит создать сочетания клавиш для всех часто используемых действий. Например, переключение между приложениями и рабочими столами. Вы можете пойти еще дальше и использовать в качестве текстовых редакторов vim и emacs.

Интерфейс запуска приложений открываемый по Alt+F2 может сделать намного больше. Например, вы можете набрать Выключить для выключения или Заблокировать для блокировки экрана. Вы можете выполнять простые расчеты начав выражение со знака =. Там есть еще много подобных функций в зависимости от плагинов. Наберите знак ? и нажмите стрелку вправо чтобы узнать подробнее. В качестве текстового редактора можно использовать Vim, также для многих сред разработки есть расширения, обеспечивающие поддержку сочетаний клавиш из Vim.

9. Пропатчите ядро

Если вам нужна максимальная производительность программного обеспечения, то множество исправлений можно внести в ядро. Оптимизация ядра Linux может дать отличный эффект. Вы можете оптимизировать ядро самостоятельно, но есть и более легкий путь. Вы можете использовать ядро, скомпилированное Con Koliva, оно включает огромное количество патчей производительности. Патчсет ядра называется -ck и он был собран с упором на производительность.

Чтобы его установить, вам нужно скачать исходные тексты ядра, той версии на которую рассчитаны эти патчи. Затем скачайте сам патч и выполните команду в папке с исходниками ядра:

patch -p1 < patch-5.*-ck1

Теперь соберите ядро в соответствии с инструкциями из вашего дистрибутива. Это проще сказать чем сделать, но в интернете есть очень много инструкций, в том числе на нашем сайте - собираем ядро Linux.

10. Разгон видеокарты

Не нужно использовать BIOS, для видеокарт Nvidia была создана утилита с помощью которой можно выполнить разгон видеокарты. Но чтобы включить поддержку разгона вам надо добавить одну строчку в файл /etc/X11/xorg.conf. В современных дистрибутивах такого файла обычно нет, но его можно создать выполнив:

После того как файл /etc/X11/xorg.conf будет создан откройте его в текстовом редакторе с правами root, найдите секцию Device который описывается ваша графическая карта и добавьте в конец секции для регулирования оборотов кулера:

Option "Coolbits" "5"

Или для разгона:

Option "Coolbits" "8"

Затем перезапустите Х сервер. Утилиту можно установить с помощью из FlatHub. В самой программе вы можете создать профиль разгона для видеокарты увеличив частоту памяти и графического ядра, а также регулировать обороты кулера.

Каждый раз когда вы меняете параметры, изменяется тепловыделение. Убедитесь что температура остается в разумных пределах. Как только настроите все параметры, добавьте утилиту в автозагрузку, чтобы она загружала параметры при старте системы.

Есть ещё один способ увеличить производительность видеокарты. Утилита Nvidia XSettings на вкладке PowerOptimizer позволяет не только менять частоту графического ядра, но и выбирать профиль производительности. Вы можете включить профиль Prefer maximum performance:

11. Разгон оборудования

Разгон и различные трюки с увеличением параметров выше рекомендуемых скоростей и температур может повредить ваши данные и привести к поломке вашего оборудования и это очень хорошее ускорение linux. Но многие компоненты сейчас разработаны с учетом больших нагрузок, чем их стандартная конфигурация. Этот запас оставляет много места для экспериментов.

Многие материнские платы включают в себя пункты по умолчанию, для повышения скорости системы, без необходимости больших знаний в области компьютера.

Вы можете настроить все это в своем BIOS. Для доступа к нему используйте клавиши F2 или Del. Возможно, вы найдете там опции для ускорения процессора, увеличения частоты оперативной памяти и т д. Но после разгона не забывайте протестировать стабильность процессора и следить за температурой с помощью консольной утилиты sensors или графической xsensors:

12. Отключите IPv6

Linux уже очень давно поддерживает протокол IPv6, но если вы его не используете, то его отключение может повысить быстродействие сети, таким образом, выполнив ускорение Linux при работе с сетью. Самый простой способ сделать это через NetworkManager.

Откройте настройки вашего подключения к сети, перейдите на вкладку IPv6 и выберите пункт Выключить:

Браузер Firefox тоже позволяет отключить ipv6. Просто наберите в адресной строке about:config и активируйте пункт network.dns.disableIPv6.

Кроме того, можно отключить IPv6 на уровне всего дистрибутива. На этом сайте уже есть статья об этом: Как отключить IPv6 в Ubuntu.

13. Статическая линковка

Многие программы подгружают для своей работы библиотеки динамически, во время работы программы. На это уходит не очень много времени, но если приложения большие и подгружают много библиотек, то статическая линковка может дать отличное ускорение Linux. Для этого используются утилиты preload и prelink.

Prelink преобразует исполняемые файлы таким образом, чтобы они загружали как можно меньше библиотек. Preload же следит за системой и держит в памяти часто используемые программы. После небольшой калибровки хорошо чувствуется оптимизация Linux. Сначала установите Prelink:

sudo apt install prelink

Затем запустим утилиту для обработки всех исполняемых файлов:

sudo prelink --all

Для периодичного запуска prelink, чтобы выполнялась оптимизация Linux для новых файлов, откройте файл /etc/default/prelink и замените строчку PRELINKING=unknown на yes:

sudo vi /etc/default/prelink

Далее установите Preload:

sudo apt install preload

Эту программу достаточно только установить, она не требует настройки после установки.

14. Используйте ZRAM

Если у вас недостаточно оперативной памяти, вы можете очень просто увеличить ее количество на 25, а то и 50% с помощью сжатия оперативной памяти zram. Это модуль ядра, который позволяет сжимать содержимое оперативной памяти на лету, таким образом вместимость ОЗУ остается увеличивается, а скорость остается прежней. Это даст хорошее ускорение работы Linux для старых компьютеров.

15. Уменьшите активность жесткого диска

Система очень активно пишет и читает файлы из каталога /tmp. Это каталог для временных файлов, и с ним могут одновременно работать большое количество программ. Будет лучше, если содержимое этого каталога будет находиться в оперативной памяти. Чтобы ускорить работу linux, таким образом, добавьте строчку в файл /etc/fstab:

sudo vi /etc/fstab

tmpfs /tmp tmpfs defaults,noexec,nosuid 0 0

Но сначала убедитесь не примонтирована ли уже папка tmp в оперативную память, выполнив команду mount. Во многих дистрибутивах эта оптимизация linux включена по умолчанию.

16. Настройте работу подкачки

Не все системы рационально используют пространство подкачки на жестком диске. По умолчанию значение vm.swappiness установлено 60:

Поэтому, если (100-60) 40% оперативной памяти занято, система начнет сбрасывать данные на жесткий диск. Это справедливо для систем с небольшим количеством ОЗУ, 1-2 Гб, но если у вас 16 Гб, то нагружать жесткий диск когда у вас занято только 4 Гб несерьезно. Чтобы это изменить выполните команду:

sudo sysctl -w vm.swappiness=10

Это значит начинать сбрасывать данные в Swap когда занято 90% памяти (100-10). Можно использовать и другие значения. При частом переполнении памяти это отличная оптимизация Linux.

Выводы

В этой статье мы разобрали достаточно много методов как ускорить Linux, но все же я думаю это далеко не все решения. Если вы знаете другие интересные варианты ускорения работы Linux, поделитесь с нами в комментариях.

В сети довольно много статей на тему ускорения работы ГНУ систем, начиная от самого Linux ядра, заканчивая разгоном железа. Но не всем они подойдут ввиду разнообразия:

  1. Семейств дистрибутивов;
  2. Окружений и ПО;
  3. Систем инициализации;
  4. Оборудования.

Встречается настройка ядра через /etc/default/grub, операции с монтированием носителей в /etc/fstab, советы по обращению с ФП, ОЗУ, ZRAM/ZSWAP/ZCACHE, оптимизации пользовательских окружений и ПО. Писать в про всё целиком . . . можно в отдельный справочник. Но ввиду озвученных выше причин, не все пригодятся, не факт, что будут работать, а эффект от иных может быть не заметен вовсе. Поэтому тут я собрал кое-какие варианты.

ПЕРЕД ПОДОБНЫМИ ДЕЙСТВИЯМИ НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ СОЗДАТЬ ТОЧКУ ВОССТАНОВЛЕНИЯ

Возможно, не стоит применять всё сразу, чтоб была возможность выявить возможные неполадки.

Поскольку большинство систем используют systemd, для них актуальны команды

kernel — время загрузки ядра,
userspace — время на загрузку всего остального

  • systemd-analyze blame — посмотреть какие именно службы загружаются и сколько времени на это требуется
  • systemd-analyze plot >graph.svf— команда создаст svf файл с графиком, откройте его в браузере.

Далее, стоит отключить ненужные службы, список сервисов и описание можно найти в сети, как и другие команды для systemd. Чтобы это сделать нужно ввести

sudo systemctl disable <имя_службы.service>

В сети есть статьи по оптимизации systemd и принадлежащих ей служб с описанием, но я не использую сие произведение, поэтому про него писать не стану. Вопрос использования служб индивидуальный.

Ускорение загрузки ядра Linux

Параметры загрузки ядра находятся в файле /etc/default/grub. Изменения нужно внести в значение строки GRUB_CMDLINE_LINUX_DEFAULT (значение в скобках, после знака = )

quiet - тихий вариант загрузки, выводит минимум информации

rootfstype=ext4 - в какую ФС отформатирован корень (в моём случае btrfs)

libahci.ignore_sss=1 - ускоряет загрузку жестких дисков

raid=noautodetect - отключение raid

selinux=0 - система контроля доступа, которая не нужна на домашнем ПК

plymouth.enable=0 - отключает заставку

lpj=0000000 - позволяет задать константу loops_per_jiffy, чтобы ядро её каждый раз не вычисляло. Значение индивидуально для каждого компьютера. Чтобы её узнать, нужно открыть ещё один терминал и там ввести «dmesg | grep 'lpj='». Полученное значение скопировать.

В итоге, строка будет иметь примерно такой вид:

GRUB_CMDLINE_LINUX_DEFAULT="quiet rootfstype=ext4 libahci.ignore_sss=1 raid=noautodetect selinux=0 plymouth.enable=0 lpj=12053560"

Для указания корневого раздела желательно не использовать UUID, быстрее будет, если написать прямо. Добавьте в тот же файл строчку:

GRUB_DISABLE_LINUX_UUID=true

После этой операции нужно обновить конфигурацию GRUB

sudo update-grub

Установка ПО

Preload — это демон, который считывает статистику часто используемых приложений, и хранит их в кэше, благодаря чему они быстрее запускаются

sudo apt-get install preload

Можно оставить настройки по умолчанию, в файле /var/lib/preload/preload.state информация о работе preload.

cycle — как часто preload будет получать от системы данные об используемых программ и библиотек.

halflife — как часто preload будет сбрасывать старую информацию.

minsize — ограничение на размер программы или библиотеки, которую preload будет обрабатывать.

Я у себя не нашел этой утилиты. Поэтому про её работу и настройку рекомендую почитать в сети, есть материалы

Prelink преобразовывает разделяемые библиотеки и выполняемые файлы таким образом, чтобы уменьшить количество требуемых перераспределений памяти при разрешении зависимостей и, таким образом, ускоряет запуск программ, позволяет прописать связи с библиотеками непосредственно в исполняемый файл, что ускорит запуск приложения. Выполняется это без перекомпиляции приложений.

sudo apt install prelink

В процессе работы копится всяческий мусор. Этот мусор стоит периодически чистить. Я сам постоянно использую Stacer и Bleachbit. Первая умеет много чего, а вторую программу считаю обязательной для любой ОС. Плюс использую команды для удаления зависимостей-сирот. Однако, всё же можно установить для очистки autoclean и autoremove.

sudo apt autoclean

sudo apt autoremove

Последним оставлю блок про оптимизации работ железа. Сюда стоит включить операции с SSD/HDD и ОЗУ, разгон ОЗУ/видеокарты, кастомные ядра, настройку работы ЦП и видеокарты. Для настройки работы nVidia утилита GWE и родная NVIDIA SERVER SETTING, которая устанавливается вместе с драйвером, для АМД — CoreCtrl, которая, к тому же, позволяет изменить режим работы процессора.

Для работы с SSD нужно выставить флаги в /etc/fstab

ssd, discard (Defaults - этот убираем) - для btrfs.

lazytime (Defaults, noatime - этот убираем) - для Ext4

Если вы уже выставили флаги discard в вашем Fstab, то включать TRIM по расписанию не надо!

На счет TRIM для SSD — довольно неоднозначная вещь. Встречал противоречивые мнения в сети: и что это утилита уже встроена в ядро, что она не работает по умолчанию должным образом, нужно прописывать самому в fstab. Ничего утверждать не буду. Прочитал на этот счет статью, что SSD сами справляются с уборкой мусора, надо всего-лишь держать там достаточно не размеченного пространства, порядка 10-15%. Собственно, на этом я и остановился.

Отключение защиты от уязвимостей в процессорах Intel

Spectre/Meltdown/Zombieload aka MDS (серьезно снижают производительность)

/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="nopti pti=off spectre_v2=off l1tf=off nospec_store_bypass_disable no_stf_barrier

Оптимизация дисковых операций

vm.dirty_bytes = 2097152

vm.dirty_background_bytes = 2097152

vm.vfs_cache_pressure = 50

Прошу обратить внимание на последнюю строку: этот параметр отвечает за кэширование объектов файловой системы в оперативную память. При значении 0, объекты не высвобождаются и так и остаются в оперативной памяти. Чем больше значение, тем чаще ядро будет проводить "зачистку" оперативной памяти. Поэтому если у вас оперативной памяти меньше 2 ГБ, то оставьте значение 50, дабы сократить число дисковых операций в разделе подкачки. Это также полезно в случае если у вас SSD. Но если у вас больше 2 ГБ оперативки, и обычный жёсткий диск, то выставьте значение этого параметра на 1000. Это позволит более агрессивно кэшировать дисковые операции, тем самым повысив быстродействие при достаточном количестве оперативной памяти. По умолчанию значение этого параметра равно 100.

По умолчанию ядро Linux оптимизировано для общих случаев использования. Поэтому большинство серверов Linux работают достаточно хорошо без какой-либо дальнейшей оптимизации. Однако если вы действительно хотите добиться максимальной производительности вашего сервера, вам необходимо применить некоторые навыки оптимизации системы. В этой статье вы узнаете, как это сделать.


Понимание основ оптимизации системы

Ядро Linux предлагает сложную структуру, позволяющую вашему серверу вести себя наилучшим образом. По умолчанию он настроен на среднюю рабочую нагрузку. На многих серверах средняя рабочая нагрузка просто недостаточно хороша, поэтому доступны некоторые расширенные возможности настройки Linux.

Внося изменения в настройки Linux, вы можете значительно повысить производительность вашего сервера. Однако существует и риск. Также относительно легко настроить сервер таким образом, что производительность будет ухудшаться, а не улучшаться. Именно поэтому настройка производительности Linux должна выполняться экспертами, которые знают, что они делают.

Чтобы научиться настраивать производительность Linux, нужно знать намного больше, чем в этой статье. Тем не менее эта статья даст вам фундамент для дальнейшего изучения и применения оптимизации системы.

Для начала, настройка производительности требует много исследований. Например на основе этой статьи: top, iostat, vmstat и pidstat. Мониторим Linux. После проведения исследования вы можете спокойно приступить к оптимизации производительности.

  1. Никогда не пробуйте настройки на рабочем сервере. Используйте тестовую систему для испытаний и к рабочим серверам применяйте только те параметры, которые вы проверили.
  2. Меняйте одну настройку за раз и тщательно её проверяйте. Хорошее тестирование обычно означает повторение одного и того же теста три раза. Если после выполнения трех тестов вы убедились, что производительность улучшилась, значит можно применить на рабочем сервере.
  3. Составьте план перед началом. Слишком большая оптимизация производительности происходит без хорошего плана, в результате чего администратор на самом деле не работает над повышением производительности, а меняет случайные настройки, надеясь, что из этого получится что-то хорошее.

Понимание файловой системы /proc

Ключ к настройке производительности Linux находится в файловой системе /proc. Эта файловая система предлагает интерфейс к ядру Linux и может использоваться для анализа текущего состояния ядра и внесения изменений в различные настройки. Далее вы узнаете, как получить информацию об оптимизации производительности из файловой системы /proc и как оптимизировать ее производительность. Многие, если не все системные утилиты (включая lscpu, uname, top, ps, lsmod и многие другие) получают информацию, которую они показывают, из файловой системы /proc. Так что, если вам не очень нравится чтение из файловой системы /proc, просто убедитесь, что вы нашли подходящий инструмент.

Использование / proc для анализа производительности

Файловая система /proc содержит много файлов, которые предоставляют информацию о текущем состоянии производительности сервера Linux. Большинство утилит для анализа производительности получают информацию из файловой системы /proc. В таблице 1 представлен обзор важных, связанных с производительностью файлы.

В этих каталогах вы найдете, например, файл состояния, содержащий подробную информацию об использовании памяти, или файл окружения, который дает обзор всех переменных среды, которые используются процессом.

В листинге 1 показано, как может выглядеть содержимое файла состояния. Обратите внимание, что он содержит информацию, которую нельзя легко показать каким-либо другим способом, включая количество переключений контекста, которые были сделаны в отношении этого конкретного процесса.

Использование /proc/sys для настройки производительности Linux

Ключом к оптимизации производительности Linux является каталог /proc/sys. В этом каталоге вы найдете настраиваемые элементы, разделенные на разные категории. В Таблице 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.

Использование sysctl для автоматизации параметров оптимизации системы

Чтобы постоянно изменять настройки ядра, вам нужно записать их в sysctl. 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.

Расположение по умолчанию для всех настраиваемых параметров - это каталог /etc/sysctl.d. В этом каталоге вы должны создать файл с именем, оканчивающимся на .conf. В этом файле вы поместите переменную со значением, которое вы хотите установить для настройки. В строках, в которые вы их помещаете, вы сначала вводите имя настраиваемого элемента, затем пробел, затем знак =, затем еще один пробел и предполагаемое значение.

Вы не должны помещать содержимое в файл /etc/sysctl.conf или в каталог /usr/lib/sysctl.d; оба места считаются управляемыми системой.

Команда sysctl также предлагает несколько полезных опций. В таблице 3 представлен их обзор, а в упражнении 2 вы узнаете, как применять некоторые параметры.

Тюнинг сетевого стека при помощи sysctl

Тема настройки ядра Linux «на лету», актуальная для многих системных администраторов, уже была освещена нами в статье «Что такое sysctl». В прошлой статье был описан сам принцип настройки ядра с помощью утилиты sysctl, приведены базовые команды и даны примеры некоторых наиболее распространенных параметров ядра Linux.

В этом материале хочется остановиться на конфигурации параметров сетевого стека на базе ОС Linux. Данная статья будет полезна системным администраторам при настройке высоконагруженных серверных ОС для «тяжелых» веб-проектов, а также поможет специалистам в сфере кибербезопасности построить оптимальную защиту от DDoS атак.

Все настройки сетевого стека необходимо внести в конфигурационный файл /etc/sysctl.conf. Также можно изменить опции любого сетевого параметра ядра «на лету» с помощью команды:

Например, ниже на скриншоте показано, как изменить параметр rp_filter:

Параметр rp_filter

Команда sysctl -p — выводит на экран текущие настройки сетевого параметра из файла /etc/sysctl.conf

Чтобы посмотреть значение одного сетевого параметра, который вас интересует в конкретный момент, нужно выполнить следующую команду, например для ip_forward:

Вывод конкретного параметра sysctl

Еще один способ для просмотра параметров ядра Linux — это использование директории /proc/sys и команды cat, о чем вы можете более подробно прочитать в статье на нашем сайте FREEhost.UA.

Для изменения параметров таким способом используется команда ниже (например, вместо 1 указываем нужное значение параметра, на которое мы хотим изменить опцию rp_filter):

Однако, не все параметры могут быть изменены таким образом, некоторые из них задаются сразу только при загрузке ядра и на лету не меняются.

Например, ниже показано, как вывести на экран (командой cat) конкретные сетевые параметры настроек ядра Ubuntu:

Работа с директорией /proc/sys и командой cat

В следующем разделе статьи мы приведем основные параметры сетевого стека ядра Linux, расскажем для каких целей они нужны и какие значения необходимо выставить для оптимальной работы TCP/IP и для обеспечения безопасной работы сервера.

Настройка сетевых параметров ядра Linux

Для начала выведем текущие настройки параметров ядра «по умолчанию» (раздел net). В результате, получим листинг на несколько листов, ниже на скриншоте показана только часть этого списка параметров:

Параметры ядра Linux группы net

Для тюнинга сетевого стека нам нужны не все эти сетевые параметры, а только наиболее важные.

1. Приступим к настройкам, и начнем с группы параметров, которые отвечают за работу протокола 3-го уровня модели OSI — ICMP (Internet Control Message Protocol), которые обычно применяются для «пингования» хоста, т.е. для выполнения команд ping и traceroute. В нашем случае, хакеры могут использовать ICMP-пакеты перенаправления, чтобы изменить таблицы маршрутизации. Поэтому, если вы не занимаетесь настройкой маршрутизатора, то для хоста необходимо выставить значение «0» для следующих параметров ядра Linux:

2. Следующим этапом настройки, идет выставление значения параметра tcp_max_orphans, в дословном переводе — это «осиротевшие» (orphan) соединения. Когда параметр достигнет своего порогового значения, такие соединения просто сбрасываются, и система выдает предупреждение. Советуем увеличить пороговое значение этого параметра (каждое «осиротевшее» соединение требует 64 Кбайт unswappable памяти). Правильная настройка данной опции поможет в защите от наиболее простых типов DDoS-атак.

3. Затем необходимо установить правильное значение для параметра tcp_fin_timeout, который обозначает время, в течении которого сокет может быть сохранен в состоянии FIN-WAIT-2, когда локальная сторона осуществила уже его закрытие. Данное соединение может быть вообще не закрыто партнером, поэтому необходимо его закрыть принудительно (когда «тайм-аут» истек). Значение «по умолчанию» для данного параметра — 60 секунд. Можно оставить значения «по умолчанию», но в случае, если вы эксплуатируете какие-то «тяжелые» веб-приложения, будет расходоваться много памяти на поддержку «мертвых соединений». Поэтому следует настроить данный параметр таким образом:

4. Сейчас настроим еще 3 важных параметра:

tcp_keepalive_time — показывает, как часто нужно проверять соединение, в том случае, если оно давно не используется (только для сокетов с флагом SO_KEEPALIVE), «по умолчанию» это значение равно 7200 секунд;

tcp_keepalive_intvl — обозначает интервал передачи проб, значение «по умолчанию» выставлено 75 сек;

tcp_keepalive_probes * tcp_keepalive_intvl = время, после истечения которого, соединение должно быть разорвано (если нет откликов), примерное значение — 11 минут;

tcp_keepalive_probes — показывает значение для передач проб keepalive, после достижения которого, соединение будет разорвано, «по умолчанию» выставлено 9.

Ниже приводятся рекомендуемые значения для данных 3-х параметров*:

*Примечание: для параметра tcp_keepalive_time рекомендованные значения от 60 до 300.

5. Следующий важный параметр, который требует нашего внимания — это
tcp_max_syn_backlog, показывающий максимум полуоткрытых соединений, т.е. запоминаемых запросов на соединение, для которых подключающийся клиент не дал подтверждение. Советуем увеличить заданное «по умолчанию» значение, особенно в случае возникновения перезагрузок сервера.

6. На этом шаге настроим параметр tcp_synack_retries, отвечающий за время удержания «полуоткрытых» соединений. Здесь задается количество попыток повтора передачи SYN-ACK пакетов для пассивных соединений TCP, которое не должно быть более 255. «По умолчанию» выставлено число 5 (соответствует 180 сек. времени, выделенного на эти попытки). Рекомендуется уменьшить это время до 9 сек, что будет соответствовать единице.

7. Параметр tcp_mem описан в виде векторной переменной, которая может принимать три значения, определяющие объем памяти, который может быть использован стеком TCP. Задается параметр в страницах памяти и зависит от архитектуры серверного оборудования, например, для i386 — это будет 4Кб (4096 байт). Три значения переменной (минимальное, значение в режиме нагрузки и максимальное) будут вычислены во время нагрузки. Если значение ниже минимального, то ОС вообще не выполняет никаких действий по управлению памятью, потребляемой сокетами TCP. Работа в режиме нагрузки: при достижении данного значения включается этот режим, и операционная система будет ограничивать выделение памяти. Причем, работа в таком режиме происходит до того момента времени, когда потребление памяти опять не снизится до минимума. И наконец, при достижении максимального значения этой переменной, TCP будет просто «терять» пакеты и соединения, пока объем используемой памяти не начнет снижаться. Для увеличения пропускной способности каналов рекомендуется оптимально настроить сразу 3 переменные tcp_mem, tcp_rmem и tcp_wmem. При настройке этих параметров советуем вам: для более мощных серверов выставлять большие параметры, а для серверов с более слабой конфигурацией — меньшие значения параметров. «По умолчанию» net.ipv4.tcp_mem настроен следующим образом*:

*Примечание: если ресурсы сервера позволяют выделить больше памяти под сеть.

В некоторых источниках рекомендуется выставить такие параметры*:

*Примечание: данные параметры рекомендованы для более слабых серверов.

8. Параметр tcp_wmem также, как и в предыдущем случае, является векторной переменной с 3-мя значениями в виде целых чисел (минимум, значение «по умолчанию», максимальное значение) и задает он размер для буфера передачи TCP сокета. При настройке данных параметров учитывайте конфигурацию и производительность ваших серверов, для более производительных серверов можно брать большие параметры. «По умолчанию», могут быть следующие параметры (можно оставить данные настройки):

Для более мощных серверов в некоторых источниках рекомендуется выставить следующие настройки:

9. Еще один подобный параметр в виде векторной переменной tcp_rmem задает размер приемного буфера сокетов TCP и также имеет 3 значения (минимальное значение, значение «по умолчанию», максимальное).

«По умолчанию», этот параметр может быть настроен таким образом:

Согласно рекомендациям из специализированных источников, можно настроить эту опцию так (для более производительных серверов):

10. Параметры rmem_default, wmem_default служат для описания значений «по умолчанию» для размера буферов приема и передачи данных соответственно, они не могут перекрывать значения переменных tcp_rmem и tcp_wmem (см. пункты выше).

Ниже рекомендованы оптимальные значения для этих параметров:

11. Параметры rmem_max, wmem_max служат для перекрытия максимальных значений переменных tcp_rmem и tcp_wmem (описания их см. выше), при увеличении нагрузки на сервер, рекомендованы следующие настройки:

12. Параметр tcp_orphan_retries задает величину, определяющую количество неудачных попыток, после достижения которой, происходит уничтожение соединения TCP, уже закрытого на локальной стороне. Закрытые соединения также расходуют ресурсы системы, поэтому советуем поставить 0, см. ниже:

15. Этот параметр (ip_conntrack_max) необходим для грамотной настройки механизма определения состояния соединений connection tracking (используется для iptables), в общем, эта опция важна для работы межсетевых экранов. Если выставить очень маленькие значения, то ядро будет отвергать входящие соединения, это можно будет увидеть затем системном логе.

16. Параметр tcp_timestamps предназначен для включения временных меток TCP (см. RFC 1323), для высокоскоростной сети и в условиях высоких нагрузок на сервера, советуем оставить ее включенной:

17. Опция tcp_sack необходима для разрешения выборочных подтверждений протокола TCP (Selective Acknowledgements — SACK, см. RFC 2883 и RFC 2883). Данная функция будет полезна на неустойчивых соединениях, где возможны обрывы связи. Включенный «по умолчанию» tcp_sack = 1, разрешает произвести передачу повторно лишь отдельных не подтвержденных фрагментов (а не всего окна TCP), работает совместно с опцией tcp_timestamps.

18. Параметр tcp_congestion_control позволяет осуществлять контроль за управлением нагрузкой в сетях TCP. Выбор настроек контроля за перегрузкой осуществляется при сборке ядра, доступны следующие режимы: reno (default), cubic:CUBIC-TCP, bic:BIC-TCP, htcp:Hamilton TCP, vegas:TCP Vegas, westwood (для сетей с потерями). Для работы сервера рекомендуется использовать htcp. Значение параметра «по умолчанию» — cubic (однако, есть ошибки в ядре Linux 2.6.18).

19. Эта настройка (tcp_no_metrics_save) не разрешает сохранение результатов изменений TCP соединения в кэше, в случае его закрытия. «По умолчанию», она в выключенном состоянии «0», но рекомендуем ее включить для увеличения производительности:

20. Параметр net.ipv4.route.flush актуален для ядра версии 2.4, если ваша ОС на этой версии ядра, то включите его:

21. Следующая группа параметров rp_filter предназначена для защиты от спуфинга (подмены адресов), отвечает за включение/выключение reverse path filter (т.е. проверку обратного адреса). Однако, если вы используете таблицы маршрутизации большой сложности, то перед настройкой этого параметра, рекомендуется изучить RFC 1812. В состоянии «по умолчанию» данные параметры выключены (значение «0»), рекомендуем включить в режим «1» (строгая проверка).

22. На этом этапе необходимо настроить запрет маршрутизации от источника (source routing), т.е. группу параметров accept_source_route; «по умолчанию», настройки находятся в состоянии «выключено» (ноль). Эта опция может предоставлять разрешение отправителю для определения пути пакета, который тот проходит по сети для достижения пункта назначения. Для сетевого инженера — это очень удобная опция, однако ей может воспользоваться и злоумышленник, поэтому рекомендуется ее оставить в выключенном состоянии.

23. Сейчас требуется настроить опцию ip_local_port_range, отвечающую за диапазон локальных портов, которые нам доступны для установки исходящих подключений. Параметр содержит 2 целых числа, где первое из них служит для задания нижней границы этого диапазона, а второе — устанавливает верхнюю границу. Значения выставляются в зависимости от объема ОЗУ сервера. Рекомендуемый диапазон для высоконагруженных проектов:

24. Параметр tcp_tw_reuse служит для разрешения повторного использования сокетов TIME-WAIT, когда это безопасно. Рекомендуется его включить:

25. Для разрешения или запрета масштабирования окна стека TCP необходима настройка параметра tcp_window_scaling (подробно см. RFC 1323). Фактически, разрешая динамическое изменение TCP-окна, можно увеличить размер канала, а также значительно снизить потери пропускной способности.

26. Для установления защиты от атак типа TIME_WAIT, стоит включить параметр tcp_rfc1337. Детально смысл этого параметра "TIME-WAIT Assassination Hazards in TCP" изложен в RFC 1337, а сама проблема заключена в том, что устаревшие дубликаты пакетов вносят помехи в новые соединения и тем самым порождают различные проблемы. Но, так как «по умолчанию» эта опция выключена (значение «0»), для сервера нам необходимо ее включить:

27. Чтобы запретить переадресацию пакетов для сервера, необходимо отключить параметр ip_forward. В случае включения ip_forward (значение «1»), операционная система будет вести себя «как маршрутизатор» и работать согласно RFC1812, т.е. перенаправлять пакеты в соответствии с таблицей маршрутизации.

28. Функция icmp_echo_ignore_broadcasts разрешает (или запрещает) отвечать на запросы ICMP ECHO, которые передаются широковещательными пакетами.

29. Полный запрет ответа на ICMP ECHO запросы (сервер не «пингуется») можно настроить таким образом:

31. Параметр somaxconn необходим для установления значения максимального количества открытых сокетов, которые ожидают соединения. Рекомендуемое значение параметра 15000 (используется для высоконагруженных систем), 65535 — максимальное значение данного параметра, используется в редких случаях:

32. Также необходимо настроить параметр netdev_max_backlog, который задает максимальное число пакетов, находящихся в очереди «на обработку», в случае, когда интерфейс получает пакеты гораздо быстрее, чем ядро их обрабатывает. Ниже приведено значение «по умолчанию» (рекомендуемое).

Пример готового файла с настройками

Для удобства мы свели все вышеописанные параметры в один список, который вам необходимо добавить в конец файла /etc/sysctl.conf и сохранить данный файл, затем перезагрузить ОС, чтобы настройки вступили в силу.

Пример файла sysctl.conf с настройками

Заключение

В этой части статьи мы дали практические рекомендации для системных администраторов, как провести тюнинг сетевого стека при помощи sysctl. Мы привели только основные переменные типа net для ядра Linux, оптимально настроив которые, системные инженеры смогут выстроить грамотную защиту своей сети от атак, а также эффективно эксплуатировать высоконагруженные сервера с «тяжелыми» веб-приложениями.

Читайте также: