Поиск по блогу :

    18 февраля 2008 г.

    Оптимизация загрузки и работы системы

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



    Начнем с оптимизации скорости загрузки.

    Чтобы точно узнать сколько у нас на данный момент длится загрузка системы, воспользуемся программой bootchart:
    #
    apt-get install bootchart

    Теперь после каждой перезагрузки системы, в папке /var/log/bootchart, появляются графики загрузки (в виде .png картинок). Открыв их, вы сможете посмотреть, сколько длилась ваша загрузка и какие программы и демоны запускались дольше всего. В дальнейшем, сравните графики начальной скорости загрузки системы и после оптимизации описанной ниже. Если вам временно надо отключить создание графиков, то надо просто отключить демон программы:
    #
    /etc/init.d/stop-bootchart

    Пример графика...
    1. Этот способ актуален только для тех, у кого двухядерный процессор или процессор поддерживает технологию hyperthreading. Этот способ называется "Параллельная загрузка".
    1.1. Редактируем файл:
    #
    nano /etc/init.d/rc

    1.2. Ищем строку:
    CONCURRENCY=none
    и заменяем ее на строку:
    CONCURRENCY=shell
    1.3. Перезагружаемся.
    Сразу скажу - данный способ дает реальное уменьшение времени загрузки системы (по крайней мере у меня - загрузка уменьшилась на 30 секунд)
    Если после перезагрузки системы у вас появилось сообщение о том, что произошла ошибка HAL, надо сделать следующее:
    # # # #
    mv /etc/rc2.d/S12hal /etc/rc2.d/S13hal
    mv /etc/rc3.d/S12hal /etc/rc3.d/S13hal
    mv /etc/rc4.d/S12hal /etc/rc4.d/S13hal
    mv /etc/rc5.d/S12hal /etc/rc5.d/S13hal

    и все станет на свои места.

    2. Этот способ заключается в отключении запуска не нужных программ и демонов.
    2.1. Поотключайте не нужные программы с помощью Система -> Параметры -> Сеансы
    2.2. Поотключайте не нужные демоны через
    #
    /etc/init.d/(название программы) stop

    2.3. Покопайтесь в файлах rc.* в папке /etc
    Данный способ, в зависимости от вашей системы и вашей очистки, может ускорить загрузку системы на 3 - 20 секунд.
    ВНИМАНИЕ! Действия, приведенные в данном способе, вы выполняете на свой страх и риск.

    3. Этот способ заключается в отключении проверки fat32 разделов диска при каждой загрузке системы.
    3.1. Редактируем файл /etc/fstab
    #
    nano /etc/fstab

    3.2. Находим строку(и) в которой(ых) происходит подключение fat32 раздела(ов) и в конце этих строк заменяем последние две цифры на нули. Должно получиться, примерно, следующее:
    /dev/hdc1 /mnt/E vfat iocharset=utf8,umask=000 0 0
    После перезагрузки - постоянная проверка fat32 разделов вас не потревожит. Теперь можете делать проверку сами, вручную, с помощью команды fsck.

    Оптимизация работы системы.

    1. Настройка /proc/sys/vm/swappiness и /proc/sys/vm/vfs_cache_pressure.
    В псевдофайле swappiness хранится значение (в целых процентах), это уровень свободной памяти, при котором система начнет активно сбрасывать память в своп. Значение по умолчанию: 60. Изменяется значение от 0 до 100.
    В псевдофайле vfs_cache_pressure хранится значение - уровень выделяемой памяти под кэш. Значение по умолчанию: 100. Пределов значения, к сожалению не знаю.
    1.1. Если вы хотите ускорить работу системы (особенно те, кому жалко не задействованой оперативки во время работы системы), то измените значение системы, примерно, так:
    swappiness = 10 , vfs_cache_pressure = 1000 :
    # #
    echo 10 > /proc/sys/vm/swappiness
    echo 1000 > /proc/sys/vm/vfs_cache_pressure

    1.2. Если вы хотите больше использовать своп и кэширование файлов (актуально, например, при просмотре мелких картинок и т.п., а так же тем у кого оперативки меньше 128Мб), то измените значение системы, примерно, так:
    swappiness = 100 , vfs_cache_pressure = 10 :
    # #
    echo 100 > /proc/sys/vm/swappiness
    echo 10 > /proc/sys/vm/vfs_cache_pressure

    1.3. Теперь сделаем, чтобы эти параметры применялись при загрузке системы.
    Редактируем файл /etc/sysctl.conf
    #
    nano /etc/sysctl.conf

    добавим в конец файла строки
    vm.swappiness = 10
    vm.vfs_cache_pressure = 1000
    или
    vm.swappiness = 100
    vm.vfs_cache_pressure = 10

    2. Настройка CFQ IO Shedule.
    Так как в Ubuntu этот параметр, по умолчанию, работает как надо, то приведу этот способ для ознакомления.
    CFQ IO Shedule - шедулер ввода-вывода, старающийся выделить временные интервалы для каждого процесса. При используемом, на многих дистрибутивах по умолчанию, методе anticipatory, процесс, начавший интенсивно работать с диском, может не отдавать временные интервалы другим процессам. На десктопе это приводит к сильным тормозам. Пока какой-то процесс активно работает с диском, перерисовка GUI тормозит, программы запускаются по минуте и т.д. CFQ IO Shedule при значении cfg делает более равномерную загрузку.
    2.1. Проверяем какой метод использует CFQ IO Shedule:
    #
    cat /sys/block/hda/queue/scheduler

    если выбран метод anticipatory, то на выводе будет показано следующее:
    noop [anticipatory] deadline cfq
    2.2. Чтобы заменить его на cfg, делаем следующее:
    #
    echo cfq > /sys/block/hda/queue/scheduler

    и если мы еще раз выведем содержимое файла, то увидим:
    noop anticipatory deadline [cfq]
    После этого, система начинает более равномерно выделять доступ к диску всем фоновым процессам. Фактически это выражается в том, что система совершенно перестаёт тормозить при 100% загрузке IO Wait (интенсивная работа с винтом, копирование больших файлов и т.п.)

    3. Выключаем поддержку IPv6
    Этот способ нужен тем, кто совершенно не использует протокол IPv6 (как показывает моя практика - большинству). Отключение IPv6 влияет на скорость отображения сетевых шар, да и вообще скорость работы в сети.
    3.1. Редактируем файл /etc/modprobe.d/aliases:
    #
    nano /etc/modprobe.d/aliases

    3.2. Находим строку:
    alias net-pf-10 ipv6
    и заменяем ее на строки:
    alias net-pf-10 off
    alias ipv6 off

    4. Настройка /etc/hosts.
    Этот способ ускоряет запуск и работу программ, которые любят обращаться через loopback (например, гномовский терминал).
    4.1. Редактируем /etc/hosts
    #
    nano /etc/hosts

    4.2. Ищем строку:
    127.0.0.1 localhost
    добавляем в конец строки, через пробел имя своего пользователя, под которым вы сидите в системе, в моем случае, получилось так:
    127.0.0.1 localhost leolik

    5. Настройка java.
    По умолчанию в системе используется java 1.5, из-за этого многие java-приложения ужасно тормозят. Исправляем это положение, заставляя все приложения работать на версии java 1.6. Если у вас не установлена версия java 1.6, установите ее через Synaptic.
    5.1. Вводим в консоль:
    #
    update-alternatives --config java

    5.2. В появившемся списке ищем строку: /usr/lib/jvm/java-6-sun/jre/bin/java
    и применяем ее, введя номер этой строки.

    Оптимизация файловой системы.

    1. Этот способ предназначен, только для систем с фс EXT3 и ReiserFS.
    1.1. Редактируем файл /etc/fstab :
    #
    nano /etc/fstab

    1.2. Ищем строку корневой системы, пример:
    UUID=1592eed8-e490-4839-98cb-e4cd4d4f9200 / ext3 defaults,errors=remount-ro 0 1
    Изменяем ее на такую, пример:
    UUID=1592eed8-e490-4839-98cb-e4cd4d4f9200 / ext3 defaults,errors=remount-ro,noatime,data=writeback 0 1
    1.3. Редактируем файл /boot/grub/menu.lst
    #
    nano /boot/grub/menu.lst

    1.4. Ищем строки, начинающиеся на: # defoptions и # altoptions и добавляем в конец этих строк: rootflags=data=writeback
    Должно получиться:
    # defoptions=quiet splash rootflags=data=writeback
    и
    # altoptions=(recovery mode) single rootflags=data=writeback
    1.5. Вводим команду для обновления файла menu.lst:
    #
    update-grub

    ВНИМАНИЕ! Это привет к обновлению файла menu.lst, также, как если бы вы обновили ядро системы, перепишет файл с дефолтными настройками, но добавит введенные выше изменения.

    2. Этот способ предназначен, только для систем с фс EXT3 и применяется после первого способа.
    2.1. Вводим в терминале (замените /dev/hdd1 на ваш диск с корневой системой / ):
    #
    tune2fs -o journal_data_writeback /dev/hdd1

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

    3. Этот способ предназначен для дисков с фс EXT3 и 4. С помощью этого способа, мы освободим зарезервированное системой пространство жесткого диска под свои нужды.
    Дело в том, что система автоматически резервирует на дисках с фс EXT - 5% дискового пространства на случай, если вдруг у вас закончится место на диске и тогда система не сможет сохранить системную информацию, что может привести к плачевным последствиям. Не спорю, что это оправдано для корневого раздела "/", но вот для других разделов это не критично, а свободного места теряется много, особенно на больших, по объему дисках.
    3.1. Вводим в терминале следующее (замените /dev/sdb1 на ваш диск)
    #
    tune2fs -r 0 /dev/sdb1

    где 0 - это процент зарезервированного места.
    Если у вас под корневой раздел выделен объемный диск, то можете спокойно уменьшить процент до 2 или 3, зато сэкономите порядочно места под другие нужды.