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 получает технические вопросы со всего мира. Специалисты Red Hat ежедневно добавляют полученные вопросы и ответы на них в базу знаний Red Hat Knowledgebase. Доступ к ней возможен при наличии учетной записи на сайте redhat.com. Каждый месяц Red Hat Magazine знакомит читателей с Red Hat Knowledgebase, публикуя несколько самых свежих вопросов и ответов.
Давние пользователи 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 средняя загрузка это мера "работы", выполняемой машиной (без уточнения типа этой работы). Эта "работа" может отражать либо интенсивную работу процессора (компиляция файла или шифрование файла), либо нагрузку на подсистему ввода-вывода (копирования файла с диска на диск, поиск по базе данных), либо комбинацию этих случаев.
Есть 3 основных конфигурационных параметра ядра, которые влияют на работу Red Hat Directory Server. Настройка включает параметры монтирования NFS, количество доступных TCP-портов и количество открытых файлов.
Если 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.
Также, важно иметь достаточное количество свободных портов для
работы 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 можно ограничить при помощи элемента
"список
контроля доступа" (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
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 имеет так называемую "битовую карту", которая хранит данные о том, какие части файловой системы свободны, а какие заняты. Представьте себе шахматную доску, где черные квадраты означают занятое место, а белые — свободное. Каждым 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 применяет эвристический анализ для определения размера резерваций: чем больше данных добавляется в файл, тем больше будет размер резервации для будущих добавлений. Эвристический подход никогда не бывает идеальным, потому приложения могут "делать подсказки" ядру о вероятном размере файла и, таким образом, будут выполнятся более оптимальные резервации.
Заключение: с хорошо настроенными резервациями, файловая система предотвращает операции пропуска при считывании данных. Операции пропуска очень дорогостоящие, а потому их отсутствие улучшает производительность.