Библиотека сайта rus-linux.net
Оптимизация Linux
Сегодня мы продолжим оптимизировать вашу Linux-систему.
Файл buffermem. Этот файл тесно связан с работой подсистемы виртуальной памяти Linux ядра. Значения в этом файле (/proc/sys/ vm/buffermem) контролируют, как много памяти используется под буферную память (в процентах). Следует отметить, что проценты берутся от общей системной памяти. Значение по умолчанию в buffermem для Red Hat:
"20 10 60"
Для изменения значений параметров используйте следующие команды:
echo "80 10 60" >/proc/sys/vm/ buffermem
Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера. Или отредактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:
vm.buffermem = 80 10 60
Чтобы изменения вступили в силу, стоит перезагрузить систему.
В вышеприведенном примере согласно файлу документации /usr/src/linux/Documentation/sysctl/vm.txt первый параметр (80%) говорит использовать минимум 80% системной памяти под буферный кэш (минимальное число процентов памяти, которое должно быть использовано под буферную память). Последние два параметра (10 и 60) не используются системой, и мы их оставляем без изменений.
Замечание. О том, как улучшить параметры ядра, связанные с виртуальной памятью, читайте в файле /usr/src/linux/Documentation/sysctl/vm.txt.
Файл ip_local_port_range. Этот файл содержит два целых числа, определяющих интервал портов, которые используют TCP и UDP при выборе локального порта. Первое число - это нижнее возможное значение, а второе - верхнее. В серверных системах эти числа имеют значения 32768 и 61000 соответственно. По умолчанию в Red Hat файл ip_local_port_range содержит значения "1024 4999". Чтобы изменить эти значения, используйте следующие команды:
echo "32768 61000" > /proc/ sys/net/ipv4/ip_local_port_range
Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера. Или отредактируйте файл /etc/sysctl.conf и добавьте следующую строку:
net.ipv4.ip_local_port_range = 32768 61000
Чтобы изменения вступили в силу, стоит перезагрузить систему.
Файл /etc/nsswitch.conf. Этот файл используется для настройки того, какой сервис использовать для получения такой информации, как имя хоста, файл паролей, файл с группами и т.д. Два последних пункта (файл с паролями и файл с группами) рассматриваться не будут. Таким образом, акцентируем наше внимание на строке hosts. Отредактируйте файл nsswitch.conf и измените строку hosts, чтобы она читалась:
hosts: dns files
которая говорит программам, желающим определить адреса, что вначале необходимо воспользоваться службой DNS, а затем, если DNS не отвечает, файлом "/etc/hosts". Также настоятельно рекомендуется удалить все вхождения NIS из каждой строки, если вы не используете NIS. В результате файл /etc/nsswitch.conf может выглядеть следующим образом:
passwd: files
shadow: files
group: files
hosts: dns files
bootparams: files
ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: files
automount: files
aliases: files
Файл file-max. Значение в этом файле определяет максимальное число дескрипторов файлов, которые может распределить ядро. Мы настраиваем этот файл на увеличение числа открытых файлов. Для серверных систем рекомендуется следующее правило: увеличьте значение /proc/sys/fs/file-max до значения примерно равного 256 на каждые 4M RAM, например, для машины со 128 M установите значение равное 8192 (128/4=32, 32*256=8192). По умолчанию в Red Hat file-max равен 4096. Чтобы изменить эти значения, используйте следующие команды:
echo "8192" >/proc/sys/fs/file-max
Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера. Или отредактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:
fs.file-max = 8192
Чтобы изменения вступили в силу, стоит перезагрузить систему.
Замечание. Когда вы начинаете получать много ошибок о выходе за пределы файловых дескрипторов (running out of file handles), увеличьте значение file-max. Файловому и веб-серверам нужно много открытых файлов.
Файл inode-max. Этот файл (/proc/sys/fs/inode-max) определяет максимальное число дескрипторов блоков индексов (inode). В нашем примере мы настраиваем этот файл на увеличение числа открытых блоков индексов (inode), увеличивая "/proc/sys/fs/inode-max" до значения в 3-4 раза большего (8192*4=32768) числа открытых файлов (file-max). Это обусловлено тем, что на каждый открытый файл приходится как минимум 1 блок индекса, а для больших файлов - намного больше. По умолчанию в Red Hat inode-max равен 16376. Чтобы изменить эти значения, используйте следующие команды:
echo "32768" >/proc/sys/fs/ inode-max
Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера. Или отредактируйте файл /etc/sysctl.conf и добавьте следующую строку:
fs.inode-max = 32768
Чтобы изменения вступили в силу, стоит перезагрузить систему.
Замечание. Если вы регулярно получаете сообщение run out of inodes, то вам необходимо увеличить значение inode-max. Помните, что этот параметр зависит от file-max. Файловому и веб-серверам требуется много открытых индексных блоков.
Параметр ulimit. Linux имеет ограничение "Max Processes" для каждого пользователя. Этот параметр показывает, как много процессов может иметь пользователь. Для улучшения производительности вы можете спокойно увеличить это значение для пользователя root, сделав его неограниченным. Добавьте следующую строку в файл /root/.bashrc:
ulimit -u unlimited
Теперь вы должны перелогиниться (сделать logout и login). Для проверки, что вы все сделали правильно, дайте команду (как root):
ulimit -a
в строке с max user processes должен быть текст "unlimited".
Увеличим также системные ограничения на открытые файлы. Процесс в Red Hat 6.0 с ядром 2.2.5 может открыть не меньше 31000 файловых дескрипторов и процесс на ядре 2.2.12 - не меньше 90000 файловых дескрипторов (согласно установленным ограничениям). Верхняя граница зависит от доступной памяти. Увеличение этого числа до 90000 для пользователя root делается следующим образом: отредактируйте файл /root/.bashrc, добавив следующую строку:
ulimit -n 90000
Теперь вы должны перелогиниться. Для проверки, что вы все сделали правильно, дайте команду (как root):
ulimit -a
в строке с open files должен быть текст "90000".
Атрибут atime (access time). В дополнении к информации о дате создания и последней модификации файла, Linux создает запись о последнем обращении к файлу. Эта информация не очень полезна и при этом происходят затраты системных ресурсов на ее ведение. Файловая система ext2 позволяет суперпользователю маркировать отдельные файлы, чтобы запись о времени последнего доступа к ним не велась. Это может существенно улучшить эффективность системы, особенно, если установить этот атрибут для часто используемых файлов, например, для /var/spool/news. Для установки атрибута на один файл используется команда:
chattr +A filename
Для всех файлов в каталоге:
chattr -R +A /var/spool/
Для снятия же атрибута надо писать не +A, а -A.
Атрибут noatime. Linux имеет опцию монтирования файловой системы, называемую noatime. Она может быть добавлена в поле опций файла /etc/fstab. Если файловая система смонтирована с этой опцией, то при доступе к ней по чтению информация atime изменяться не будет. Важность установки опции noatime в том, что она устраняет необходимость операции записи в файловую систему для файлов, которые просто читаются. Так как запись "дорогая" операция, то ее отсутствие может существенно улучшить эффективность системы. Обратите внимание, что информация wtime продолжает изменяться при записи в файл. В нашем примере мы устанавливаем опцию noatime для файловой системы /mnt/linux_games. Отредактируйте файл /etc/fstab и добавьте, например, такую строку:
/dev/hda7 /mnt/linux_games ext2 defaults,noatime 1 2
Перезагрузите вашу систему и проверьте, что у вас получилось:
reboot
cat /proc/mounts
В результате одной из строк, выводимых на экране, должна быть
/dev/hda7 /mnt/linux_games ext2 rw,noatime 0 0
Мы видим, что /mnt/linux_ga-mes имеет атрибут noatime.
Swap-раздел. Поместите ваш swap-раздел вблизи начала вашего диска, которое физически располагается на внешней стороне цилиндра. В результате за один оборот головка охватывает большую поверхность. При помощи команды hdparm -t я вижу, что с разделом, помещенным в конце диска, скорость работы на 3 MB/s медленнее.
Настройка производительности IDE-дисков. Быстродействие IDE-дисков увеличивается при использовании UDMA. Ядро использует консервативный режим работы с дисками, пока ему не скажешь изменить это. "Волшебная" команда для изменения установок - это hdparm. Включение 32-bit I/O через шину PCI:
/sbin/hdparm -c 1 /dev/hda (или hdb, hdc и т.д.)
Руководство man для hdparm говорит, что для некоторых чипсетов нужно использовать "-c 3". Все (E)IDE диски до сих пор имеют 16-разрядное подключение через ленточный кабель к интерфейсной карте. Включение DMA:
/sbin/hdparm -d 1 /dev/hda (или hdb, hdc и т.д.)
Возможность использования этой команды зависит от поддержки чипсета вашей материнской платы ядром. При включении DMA отменяется синхронизация буферизированного чтения диска, в результате чего быстродействие может увеличиться в 2 раза. Для включения multiword DMA mode 2:
/sbin/hdparm -d 1 -X34 /dev/ hda (или hdb, hdc и т.д.).
Эта установка используется для (E)IDE/ATA2 дисков (посмотрите документацию к вашему диску). Для включения UltraDMA mode2:
/sbin/hdparm -d 1 -X66 /dev/ hda (или hdb, hdc и т.д.)
Вам нужно будет заранее подготовить ваш чипсет к использованию UltraDMA, так что прочитайте man-ы к hdparm. Используйте этот режим очень осторожно!
Для включения multiple sector mode I/O:
[root@deep]# /sbin/hdparm -m XX /dev/hda (или hdb, hdc и т.д.)
где "XX" - максимальные установки, поддерживаемые вашим диском. Для поиска максимальных значений установленных жестких дисков может использоваться флаг -i (в выводимой информации смотрите значение MaxMultSect).
Многосекторный режим (IDE Block Mode) поддерживается большинством современных IDE жестких дисков, передача нескольких секторов за одно I/O прерывание быстрее, чем обычное односекторное. Когда эта возможность включена, обычно, понижаются "накладные расходы" на операциях ввода/вывода на 30-50%. На многих системах в результате также увеличивается пропускная способность от 5% до 50%. Вы можете проверить, чего добились, запустив hdparm в режиме проверки производительности:
/sbin/hdparm -t /dev/hda (или hdb, hdc и т.д.)
Как только вы определили все параметры hdparm, не забудьте добавить соответствующие команды в файл /etc/rc.d/rc.local.
Последнее, что мы сделаем, это заставим Linux обрабатывать большее число TCP/IP соединений за определенное время. Нижеописанные настройки уменьшают время TCP/IP подключения, чтобы можно было обработать больше соединений за тот же интервал. Также будет уменьшено время, которое Linux ждет до закрытия соединения, и время, через которое Linux разрывает устаревшее соединение. Эти настройки отключат некоторые расширения протокола TCP/IP, которые нам не нужны. Значения параметров TCP/IP стека, принятые в Red Hat по умолчанию:
tcp_fin_timeout "180"
tcp_keepalive_time "7200"
tcp_window_scaling "1"
tcp_sack "1"
tcp_timestamps "1"
Чтобы изменить параметры TCP/IP, используйте следующие команды:
echo 30 > /proc/sys/net/ipv4/ tcp_fin_timeout
echo 1800 >/proc/sys/net/ipv4/ tcp_keepalive_time
echo 0 > /proc/sys/net/ipv4/ tcp_window_scaling
echo 0 > /proc/sys/net/ipv4/ tcp_sack
echo 0 > /proc/sys/net/ipv4/ tcp_timestamps
Вы можете добавить эти команды в /etc/rc.d/rc.local, чтобы они выполнялись каждый раз при загрузке компьютера. Или отредактируйте файл /etc/sysctl.conf и добавьте следующие строки:
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
Чтобы изменения вступили в силу, стоит перезагрузить систему.
На сегодня все!
X-Stranger
xstranger@tut.by
www.linux4u.narod.ru