Ключевые слова:proc, kernel, linux, tune, (найти похожие документы)
From: Валерий Абросимов <abrosimovATyandexDOTru>
Date: Mon, 28 Feb 2004 14:31:37 +0000 (UTC)
Subject: Использование /proc для изменения параметров Linux ядра
Оригинал: http://linuxshop.ru/linuxbegin/article338.html
Первоисточник: http://www-106.ibm.com/developerworks/linux/library/l-adfly.html?ca=dgr-lnxw17LinuxOnTheFly
Graham White <gwhite@uk.ibm.com>, 14.05.2003.
Перевод - Валерий Абросимов <abrosimovATyandexDOTru>
Содержание:
- Изменение параметров работающего ядра
- Внесение изменений
- Выполнение постоянных установок ядра
- Команды для настройки системы
- Заключение
- Источники
Файловая система /proc - это одна из величайших особенностей Linux и
эта статья проведет вас по наиболее полезным ее аспектам. С ней вы
сможете администрировать многие детали вашей системы без необходимости
перезагрузки машины.
Любой, кто администрировал систему коммерческой важности, знаком с
головной болью из-за падения системы. Одной из основных причин, по
которой компании запускают UNIX сервера, является их стабильность. При
аккуратном администрировании такой сервер не приходится перезапускать
в течение очень долгого времени. Более того, выполнение
администраторских задач, даже на уровне ядра, может выполняться на
лету, сохраняя стабильность сервера. Вам может понадобиться
перезапустить сервер при апгрейде оборудования или если кто-нибудь
оборвет питающий провод, однако большую часть администрирования можно
выполнять без этого. Эта статья включает подсказки и советы для
выполнения различных административных задач и изменения вашей системы
без перезагрузки.
Linux позволяет вносить изменения в систему и устанавливать различные
параметры во время работы многими способами. Есть две основные формы,
общие для всех систем Linux, которые заложены в ядро (вы можете найти
много информации о ядре Linux и загрузить исходный код ядра из
архивов; см. Источники), а также в том ядре, которое идет в
дистрибутиве. В этой статье рассматриваются оба способа.
Внимание: Эта статья написана для ядер серии 2.4-х. Некоторые опции и
возможности могут отличаться в ядрах других серий.
-------------------------------------
Изменение параметров работающего ядра
Linux имеет отличный способ изменять параметры ядра во время работы
системы и без необходимости перезагрузки. Это делается при помощи
виртуальной файловой системы /proc. Linux Gazette дает один из
простейших и легчайших объяснений /proc, которые я когда-либо видел.
(см. Источники.)
Вкратце, файловая система /proc дает вам возможность заглянуть в
работающее ядро, что может быть полезно для мониторинга
производительности, проверки системной информации, конфигурирования
системы и изменения конфигурации. Эта файловая система называется
виртуальной, потому что это в действительности не файловая система.
Это карта, создаваемая ядром и присоединяемая к вашей обычной файловой
системе, чтобы обеспечить доступ. Тот факт, что мы можем разными
способами внести изменения в ядро во время работы системы дает
системному администратору огромную мощь и гибкость при изменении
параметров.
Но может быть слишком много власти это плохо? Иногда. Если вы
собираетесь внести изменения в файловую систему /proc, вы должны быть
уверены, что вы знаете, что вы делаете и какой эффект произведут на
систему ваши действия. Это очень полезная техника, но одно неверное
движение может вызвать неожиданные последствия. Если вы не уверены и
новичок в таких делах, попрактикуйтесь на машине с меньшей важностью
для ваших дел.
---------------------
Как вносить изменения
Сначала, подумайте о том, как не вносить изменения в ядро. Есть две
отличных причины, почему вам не стоит просто перейти в /proc, открыть
файл в текстовом редакторе, сделать несколько изменений и сохранить
файл. Вот они:
* Целостность данных: Все эти файлы представляют работающую систему,
а поскольку ядро может внести изменения в эти файлы в любое время,
то если вы откроете файл и попытаетесь внести изменения в то
время, когда туда вносит изменения система, то вы можете сохранить
не то, что ожидает увидеть ядро.
* Виртуальные файлы: Все эти файлы в действительности не существуют.
Как же тогда синхронизировать сохраненные данные?
Ответом на это является не использование текстового редактора для
внесения изменений. Поэтому для внесения изменения в что-либо в
файловой системе /proc, вам следует использовать команду echo и
перенаправлять вывод команды в выбранный файл в /proc.
Например: echo "Your-New-Kernel-Value" > /proc/your/file
Аналогично, если вы хотите увидеть информацию из /proc, вам следует
использовать либо команду, которая предназначена для этого, либо
команду cat.
------------
Что изменять
Вам не нужно быть разработчиком ядра, чтобы пользоваться /proc, а
базовое понимание этой структуры отлично вам поможет. Вы можете найти,
что вам не нужно знать обо всем в /proc, до тех пор пока пользователь
не попросит вас увеличить производительность и вы должны будете
изучить куда вносить изменения. Файловая система /proc помогает
администратору в этом через свою структуру и атрибуты файлов.
Каждый файл в /proc имеет особый набор атрибутов и может принадлежать
конкретному пользователю по его ID. Сделано это очень аккуратно, так
что правильная работа обеспечена и администратору и пользователям.
Следующий список обобщает какие атрибуты могут быть у файлов:
* Read-only: Файл не может быть изменен ни каким пользователем;
используется для представления системной информации
* Root-write: Если файл может быть изменен, то изменения может
вносить только пользователь root
* Root-read: Некоторые файлы могут быть не читаемы для обычных
пользователей системы, только для root
* Other: Вы можете найти другие комбинации, чем перечисленные выше,
по различным причинам
В основном в /proc вы найдете файлы read-only за исключением
/proc/sys, которая содержит большинство параметров ядра и
предназначена для изменения во время работы системы. Как результат в
этой статье рассматривается в основном эта директория.
Последнее, что вам нужно знать о изменении файлов в /proc - это то,
что нужно записывать в эти файлы. Вы заметите, что некоторые из файлов
могут быть легко прочитаны человеком, а некоторые являются файлами
данных и могут быть прочитаны только при специальных утилит таких как
top, lspci,и free. Вы также заметите, что эти легко читаемые файлы
имеют два различных формата: некоторые являются бинарными ключами, а
другие содержат больше информации. Файлы с бинарными ключами содержат
только 0 (выключено) или 1 (включено) для некоторых функций ядра.
------------------
Внесение изменений
Детальная информация об использовании каждого файла в /proc выходит за
рамки этой статьи. За дополнительной информацией о любом файле /proc
стоит непосредственно обратиться в исходники ядра, которые содержат
очень хорошую документацию.
Следующие файлы в /proc наиболее полезны для системного
администратора. Они не являются исчерпывающими, но полезны для
повседневного использования.
/proc/scsi
/proc/scsi/scsi
Одна из наиболее полезных вещей, которые нужно знать администратору -
как добавить дисковое пространство, если у вас есть диски горячей
замены без перезагрузки системы. Без использования /proc, вы должны
вставить ваш диск, но затем вам придется перезагружать систему для
того, чтобы дать ей возможность распознать новый диск.
Вы можете позволить системе распознать новый диск с помощью следующей
команды:
echo "scsi add-single-device w x y z" > /proc/scsi/scsi
Чтобы эта команда работала правильно, вы должны указать параметры
значений w, x, y, и z следующим образом:
* w - это ID хост адаптера, где первый адаптер имеет ID ноль (0)
* x - это канал SCSI на хост адаптере, где первый канал ноль (0)
* y - это SCSI ID устройства
* z - это номер LUN, где первый LUN ноль (0)
Поскольку ваш диск добавлен в систему, вы можете монтировать любую
предварительно форматированную файловую систему или вы можете начать
форматирование ее, и так далее. Если вы не уверены в том, каким
устройством является установленный диск или вы хотите проверить
существующие партиции, вы можете использовать команду fdisk -l,
которая выведет необходимую информацию для вас. Команда для удаления
устройства из системы без перезагрузки:
echo "scsi remove-single-device w x y z" > /proc/scsi/scsi
Перед тем как ввести эту команду и удалить SCSI диск, убедитесь, что
вы отмонтировали файловые системы на этом диске.
/proc/sys/fs/
/proc/sys/fs/file-max
Здесь указывается максимальное количество заголовков файлов, которое
может быть одновременно открыто. Вам может понадобиться увеличить это
число если пользователи получают сообщение об ошибке потому что
достигнуто максимальное количество открытых файлов. Можно указать
любое числовое значение в этом файле. Default setting: 4096
/proc/sys/fs/file-nr
Этот файл связан с file-max и содержит три значения:
* Количество назначенных заголовков файлов
* Количество используемых заголовков
* Максимальное число заголовков
Этот файл только для чтения и только для предоставления информации.
/proc/sys/fs/inode-*
Любые файлы, начинающиеся с "inode" будут выполнять те же функции, что
и файлы с именем "file" выше, но выполняют эти операции относительно
inodes вместо заголовков файлов.
/proc/sys/fs/overflowuid и /proc/sys/fs/overflowgid
Эти файлы содержат User ID (UID) и Group ID (GID) для любой файловой
системы, которая поддерживает 16-bit user и group ID. Эти значения
могут быть изменены, но если вы действительно считаете это нужным, то
более простым будет изменить файл группы и пароля группы вместо этого.
Default Setting: 65534
/proc/sys/fs/super-max
Здесь указывается максимальное количество заголовков суперблоков.
Любая файловая система, которую вы монтируете должна использовать
суперблоки, так что вам, возможно, придется использовать его если вы
монтируете много файловых систем. Default setting: 256
/proc/sys/fs/super-nr
Здесь указано текущее значение количества суперблоков. Этот файл
только для чтения и используется для информации.
/proc/sys/kernel
/proc/sys/kernel/acct
Здесь содержатся три конфигурируемых значения, которые управляют
подсчетом процессов, основанном на свободном пространстве (в
процентах) файловой системы и ведет лог:
1. Если свободное пространство ниже значения в процентах, то процесс
подсчета останавливается
2. Если свободное пространство выше, то процес запускается
3. Частота в секундах, с которой проверяются предыдущие два значения
Чтобы изменить значения в этом файле вам следует использовать
разделенный список параметров. Default setting: 2 4 30
Эти значения остановят подсчет, если в файловой системе менее 2
процентов свободного пространства и начнет опять если появится 4 или
более процентов. Проверка производится каждые 30 секунд.
/proc/sys/kernel/ctrl-alt-del
Этот файл содержит двоичное значение, которое управляет тем, как
система реагирует на комбинацию ctrl+alt+delete. Возможны два
значения:
1. Ноль (0) значит, что ctrl+alt+delete принимается и отправляется
программе init. Это позволит выполнить системе мягкую остановку и
перезагрузку как если бы вы ввели команду shutdown.
2. Один (1) значит, что ctrl+alt+delete не принимается и никакого
чистого отключения не происходит как если бы вы просто выключили
питание.
Default setting: 0
/proc/sys/kernel/domainname
Здесь вы можете сконфигурировать ваше сетевое доменное имя. Значения
по умолчанию нет и оно может быть, а может и не быть установлено.
/proc/sys/kernel/hostname
Здесь вы можете сконфигурировать ваше сетевое имя хоста. Значения по
умолчанию нет и оно может быть, а может и не быть установлено.
/proc/sys/kernel/msgmax
Здесь определяется максимальный размер сообщения, которое может быть
отправлено от одного процесса другому. Сообщения между процессами в
памяти ядра не копируются на диск, так что если вы увеличите это
значение, то вы увеличите количество памяти используемой операционной
системой. Default setting: 8192
/proc/sys/kernel/msgmnb
Здесь указывается максимальное количество байт в одном сообщении.
Default setting: 16384
/proc/sys/kernel/msgmni
Здесь указывается максимальное количество идентификаторов сообщений в
очереди. Default setting: 16
/proc/sys/kernel/panic
Здесь установлено время в секундах, которое ядро будет ждать перед
перезагрузкой если произойдет "kernel panic." Установка в ноль (0)
секунд отключит возможность перезагрузки при kernel panic. Default
setting: 0
/proc/sys/kernel/printk
Здесь четыре числовых значения, которые определяют куда будут
отправлены сообщения логов, в зависимости от их важности. За более
подробной информацией о различных уровнях логов отправляейтесь в man
syslog(2). Четыре значения это:
1. Console Log Level: сообщения с высшим приоритетом, чем это будут
выведены на консоль
2. Default Message Log Level: сообщения без приоритета будут
напечатаны с этим приоритетом
3. Minimum Console Log Level: минимальное (высочайший приоритет)
значение, в которое может быть установлен Console Log Level
4. Default Console Log Level: значение по умолчанию для Console Log
Level
Default setting: 6 4 1 7
/proc/sys/kernel/shmall
Это общее количество разделяемой памяти (в байтах), которое может быть
использовано в системе. Default setting: 2097152
/proc/sys/kernel/shmax
Здесь указывается наибольший размер сегмента памяти (в байтах)
позволяемый ядром. Default setting: 33554432
/proc/sys/kernel/shmmni
Этот файл связан с максимальным числом сегментов раздляемой памяти
всей системы. Default setting: 4096
/proc/sys/kernel/sysrq
Активирует System Request Key, если не равно нулю. Default setting: 0
/proc/sys/kernel/threads-max
Максимальное число потоков, которое может быть использовано ядром.
Default setting: 2048
/proc/sys/net
/proc/sys/net/core/message_burst
Это время (в десятых долях секунды) необходимое для записи нового
предупреждения; другие предупреждения, полученные в это время будут
пропущены. Это используется для предотвращения атаки Denial of
Service, которая может быть выполнена при заваливании вашей системы
сообщениями. Default setting: 50 (5 seconds)
/proc/sys/net/core/message_cost
Здесь указывается значимость каждого предупреждения. Чем выше
значение, тем больше предупреждений будет проигнорировано. Default
setting: 5
/proc/sys/net/core/netdev_max_backlog
Здесь указывается максимальное количество пакетов в очередь на
обработку если интерфейс получает пакеты быстрее, чем ядро может их
обработать. Default setting: 300
/proc/sys/net/core/optmem_max
Здесь указан максимальный размер буфера для одного сокета.
/proc/sys/net/core/rmem_default
Здесь размер буфера для получаемого сокета по умолчанию (в байтах).
/proc/sys/net/core/rmem_max
Это максимальный размер буфера для получаемого сокета (в байтах).
/proc/sys/net/core/wmem_default
Это размер буфера отправляемого сокета по умолчанию (в байтах).
/proc/sys/net/core/wmem_max
Это максимальный размер буфера посылаемого сокета (в байтах).
/proc/sys/net/ipv4
Все параметры IPv4 и IPv6 полностью документированы в документации к
ядру. Смотри файл
/usr/src/linux/Documentation/networking/ip-sysctl.txt.
/proc/sys/net/ipv6
То же что и IPv4.
/proc/sys/vm
/proc/sys/vm/buffermem
Здесь происходит управление количеством общей системной памяти (в
процентах), которая будет использована как буферная память. Файл
содержит три значения, которые могут быть указаны в виде списка через
пробел:
1. Минимальный процент памяти, которая будет использована для буфера
2. Система будет пытаться установить это количество памяти для буфера
если количество доступной памяти будет уменьшено
3. Максимальный процент памяти, которая будет использована для
буферов
Default setting: 2 10 60
/proc/sys/vm/freepages
Этот файл управляет как система реагирует на различные уровни
свободной памяти. Содержит три значения, которые могут быть
установлены в виде списка, разделенного пробелами:
1. Если количество свободных страниц в системе достигнет этого
минимального предела, только ядро будет иметь доступ к любому
дополнительному количеству памяти.
2. Если количество свободных страниц в системе упадет ниже этого
предела, то ядро начнет более агрессивно свопировать для
освобождения памяти и поддержания системной производительности.
3. Ядро будет пытаться сохранить это количество системной памяти
свободным. Падение ниже этого значения приведет к свопированию.
Default setting: 512 768 1024
/proc/sys/vm/kswapd
Этот файл управляет как ядро будет свопировать память. Он содержит три
значения в виде списка, разделенные пробелами:
1. Максимальное количество страниц, которое ядро пытается освободить
за один раз. Если вы хотите увеличить величину свопирования, вам
нужно увеличить это значение.
2. Минимальное количество раз, которое ядро пытается освободить
страницу в время своппинга.
3. Количество страниц, которое ядро может записать в один своп.
Оказывает сильное влияние на производительность системы. Чем
больше это значение, тем больше данных будет свопировано и тем
меньше времени будет потрачено на поиск на диске. Однако, слишком
большое значение окажет обратных эффект на производительность
системы из-за увеличения очереди запросов.
Default setting: 512 32 8
/proc/sys/vm/pagecache
Этот файл выполняет ту же работу, что и /proc/sys/vm/buffermem, но он
делает ее для карты памяти и общего кэширования файлов.
------------------------------------
Выполнение постоянных установок ядра
Полезная утилита для внесения изменений в любые параметры ядра
находится в директории /proc/sys. Она позволяет вам вносить изменения
в работающее ядро (подобно echo и метод перенаправления, описанный
выше), и имеет файл конфигурации, который выполняется при загрузке.
Это позволяет чтобы внесенные изменения оставались в ядре после
перезагрузки системы. Утилита называется sysctl и она полностью
документирована в man sysctl(8).
Файл конфигурации для sysctl - /etc/sysctl.conf, который может быть
редактирован, синтаксис файла описан в man sysctl.conf(8). Sysctl
использует файлы в /proc/sys как индивидуальные переменные, которые
могут быть изменены. Например, файл в /proc/sys, который представляет
максимальное количество заголовков файлов в системе,
/proc/sys/fs/file-max, представлен как fs.file-max. Этот пример
требует некоторых дополнительных пояснений в записи sysctl. Так как
sysctl может только изменять переменные в директории /proc/sys, то
часть имени переменной обозначающая директорию отбрасывается. Другое
изменение касается слэшей, которые заменяются на точки. Вот два
простых правила для преобразования файлов в /proc/sys и переменных в
sysctl:
* Отбросьте /proc/sys от начала.
* Замените слэши на точки в имени файла.
Эти два правила позволят вам преобразовать любой файл в /proc/sys в
любое имя переменной в sysctl. Обычное преобразование имени файла в
переменную:
/proc/sys/dir/file --> dir.file
dir1.dir2.file --> /proc/sys/dir1/dir2/file
Вы можете увидеть все переменные, доступные для изменения, используя
команду sysctl -a. Переменные могут также быть изменены с помощью
sysctl, которая выполняет ту же работу что и echo. Эта запись
объясняет это:
sysctl -w dir.file="value"
Используя пример с file-max, мы можем изменить это значение на 16384,
используя один из двух методов:
sysctl -w fs.file-max="16384"
или
echo "16384" > /proc/sys/fs/file-max
Не забывайте, что sysctl не добавляет изменения в конфигурационный
файл; вы должны сделать это вручную. Если вы хотите, чтобы ваши
изменения остались в системе и после перезагрузки, вы должны настроить
этот файл.
Внимание: Не все дистрибутивы обеспечивают поддержку sysctl. Если это
относится к вашей системе, то вы можете использовать echo и метод
перенаправления, как описано выше и добавить эти команды в загрузочный
скрипт, чтобы они выполнялись каждый раз при загрузке системы.
-----------------------------
Команды для настройки системы
Есть возможность изменять другие параметры (не ядра) во время работы
системы и сделать, чтобы эти изменения оказали эффект без перезагрузки
системы. В основном это сервисы, демоны и серверы, которые прописаны в
директории /etc/init.d. Поскольку в этой директории находится широкий
спектр скриптов, то нет возможности рассмотреть их все здесь. Однако,
ниже будут приведены несколько примеров того, как можно манипулировать
этими скриптами в различных дистрибутивах Linux. Примеры изменения
демона и перезагрузки конфигурации без перезагрузки системы могут быть
полезны при:
* Изменении конфигурации Web сервера и перезагрузки Apache
* Удаления загружаемого в inetd сервиса, которым вы не пользуетесь
* Манипулирования настройками вашей сети
* Экспортирования новой файловой системы через NFS
* Запуска/остановки вашего файервола
Сначала, основной способ манипулирования системными сервисами через
скрипты в /etc/init.d. Эти скрипты используют параметры для управления
своими сервисами. Вы можете ввести в командной строке имя сервиса без
параметров чтобы увидеть допустимые параметры. Общие параметры таковы:
* start: Запускает остановленный сервис
* stop: Останавливает запущенный сервис
* restart: Останавливает и затем запускает сервис; запускает
остановленный сервис
* reload: Перезагружает конфигурацию сервиса без прерывания его
соединения
* status: Выводит информацию запущен сервис или нет
В качестве примера следующая команда перезагрузит конфигурацию вашего
xinetd без прерывания любых присоединенных сессий пользователей
(полезно, если вы вносите изменения в ваш /etc/xinetd.conf):
/etc/init.d/xinetd reload
Red Hat предоставляет комнанду service, которая будет управлять
сервисом для вас. Команда service выполняет те же действия, что и ввод
имени скрипта. Синтаксис команды:
service script-name [parameter]
Пример: service xinetd reload
SuSE также предоставляет команду rc. Она похожа на service, но не
имеет пробела между командой и именем скрипта. Синтаксис команды:
rc{script-name} parameter
Пример: rcapache start
Так же как и при изменении параметров ядра, при перезагрузке системы,
все внесенные изменения будут потеряны. Многие дистрибутивы позволяют
использовать команду chkconfig, которая управляет сервисами,
запускаемыми на различных уровнях (включая загрузку). Во время
написания статьи синтаксис команды chkconfig несколько отличался в
различных версиях Linux, но если вы введете команду chkconfig без
параметров, вы получите список возможных параметров и их
использование. Больше информации о chkconfig может быть получено в man
chkconfig(8).
----------
Заключение
Конфигурирования ядра на лету с использованием файловой системы /proc
не просто, но поняв один раз его структуру и то, как манипулировать
различными параметрами и файлами, вы получите мощную утилиту для
управления вашими сервисами в любое время.
---------
Источники
* Загрузите, или просто изучите все о ядре Linux в архивах
Linux Kernel Archives.
http://www.kernel.org/http://www.kernel.org/mirrors
* Документация о ядре расположена в директории "Documentation", где
установлены исходники ядра.
* Узнайте больше о виртуальной файловой системе /proc из Linux
Gazette.
http://www.linuxgazette.com/issue46/fink.html
* Прочтите man sysctl(8) и sysctl.conf(8).
* Много документации на сайте Linux Documentation Project.
http://www.tldp.org
* Для разрешения проблем с оборудованием, прочтите "Linux
hardware stability guide, Part 1" (developerWorks, March 2001) и
"Linux hardware stability guide, Part 2" (developerWorks, July 2001).
http://www-106.ibm.com/developerworks/linux/library/l-hw1/http://www-106.ibm.com/developerworks/linux/library/l-hw2/
* "Understanding Linux configuration files" (developerWorks,
December 2001) дает обзор файлов и параметров допуска системных
приложений, демонов и т.д.
http://www-106.ibm.com/developerworks/linux/library/l-config.html
* "Configuring and compiling the kernel" (developerWorks, May
2002) проведет вас шаг за шагом через основы компилирования ядра
из исходников.
http://www-106.ibm.com/developerworks/edu/l-dw-linuxlpi6-i.html
Спасибо за статью.
А подскажите, можно вот такие параметры через /proc добавит в kernel?
rd.md.uuid=b566fce0-ed95-42b6-9b66-7c865478e5ff rd.md.uuid=d3847043-7ffe-47fe-b7ad-0d6d568fb49d
Переведено с ошибками. Сам переводчик эти параметры явно не знает. Лучше обратаиться к редхатовской документации.
kernel.msgmnb - это макс.длина ОЧЕРЕДИ, а не сообщения.
kernel.msgmni - это макс. кол-во ОЧЕРЕДЕЙ, а не сообщений в очереди.