Tips & tricks

This article is protected by the Open Publication License, V1.0 or later. Copyright © 2005 by Red Hat, Inc.
Original article: http://www.redhat.com/magazine/011sep05/departments/tips_tricks/

Red Hat Magazine, выпуск 11, сентябрь 2005

Перевод: © Иван Песин

Служба поддержки пользователей Red Hat получает технические вопросы со всего мира. Специалисты Red Hat ежедневно добавляют полученные вопросы и ответы на них в базу знаний Red Hat Knowledgebase. Доступ к ней возможен при наличии учетной записи на сайте redhat.com. Каждый месяц Red Hat Magazine знакомит читателей с Red Hat Knowledgebase, публикуя несколько самых свежих вопросов и ответов.

Советы от RHCE

Ваш друг — Readline

Давние пользователи Linux, часто имеют набор приемов, которые помогают им работать с командной строкой быстрее и эффективнее. Эти приемы включают в себя утилиты, типа терминального мультиплексора screen, и использование функций и псевдонимов, задаваемых в файле ~/.bashrc.

Другим удобным помощником является библиотека GNU Readline. Она предоставляет набор клавиатурных комбинаций, которые могут быть использованы для управления курсором и редактирования строк ввода в командном интерпретаторе и некоторых других программах.

Страница руководства по bash содержит хорошую документацию — вы можете перейти к соответствующей секции, выполнив команду man bash и введя /^READ<enter>, или просто пролистав до нужного места.

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

Клавиатурная
комбинация
Ее действие
Ctrl-A Перейти в начало строки
Ctrl-E Перейти в конец строки
Alt-F Перейти на одно слово вперед
Alt-B Перейти на одно слово назад
Ctrl-K Вырезать до конца строки
Alt-Backspace Вырезать до начала текущего слова
Ctrl-Y Вставить из буфера обмена
Alt-. Вставить последний параметр предыдущей команды
Ctrl-R Обратный поиск по истории команд
Примечание:
Чтобы использовать комбинации Alt-F и Alt-B в терминале GNOME, вам необходимо отключить его собственные комбинации. Для этого, зайдите в меню Edit -> Keyboard Shortcuts... и отметьте оба пункта.

Вы могли заметить, что команды управления курсором и буфером обмена соответствуют командам редактора Emacs. Если вы предпочитаете схему редактора Vi, выполните set -o vi. Чтобы сохранить эту настройку, добавьте команду в файл ~/.bashrc.

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

# ~/.inputrc
$include /etc/inputrc
# this shadows transpose-chars in the default emacs mode
# works around the default C-s being shadowed by linux's
# C-s scroll-lock behavior
C-t: forward-search-history
C-f: 'realias\n'
"\C-x\C-r": re-read-init-file

Realias это функция командного интерпретатора, которая пересчитывает файл .bashrc:

function realias () { . ~/.bashrc ; }

Таким образом, если вы его отредактировали, больше нет необходимости перезапускать терминал для активации изменений — достаточно нажать Ctrl-F.

Какая связь между ожиданием ввода-вывода и средней нагрузкой системы?

Linux следует стандартам традиционных UNIX-систем и вычисляет свою среднюю нагрузку (load average, loadave), как среднее число выполняемых процессов (состояние R) и процессов в состоянии непрерываемого сна (состояние D) за определенный интервал времени.

Некоторые другие операционные системы считают свою загрузку просто по количеству процессов в состоянии R. В таких системах, средняя нагрузка является синонимом длины очереди выполнения: высокие показатели средней нагрузки свидетельствуют о недостаточности ресурсов процессора.

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

Какие есть основные параметры настройки Red Hat Directory Server?

Есть 3 основных конфигурационных параметра ядра, которые влияют на работу Red Hat Directory Server. Настройка включает параметры монтирования NFS, количество доступных TCP-портов и количество открытых файлов.

Параметры монтирования NFS

Если Red Hat Directory Server должен писать на том, смонтированный по NFS, рекомендуется внести в файл /etc/rc.d/init.d/autofs следующие изменения:

+localoptions='rsize=8192,wsize=8192,vers=3,tcp'

Параметры настройки NFS:

 rsize=8192,wsize=8192 - Увеличивает скорость работы nfs по сравнению со значениями по-умолчанию равными 4096. 

vers=3 - Указывает, какую использовать версию протокола NFS.

tcp - NFS будет использовать протокол TCP, а не UDP.

Номера TCP-портов

Также, важно иметь достаточное количество свободных портов для работы Red Hat Directory Server. Увеличить количество доступных портов можно, указав в файле /etc/sysctl.conf директиву:

net.ipv4.ip_local_port_range = 1024 65000

Чтобы изменения вступили в силу, выполните команду:

sysctl -p

Указанные действия в результате изменят текущее значение в файле  /proc/sys/net/ipv4/ip_local_port_range.

Количество открытых файлов

Настройка количества открытых файлов необходима, если текущее максимальное количество открытых файлов на сервере Red Hat Directory Server меньше 64000. Чтобы узнать текущее значение, выполните:

cat /proc/sys/fs/file-max

Чтобы задать нужное значение, добавьте в файл /etc/sysctl.conf строку:

fs.file-max = 64000

После этого, увеличьте максимальное число открытых файлов, добавив в файл /etc/security/limits.conf строку:

* - nofile 8192

Кроме того, нужно добавить PAM-модуль pam_limits.so в файл /etc/pam.d/system-auth:

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required /lib/security/$ISA/pam_env.so
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok
auth required /lib/security/$ISA/pam_deny.so

account required /lib/security/$ISA/pam_unix.so

password required /lib/security/$ISA/pam_cracklib.so retry=3 type=
password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password required /lib/security/$ISA/pam_deny.so

session required /lib/security/$ISA/pam_limits.so
session required /lib/security/$ISA/pam_unix.so

Чтобы активировать изменения, внесенные в файл /etc/sysctl.conf выполните команду:

sysctl -p

Чтобы изменения, внесенные в файл limits.conf, вступили в силу, пользователи должны перерегистрироваться в системе.

Как мне ограничить количество одновременных соединений клиента через прокси-сервер Squid?

Количество одновременных соединений клиента через прокси-сервер Squid можно ограничить при помощи элемента "список контроля доступа" (Access Control List, acl) maxconn. Для использования элемента maxconn также должна присутствовать директива "client_db on". По-умолчанию она активируется в конфигурационном файле /etc/squid/squid.conf.

Откройте в редакторе файл /etc/squid/squid.conf и найдите в нем следующие строки:

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

# Example rule allowing access from your local networks. Adapt
# to list your (internal) IP networks from where browsing should
# be allowed
#acl our_networks src 192.168.1.0/24 192.168.2.0/24
#http_access allow our_networks

После них вы можете вставлять параметры maxconn.

Вот пример ограничения количества одновременных соединений клиента до 5:

acl STUDENTS 192.168.3.0/24
acl numbercon maxconn 5
http_access deny STUDENTS numbercon

Чтобы изменения вступили в силу перезапустите Squid:

service squid restart

Как мне настроить клиентскую систему автоматически закрывать неиспользуемое соединение к LDAP-серверу по истечении определенного интервала времени?

Утилита authconfig позволяет настроить авторизацию через LDAP на клиентской системе. authconfig читает и модифицирует файлы /etc/nsswitch.conf, /etc/ldap.conf, /etc/pam.d/system-auth и /etc/openldap/ldap.conf в соответствии с заданными настройками. Директива idle_timelimit в файле /etc/ldap.conf задает максимальное время существования неиспользуемого соединения к серверу LDAP. По истечении  idle_timelimit соединение автоматически закрывается. Вот пример файла /etc/ldap.conf:
# @(#)$Id: index.html,v 1.6 2005/09/21 16:26:50 tfox Exp $
#
# This is the configuration file for the LDAP nameservice
# switch library and the LDAP PAM module.
#
# PADL Software
# http://www.padl.com
#command every two seconds, after first
clearing the screen.
This makes it much easier to determine how memory utilization changes
over time, as it is not necessary to scan continually scrolling output.


# Your LDAP server. Must be resolvable without using LDAP.
# Multiple hosts may be specified, each separated by a
# space. How long nss_ldap takes to failover depends on
# whether your LDAP client library supports configurable
# network or connect timeouts (see bind_timelimit).

host 192.168.0.1
#LDAP Servers

base dc=feu,dc=example,dc=org
#base object of the server

idle_timelimit 3600
#sets the user idle time the connection is automatically drop

Изменения вступят в силу после того, как пользователь переподсоединится к серверу LDAP.

Как лучше наблюдать за производительностью системы на коротких интервалах в течении длительного времени?

Наиболее тонкий инструмент для мониторинга ресурсов системы — Sysstat. Sysstat включает в себя следующие утилиты: iostat, mpstat, sadc и sar. Утилита iostat выводит показатели загрузки процессора и статистику операций ввода-вывода для одного или более дисков. Утилита mpstat отображает более детальную статистику загрузки процессора. Утилита sadc собирает информацию об использовании системных ресурсов и записывает в файл, а утилита sar выводит отчет на основании данных, собранных sadc.

Как можно наблюдать за динамикой использования памяти без прокрутки экрана?

Используйте команду watch free. Команда watch будет выполнять команду free каждые две секунды, предварительно очищая экран. Это сильно облегчает наблюдение за тем, как меняется использование памяти на протяжении определенного периода времени и устраняет необходимость прокрутки экрана. Две секунды — это задержка между вызовами команд по-умолчанию.

Что такое "резервации" файловой системы ext3 в Red Hat Enterprise Linux 4 и как они могут улучшить производительность?

Примечание:
Для ясности изложения, этот совет упрощает несколько технических деталей в отношении файловой системы. Основные же понятия излагаются точно.

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

Какую проблему решает технология резерваций 

Файловая система ext3 имеет так называемую "битовую карту", которая хранит данные о том, какие части файловой системы свободны, а какие заняты. Представьте себе шахматную доску, где черные квадраты означают занятое место, а белые — свободное. Каждым 4 килобайтам данных ("блок" в терминах ext3) соответствует один такой квадрат, и они могут быть либо полностью свободными, либо полностью занятыми. В этом совете, мы будем представлять свободные блоки точками, а занятые — заглавными буквами.

........................

Выше приведен полностью свободный (т.е. пустой) диск.

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

(после чего, данные блоки будут помечены как занятые, а процесс этот называется "выделением" ["allocating"]). Обычно, ядро ищет свободные блоки начиная с конца существующего файла, чтобы они были как можно ближе к остальным данным файла.

Проблем не будет, если на файловой системе увеличивается один файл. Однако, когда увеличиваются два файла, назовем их A и B, может возникнуть следующая ситуация: пускай немного увеличивается файл A и ядро отводит ему первый блок диска:

A..........................

Если сразу после этого немного увеличится файл B, ядро найдет для него первый свободный блок. Им окажется второй блок диска:

AB.........................

Допустим, файлы A и B поочередно увеличиваются и дальше:

ABAB.......................

В результате мы получим что-то наподобие:

ABABABABABABABABABABAB.....

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

Образец ABAB на самом деле очень проблематичен: чтобы прочесть информацию из файла A, файловая система должна пропустить (выполнить "поиск" ["seek"] в технических терминах) все вкрапления данных файла B. В результате диск постоянно пропускает куски данных. Современные диски работают очень быстро при чтении непрерывных данных (50 мегабайт в секунду не редкость). Однако, если диску приходится пропускать много данных, его производительность падает обычно до 1 мегабайта в секунду, а то и меньше. Заключение: "пропуски" плохо отражаются на производительности. При наличии образцов ABAB приходится выполнять много пропусков, соответственно наличие образцов ABAB плохо сказывается на производительности.

Что такое резервации?

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

Файловая система, использующая резервации

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

Aaaaaaaaaaaa...............

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

AaaaaaaaaaaaBbbbbbbbbb.....

Новые данные файла A будут записываться в предварительно зарезервированные блоки:

AAaaaaaaaaaaBbbbbbbbbb.....

Аналогично, новые данные файла B будут заноситься в зарезервированные области этого файла. После определенного периода роста файлов (как в прошлом примере), битовая карта будет выглядеть так:

AAAAAAAAAAAABBBBBBBBBB.....

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

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

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

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

 AAAABBBBAAAABBBBAAAABBBB... 

Этот образец хотя и лучше чем ABABAB, все еще не оптимален.

Как работают резервации

Реализация резерваций, используемая в Red Hat Enterprise Linux 4 применяет эвристический анализ для определения размера резерваций: чем больше данных добавляется в файл, тем больше будет размер резервации для будущих добавлений. Эвристический подход никогда не бывает идеальным, потому приложения могут "делать подсказки" ядру о вероятном размере файла и, таким образом, будут выполнятся более оптимальные резервации.

Заключение: с хорошо настроенными резервациями, файловая система предотвращает операции пропуска при считывании данных. Операции пропуска очень дорогостоящие, а потому их отсутствие улучшает производительность.