Лучшее VPS сервер под Debian: анализ проблем и оптимизация настроек. Оптимизация debian
Оптимизация Debian | Open Source в Татарстане. Linux.
Debian очень хороший дистрибутив, но не всегда быстрый, под катом инструкция, как его значительно ускорить. Система с fluxbox без оптимизации грузится за 26 секунд, с оптимизацией за 11!В ходе оптимизации система будет переведена на ext4, будет новое ядро и пакеты будут собираться из исходных текстов, а так же init заменён на upstart
Предупреждение
Все действия производить с чистой системой, в случае с рабочей, есть риск всё сломать! Для данных целей рекомендуется
netinstall образ
При установке
/boot
необходимо сделать отдельным разделом, хватит 200мб и ext2
Ядро
Для данных целей нужно использовать
последнее ядро (>=2.6.28)
и собирать его вручную, как правильно это сделать:
make menuconfig
В
Processor type and features
->
Processor family
выберите свой процессор (у меня Core 2/newer Xeon)
В
File systems
модульно
The Extended 4 (ext4) filesystem
и выбрать
Ext4 extended attributes
Закончим конфигурирование, приступим к сборке:
make-kpkg --initrd --append-to-version="-append" kernel_image kernel_headersdpkg -i ../linux*.deb
Где append можно заменить на любое своё слово.
Перевод в ext4
Для начала скачаем
partdemagic
livecd или liveusb, загрузимся с диска.
Чтоб перевести фс в ext4 (не переводите /boot в ext4!) нужно:
tune2fs -O extents,uninit_bg,dir_index /dev/sdXXfsck -pf /dev/sdXX
Где sdXX — нужный раздел, для просмотра списка разделов введите
fdisk -l
Чтобы наша система загружалась нужно сделать:
mount -anano /media/sdYY/etc/fstab
nano, так как он встроен в загрузочный диск. sdYY — коренной раздел.
В открывшемся файле в разделах, где стал ext4 меня ext3 на ext4
Если вы перевели / в ext4, то в
/media/sdYY/boot/grub/menu.lst
в строчку kernel нашего ядра допишем
rootfstype=ext4
и в строчку
# kopt=
тоже самое.
Теперь можно с чистой совестью перезагружаться в систему с ext4
apt-build
Это программа, благодаря которой можно устанавливать пакеты из исходных кодов, для установки введите
aptitude install apt-build
, после установки будет предложено выбрать ваш процессор, в интернете можно найти дополнительные параметры для вашего процессора, мой файл настроек (
/etc/apt/apt-build.conf
):
build-dir = /var/cache/apt-build/buildrepository-dir = /var/cache/apt-build/repositoryOlevel = -O2mtune = -mtune=core2options = "-pipe -fomit-frame-pointer"make_options = "-j4 "
Для начала пересоберём уже установленный пакеты, для этого:
dpkg --get-selections | awk '{if ($2 == "install") print $1}' > /etc/apt/apt-build.listecho "Package: *Pin: release o=apt-buildPin-Priority: 990" >> /etc/apt/preference
Последнее было сделано для того, чтоб при обновление собранные пакеты не заменились пакетами из репозитория.
Для пересборки всего вводим
apt-build world
и когда пишет, что для какой0то программы нет исходных текстов, удаляем её из
/etc/apt/apt-build.list
Позже пакеты устанавливать через
apt-build install
, обновлятся через
apt-build upgrade
, более подробная информация в
man apt-build
Замена init на upstart
upstart работает быстрее, чем init, для замены введите:apt-build install upstart
PS в момент написания статьи собирался kde4
Источник: http://habrahabr.ru/blogs/linux/52368/
www.openkazan.info
Оптимизация initramfs под Debian (Linux) — Linux портал
Система Debian – один из самый популярнейших дистрибутивов, который является прародителем других систем, а именно - Mint, Ubuntu, Linux и пр. Особенная популярность Debian получила благодаря собственному обычному, дружескому пользовательскому интерфейсу.Но тут все таки есть несколько минусов, желание разработчиков угодить каждому юзеру привела к тому, что не все элементы системы могут работать нормально только по дефлоту. Например, довольно упомянуть образ initramfs, который на диске занимает около 10 мб, а содержит внутри себя основную часть модулей. Они в неких задачках просто не нужны и занимаю собой только драгоценное место.В этой статье мы кропотливо разглядим, как можно улучшить и сгенерировать initramfs в системе Debian.Для начала коротко о том, что все-таки такое этот initramfs? Это рядовая, временная файловая система, которая употребляется ядром сначала загрузки.
Проще говоря, используя initramfs загрузчик загружается в память ядра, и исходная загрузка всей системы происходит конкретно из initramfs. Соответственно, здесь понятно, что чем меньше излишнего будет в initramfs, тем резвее система будет загружаться и добиваться памяти на исходных шагах.В этот момент стоит сделать пару уточнений:
- Все описания ниже могут быть применены не только лишь для Debian, да и для других схожих систем;
- Естественно, если пересобрать ядро вручную, то initramfs вообщем может и не пригодится, но не всегда это комфортно, ну и не все захочут после еще одного обновления поновой пересобрать ядро. Потому, предлагается улучшить initramfs средствами находящимися под рукой, выставленные в дистрибутиве.
![](/img/optimizaciya-debian_0.jpg)
- update-initramfs -v -c -k `uname -r`
- #MODULES=most
- MODULES=list
![](/img/optimizaciya-debian_1.jpg)
- lsmod | tail -n +2 | sort | awk \'{print $1;}\' > /etc/initramfs-tools/modules
- update-initramfs -v -d -k `uname -r` && update-initramfs -v -c -k `uname -r`
![](/img/optimizaciya-debian_2.jpg)
Linux
Если с модулями разобрались, то можно перебегать к хукам. Все хуки системы хранятся в /usr/share/initramfs-tools/hooks. Чтоб осознать какой хук, за что тут может отвечать, необходимо проследить к какому пакету он принадлежит, получить перечень пакетов позволяет команда:bash:- find /usr/share/initramfs-tools/hooks/ -type f -exec dpkg -S \'{}\' \\;
- apt-get purge fuse-utils ntfs-3g && apt-get autoremove --purge && update-initramfs -v -c -k `uname -r`
![](/img/optimizaciya-debian_3.jpg)
- apt-get purge dmsetup && apt-get autoremove --purge && update-initramfs -v -c -k `uname -r`
![](/img/optimizaciya-debian_4.jpg)
- update-initramfs -u -k all
- update-initramfs -c -k all
![](/img/optimizaciya-debian_5.jpg)
![](/img/optimizaciya-debian_6.jpg)
Похожие статьи
-
Российские теги mp3-файлов в Debian (Linux)
Практически на всех современных дистрибутивах Linux шифровкой по-умолчанию является utf-8, а стандартной российской шифровкой ОС Windows — cp1251. Вот поэтому существует неувязка отображения российских m...
-
Debian 4
V3.01 --> Восемь апреля Две тыщи семь года общественности была представлена новая версия 4.0 культового дистрибутива Debian GNU/Linux (http://www.debian.org/) получившая кодовое имя «etch». К новой...
-
Обновляемся c Debian Squeeze до Debian Wheezy
У юзера Debian может появиться желание использовать кандидатуру, размеренной версии Debian Squueze (stable), тестируемыую версию Debian Wheezy (testing). Предпосылкой перехода могут быть разны...
-
Обзор Arch Linux 2008
В конце июня на FTP серверах появилась новая версия дистрибутива Arch Linux. И хотя он не является на данный момент победителем и не пользуется такой популярностью как Ubuntu, но в то же время имеет...
-
Мониторинг железа в Linux
Лето в прошедшем году было очень жаркое. Вентиляторы находящиеся в системном с большим трудом управлялись с остыванием, хотя шум издают приличный. Как узнать, что происходит там внутри внутри,...
VPS сервер под Debian: анализ проблем и оптимизация настроек
Список разделов- Утилиты и способы диагностики проблем:
- Нагрузка на процессор,
- Свободная оперативная память,
- Использование дискового пространства,
- Пакет sysstat,
- Трафик,
- Логи,
- Apache:
- Логи,
- Время обработки запроса,
- Страница статуса,
- Nginx:
- Логи,
- Страница статуса,
- MySQL:
- Логи,
- mytop,
- Mysqltuner,
- Запись состояния сервера,
- Отладка скриптов:
- Медленные запросы MySQL,
- Время выполнения скриптов PHP,
- Дебаггинг,
- Профилирование,
- Проблемные ситуации,
- Описание ситуаций,
- Оптимизация VDS,
- Описание оптимизаций.
Нагрузка на процессорЧтобы прикинуть ситуацию на сервере прежде всего стоит воспользоваться утилитой top, или atop, если он установлен.
В top видна информация по аптайму, нагрузке на процессор и использованию оперативной памяти. Также видна статистика по запущенным процессам. Утилита atop более информативна, однако ее нужно предварительно установить.
Быстро узнать LA можно с помощью команды uptime.
LA - параметр характеризующий общую нагрузку на систему. Приблизительно можно считать, что LA равный (или менее) количеству процессорных ядер является нормальным.
Свободная оперативная памятьБыстро получить информацию по использованию оперативной памяти можно командой free -m (-m - отображать в мегабайтах):
#free -mtotal used free shared buffers cachedMem: 3439 890 2548 0 181 227-/+ buffers/cache: 481 2958Swap: 4729 0 4729
Использование дискового пространстваСтатистика по смонтированным файловым системам доступна по команде df -h:
Filesystem Size Used Avail Use% Mounted onrootfs 97G 5.0G 87G 6% /udev 10M 0 10M 0% /devtmpfs 344M 6.6M 338M 2% /runtmpfs 5.0M 0 5.0M 0% /run/lock
Чтобы узнать сколько занимает директория, нужно перейти в неё и выполнить команду du -hs (s - суммарно). Если же требуется узнать информацию о каждой поддиректории, то используйте следующий вариант: du -h --max-depth=1, где 1 - уровень вложенности.
# du -h --max-depth=1197M ./bin129M ./local22M ./include354M ./lib4.0K ./src6.3M ./lib3230M ./sbin379M ./share1.1G .
Если начать проверку с корневой директории, то можно выявить самые тяжёлые директории.
Также существует утилита ncdu, которая позволяет просканировать все вложенные директории и построить топ по самым тяжёлым с возможностью заходить в них и смотреть информацию по поддиректориям. Очень удобно, но в случае большой вложенности и большого количества файлов для получения результата придётся подождать.
Пакет sysstatvmstat отображает информацию об использовании памяти, раздела подкачки, дисков, процессора с заданной периодичностью заданное количество раз (опционально).
# vmstat 2 5 -S Mprocs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----r b swpd free buff cache si so bi bo in cs us sy id wa0 0 0 2081 271 357 0 0 1 10 45 4 3 1 95 00 0 0 2081 271 357 0 0 0 0 458 307 5 1 94 00 0 0 2081 271 357 0 0 0 0 625 346 19 9 73 00 0 0 2081 271 357 0 0 0 30 542 309 5 1 93 10 0 0 2081 271 357 0 0 0 0 447 280 4 1 95 0
В команде первая цифра задаёт периодичность, вторая - количество проверок. Параметр -S позволяет задать в каких единицах отображать информацию об использовании памяти, в данном случае - в мегабайтах.
mpstat позволяет просмотреть информацию по использованию процессора как суммарно, так и для отдельных процессоров (ядер), как с заданной периодичностью, так и единожды.
# mpstat 2 2 -P ALLLinux 3.2.0-4-amd64 (debgate) 10/30/2013 _x86_64_ (2 CPU)
10:02:25 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle10:02:27 AM all 5.30 0.00 0.51 0.00 0.00 0.00 0.00 0.00 94.1910:02:27 AM 0 8.59 0.00 1.01 0.00 0.00 0.51 0.00 0.00 89.9010:02:27 AM 1 2.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00
10:02:27 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle10:02:29 AM all 4.02 0.00 0.25 0.75 0.00 0.25 0.00 0.00 94.7210:02:29 AM 0 6.63 0.00 0.51 1.02 0.00 0.00 0.00 0.00 91.8410:02:29 AM 1 1.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.99
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idleAverage: all 4.66 0.00 0.38 0.38 0.00 0.13 0.00 0.00 94.46Average: 0 7.61 0.00 0.76 0.51 0.00 0.25 0.00 0.00 90.86Average: 1 1.51 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.49
Параметр -P ALL как бы намекает, что нужно отображать информацию по процессорам (ядрам) в отдельности, иначе будут показаны только суммарные значения. В случае, если не задать периодичность, то информация отобразится только один раз.
iostat - утилита для мониторинга использования дисков. Отображает информацию о том, сколько данных было передано и с какой скоростью идёт считывание. Первая строка отображает данные с момента перезапуска системы, остальные - с момента вывода предыдущей строки.
# iostat 2 5 -dhkzLinux 3.2.0-4-amd64 (debgate) 01.11.2013 _x86_64_ (2 CPU)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtnsda0,81 3,58 5,91 276896 457728
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtnsda0,50 0,00 2,00 0 4
Параметр -d позволяет выводить только данные по дисковой подсистеме, иначе выводится также информация по процессору. -h - позволяет отображать данные в человекопонятном виде, -k - значения будут выведены в килобайтах, -z - ничего не отображать, если ничего не изменилось.
pidstat позволяет узнать большое количество информации по запущенному процессу, такой как утилизация процессора, потребление памяти, использование диска и прочую. Можно получать информацию как об одном, так и о нескольких процессах:
# pidstat 1 -p 24219 -p 24130Linux 3.2.0-4-amd64 (debgate) 07/26/2014 _x86_64_ (2 CPU)
03:48:40 AM PID %usr %system %guest %CPU CPU Command03:48:41 AM 24219 2.00 0.00 0.00 2.00 1 apache203:48:41 AM 24130 0.00 0.00 0.00 0.00 0 apache2
В данном случае отображается информация об использовании процессора двумя указанными процессами раз в секунду. Можно задать количество и периодичность запросов для каждого процесса в отдельности.
Дополнительную информацию можно получить на сайте разработчика: http://sebastien.godard.pagesperso-orange.fr/documentation.html
ТрафикДля мониторинга соединений в режиме реального времени можно использовать утилиту iftop (устанавливается отдельно). Чтобы отключить преобразование адресов в доменные имена нужно нажать n, чтобы включить отображение портов - p. Также отображается скорость передачи.
Вторым инструментом является утилита iptraf с псевдографическим интерфейсом (также ставится отдельно). Позволяет в более наглядной форме просмотреть скорость соединения, а также целый набор прочей информации о сетевых соединениях.
Стоит также упомянуть о довольно простой утилите bwm-ng, которая позволяет в режиме реального времени отслеживать использование канала. iptraf и iftop также предоставляют данную информацию, но в менее наглядной форме и с бОльшим количеством подробностей.
ЛогиПо умолчанию в Debian логи (журналы работы) расположены в директории /var/log. Основные файлы логов:
auth.log - содержит в себе записи об авторизациях в различных системах: FTP, SSH, cron.cron.log - информация обо всех выполненных заданиях.daemon.log - сюда демоны пишут служебные сообщения.debug - сюда пишутся системные сообщения и сообщения от приложений, для которых выбран уровень лога debug.dmesg - в этот лог пишутся сообщения выдаваемые при загрузке системы.dpkg.log - тут собрана информация о последних установках ПО с помощью apt-get и aptitude.kern.log - содержит сообщения выдаваемые ядром. Информация может пригодиться в случае проблем с новым, самостоятельно собранным, ядром.messages - здесь можно найти сообщения от системных служб и приложений, которые ведут лог на уровне info. Часть информации может дублироваться с другими логами.syslog - системный лог, может содержать информацию, которой нет в других логах.
В зависимости от ситуации можно смотреть различные логи. Хотите узнать, не пытаются ли подобрать пароль к сервису или думаете, что уже подобрали? Вам в auth.log. Что-либо не запустилось при перезапуске системы? Добро пожаловать в dmesg. Требуется определить что и когда было установлено? Обратитесь к dpkg.log. Неудачно собрали ядро и система на нем не запускается? Посмотрите содержимое kern.log. И так далее. Не забывайте, что в директории /var/log обычно содержатся файлы логов одного типа за некоторый период времени.
ApacheЛогиЛоги веб-сервера Apache по умолчанию пишутся в директорию /var/log/apache2. В директории создается два файла: access.log - содержит логи доступа и error.log - содержит информацию об ошибках в работе веб-сервера и сайтов.
Логи можно проанализировать с помощью простого просмотра или конвейера из консольных команд. К примеру, мы можем построить топ IP-адресов генерирующих определённый код ответа:
cd /var/log/apache2tail -n1000 access.log | grep " 302 " | awk '{print $1}' | sort | uniq -c | sort -gРезультат:
1 77.66.215.971 82.145.220.1752 207.241.226.2318 199.192.207.14629 178.154.160.29751 37.140.141.35
То есть мы взяли последнюю 1000 строк лог-файла access.log, выбрали строки с определенным кодом, из них вырезали только IP-адреса с которых идут запросы, отсортировали, посчитали количество уникальных адресов идущих подряд, отсортировали по количеству вхождений.
Время обработки запросаТакже полезным может оказаться запись в лог времени обработки запроса, что можно сделать создав собственный формат лога и добавив в него параметр %T. К примеру, в случае базовой установки Apache в Debian, в файле /etc/apache2/apache2.conf нужно найти строку начинающуюся с LogFormat и заканчивающуюся на combined, скопировать её в новую строку внести изменения:
- Переименовать combined в combined-time
- Перед последней кавычкой добавить следующее: CPU_TIME: %T
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" CPU_TIME: %T" combined-time
Теперь правим файл какого-либо виртуального хоста в директории /etc/apache2/sites-available, корректируя (добавив) строку начинающуюся с CustomLog, в которой указываем путь до файла лога и указывая наш новый формат. В итоге получается строка вида:
CustomLog /var/www/logs/domain.tld-access.log combined-time
Теперь в лог будет записываться время обработки запроса в секундах. К примеру:
81.95.28.26 - - [26/Dec/2013:12:01:31 +0400] "POST /wp-admin/admin-ajax.php HTTP/1.0" 200 850 "http://gesu.su/wp-admin/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36" CPU_TIME: 9
Страница статусаВключить страницу статуса Apache можно с помощью следующих директив в конфигурационном файле:
<Location /server-status>AllowOverride AllSetHandler server-statusOrder allow,denyAllow from 12.34.56.78 127.0.0.1Satisfy any</Location>
В данном случае доступ ограничен с локального хоста и адреса 12.34.56.78, который следует заменить на используемый вами внешний IP-адрес.
На странице видна общая информация по работе веб-сервера и по обслуживаемым в настоящий момент запросам. Страницей статуса стоит пользоваться для анализа текущей ситуации на сервере.
NginxЛогиПо умолчанию, ведётся два лога error.log и access.log в директории /var/log/nginx. Приёмы анализа аналогичны тем, которые применяются для анализа логов Apache.
Страница статусаNginx также позволяет получить информацию о текущем состоянии, однако более простую, чем для Apache. Фактически выводится информация только о количестве соединений.
Чтобы включить вывод данной информации необходимо внутри контекста server добавить строки:
location /nginx_status {stub_status on;access_log off;allow 12.34.56.78;deny all;}
Где 12.34.56.78 - IP-адрес с которого разрешён доступ к статистике.
Расшифровка показателей в статистике:
- Reading - получение заголовков запросов,
- Writing - чтение тел запросов, обработка запросов и выдача результатов,
- Waiting - активных keep-alive соединений (reading + writing).
Можно задать путь до лога ошибок добавив файл /etc/mysql/my.cnf строки:
log_error = /var/log/mysql/mysql.errlog_warnings = 1
mytopВ Debian установить mytop можно командой
aptitude install mytopДалее потребуется создать конфигурационный файл, чтобы не указывать каждый раз данные для подключения вручную. Файл создается для каждого пользователя в отдельности (~/.mytop). Содержимое файла:
user=rootpass=XXXhost=localhostdb=delay=2port=3306socket=batchmode=0header=1color=1idle=1
Вообще говоря, из всех этих параметров можно оставить только указание пароля и адрес сервера.
Обратите внимание, что пароль пользователя root сервера баз данных указывается в открытом виде, поэтому стоит озаботиться настройкой прав, чтобы остальные пользователи не смогли прочесть содержимое файла.
Mytop позволяет посмотреть нагрузку в текущий момент, активные запросы, их состояние. Кроме того, можно убить процессы, посмотреть подробности (explain) и так далее. Информация, выдаваемая с помощью explain может пригодиться при создании индексов и совершенствовании запросов к базам.
MysqltunerMysqltuner - скрипт на perl, который анализирует показатели работе MySQL-сервера, накопленные за период времени и выдаёт статистическую информацию и рекомендации по оптимизации настроек.
Получить скрипт можно командой:
wget https://raw.github.com/major/MySQLTuner-perl/master/mysqltuner.plПри использовании под Debian какие-либо настройки не требуется, при использовании, к примеру, в CentOS, может понадобиться указать данные для доступа к MySQL.
Пример вывода:
# perl mysqltuner.pl>> MySQLTuner 1.2.0 - Major Hayden <[email protected]>>> Bug reports, feature requests, and downloads at http://mysqltuner.com/>> Run with '--help' for additional options and output filtering[OK] Logged in using credentials from debian maintenance account.
-------- General Statistics --------------------------------------------------[--] Skipped version check for MySQLTuner script[OK] Currently running supported MySQL version 5.5.33-0+wheezy1[OK] Operating on 64-bit architecture
-------- Storage Engine Statistics -------------------------------------------[--] Status: +Archive -BDB -Federated +InnoDB -ISAM -NDBCluster[--] Data in MyISAM tables: 1M (Tables: 82)[--] Data in InnoDB tables: 96K (Tables: 6)[--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17)[!!] Total fragmented tables: 6
-------- Security Recommendations -------------------------------------------[OK] All database users have passwords assigned
-------- Performance Metrics -------------------------------------------------[--] Up for: 22h 56m 26s (674K q [8.169 qps], 83K conn, TX: 483M, RX: 65M)[--] Reads / Writes: 99% / 1%[--] Total buffers: 480.0M global + 2.7M per thread (151 max threads)[OK] Maximum possible memory usage: 885.8M (25% of installed RAM)[OK] Slow queries: 0% (0/674K)[OK] Highest usage of available connections: 3% (6/151)[OK] Key buffer size / total MyISAM indexes: 16.0M/640.0K[OK] Key buffer hit rate: 99.2% (46K cached / 364 reads)[OK] Query cache efficiency: 91.7% (311K cached / 340K selects)[OK] Query cache prunes per day: 0[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 12K sorts)[OK] Temporary tables created on disk: 7% (118 on disk / 1K total)[OK] Thread cache hit rate: 99% (6 created / 83K connections)[!!] Table cache hit rate: 19% (129 open / 655 opened)[OK] Open file limit used: 8% (212/2K)[OK] Table locks acquired immediately: 100% (27K immediate / 27K locks)[OK] InnoDB data size / buffer pool: 96.0K/128.0M
-------- Recommendations -----------------------------------------------------General recommendations:Run OPTIMIZE TABLE to defragment tables for better performanceMySQL started within last 24 hours - recommendations may be inaccurateEnable the slow query log to troubleshoot bad queriesIncrease table_cache gradually to avoid file descriptor limitsVariables to adjust:table_cache (> 1200)
Далее остается подправить конфиг MySQL (/etc/mysql/my.cnf) и перезапустить его. Затем подождать около суток, снова запустить скрипт и следуя рекомендациям внести очередные коррективы в конфигурационный файл. Следует следить за максимальным значением, которое может использовать сервер баз данных, так как большинство изменений приводит к его увеличению.
Запись состояния сервераatop - утилита, похожая на утилиту top, но с значительно расширенным функционалом. Отображает больше различных параметров и делает это более подробно. Однако наиболее интересной функцией является возможность записи состояния сервера с определённой периодичностью, что позволяет восстановить ситуацию на сервере перед, во время и после аварии. И вообще отслеживать ситуацию на сервере.
Установка классическая:
aptitude install atopЗадать путь до директории, в которой будут храниться логи и периодичность, с которой будет записываться состояние системы, можно прямо в стартовом скрипте /etc/init.d/atop.
Просмотреть содержимое лога можно командой вида:
atop -r /var/log/atop/atop_20131231Перемещаться по шкале времени можно с помощью t и T (shift+t).
Отладка скриптовМедленные запросы MySQLMySQL: индексы, EXPLAIN, прфилирование
Время выполнения скриптов phpУзнать время выполнения скрипта php можно узнать либо из лога Apache при включённом логировании времени обработки запроса, либо выполнив скрипт из консоли и воспользовавшись командой time. К примеру, команда:
time php test.phpВыдаст результат работы скрипта, после чего покажет время затраченное на его выполнение:
real 0m0.114suser 0m0.040ssys 0m0.036s
Если вы используете php-fpm, то можно включить лог медленных запросов по аналогии с MySQL:
slowlog = /var/log/php5/slow.logrequest_slowlog_timeout = 10s
ДебаггингЭто уже для программистов на php. Xdebug устанавливается легко:
aptitude install php5-xdebugПосле чего может понадобиться дополнительная настройка в конфиге. Подробнее: http://romych.com.ua/ru_RU/blog/view/post/19
Xdebug позволяет использовать точки останова, менять значения переменных на лету, осуществлять удалённую отладку и так далее.
ПрофилированиеXHProf и xDebug - профилирование кода PHP
Проблемные ситуацииКонечно, все проблемы, возникающие на VDS серверах, уникальны. Однако зачастую они попадают в одну из следующих категорий:
- Место на диске кончилось,
- Закончилось свободное место в оперативной памяти,
- Крайне высокая нагрузка на процессор,
- Скачки посещаемости,
- Спам с сервера,
- Сервер взломали,
- Забился канал (DoS),
- Эксплуатация ошибок в настройках сервисов,
- Проблемы с файловой системой.
- Лёгкий пароль рута.
- Обновление ядра пользователем.
Далее требуется очистить некоторое количество места и принять меры для того, чтобы ситуация не повторилась. К примеру, настроить ротацию логов. Для восстановления нормального функционирования системы может понадобиться перезагрузка сервера.
2. В случае, если возникает недостаток оперативной памяти, то начинает использоваться swap, который находится на диске, который работает значительно медленнее и сервер начинает тормозить. В случае же острой нехватки ОП начинает работать OOM Killer (Out Of Memory Killer), который убивает наиболее тяжёлые, по его мнению, процессы, что может привести к неработоспособности программ и трудностям с их перезапуском, так как в случае их экстренного завершения на диске может оставаться pid-файл. В отдельных случаях возможно зависание сервера вследствие паники ядра.
Посмотреть информацию по ОП можно с помощью утилиты free. Узнать, был ли задействован OOM Killer, можно проанализировав лог syslog. Вообще, достаточно универсальным способом найти информацию является команда:
egrep -i 'killed process' /var/log/*Часто проблемы с наличием свободной оперативной памяти возникают в случае активного размножения процессов веб-сервера Apache. Чтобы не допустить этого стоит чётко рассчитать сколько процессов выдержит ваш VDS и внести коррективы в настройки апача. С помощью top или ps aux узнаем сколько занимает один процесс и делим общее количество ОП (за вычетом 20% на прочие программы) на полученное значение. В итоге узнаем количество процессов и прописываем его в конфигурационном файле.
3. Проблемы с нагрузкой на процессор могут возникать, к примеру, в случае, если кто-то ведёт перебор паролей для доступа в административную часть сайта или панели управления сервером. В этом случае используется как веб-сервер, так и интерпретатор скриптов, а также сервер баз данных. Что суммарно может создавать высокую нагрузку. Информацию по использованию процессора можно получить с помощью утилит top или atop. Затем необходимо анализировать логи соответствующих программ и блокировать плохишей.
4. В случае скачков посещаемости сайтов могут наблюдаться проблемы как с нагрузкой на процессор, свободной оперативной памятью, так и с нагрузкой на дисковую подсистему и интернет-канал. То есть создаётся суммарная нагрузка. Выявить, кто генерирует нагрузку можно проанализировав логи веб-серверов. В случае, если нагрузка полезная, то необходимо экстренно предпринимать соответствующие меры. Если нагрузка полезная и запланированная, то стоит заранее провести соответствующие оптимизации. В качестве таких оптимизаций может выступать кэширование, переход на более мощный сервер, отказ от apache и прочие действия.
В случае, если скачек посещаемости вызван бесполезными ботами или DoS-атакой с небольшого количества IP-адресов, то доступ с них можно закрыть либо на файрволе, либо с помощью блокировки на уровне веб-сервера nginx. Nginx можно свободно использовать в качестве веб-файрвола, так как он достаточно легковесен и способен выдерживать значительные нагрузки.
5. Если вы по глупости все ещё используете Joomla 1.5 и ваш сайт взломали и начали использовать для рассылки спама с него, то SMTP-сервер также может генерировать значительную нагрузку, в зависимости от его настроек. Отследить это можно по очереди почтового сервера либо с помощью мониторинга утилитой atop. В логе будут видны моменты, когда было слишком много одновременных процессов SMTP-сервера.
6. Если ваш сервер взломали, то это можно увидеть по логу авторизаций - есть успешные подключения по ssh со сторонних IP-адресов. Кроме того, при просмотре запущенных процессов можно увидеть подозрительные и непонятные, которые вы не запускали. Можно попробовать просканировать сервер с помощью clamav и rkhanter. Найденные гадости удалить. Однако наилучшим вариантом будет полная переустановка операционной системы. В любом случае требуется изменить пароль пользователя root.
Никогда не ставьте слишком лёгкий пароль пользователя root. Был случай, когда для пользователя root был установлен пароль root. Не делайте так никогда.
7. Если ваш сервер DDoS-ят так сильно, что к нему не подключиться, то, скорее всего, провайдер заблокирует ваш IP-адрес до момента окончания атаки. В любом случае что-то можно сделать только в обход основного интеренет-канала, то есть с помощью VNC-подключения к консоли. В данной ситуации обратитесь за помощью к вашему хостинг-провайдеру.
Для того, чтобы сервер мог выдержать не слишком сильные атаки не забудьте заранее установить ограничения на количество одновременных подключений с одного IP-адреса и прочие.
8. Как показывает практика, злоумышленники могут эксплуатировать не правильно настроенные программы, установленные на VPS-серверах. В том числе, это могут быть и предустановленные программы. Особо стоит выделить DNS и NTP - серверы. Если вы не планируете использовать собственные DNS-серверы, то соответствующее ПО лучше отключить совсем или даже удалить. В случае, если вы используете свои DNS-серверы, то отключите возможность рекурсивных ответов или установите ПО, которое их не поддерживает.
Определить такой тип проблем может быть затруднительно, но в случае их наличия с вами свяжутся представители соответствующих контор.
9. Ещё одной проблемой могут быть неполадки в работе файловой системы. Они могут как накапливаться, так и возникать в случае экстренного отключения вашего VDS, к примеру, в случае неполадок в работе головного сервера или проблем с электричеством в дата-центре. Некоторые проблемы могут быть обнаружены при анализе лога kernel.log. Другие - экспериментальным путём, например, в случае, если ваш сервер не загружается после перезагрузки VPS. Если у вас нет VNC-доступа, то в подобной ситуации стоит обратиться в техническую поддержку хостинга.
Оптимизация VDSЧасто VDS-серверы предоставляются с базовыми настройками, которые далеки от оптимальных. К примеру, установлен только Apache с некими стандартными настройками. В таком случае может возникать избыточная нагрузка на процессор и на оперативную память, которую можно избежать.
Общие предложения для оптимизации настроек:
- Установка проксирующего веб-сервера Nginx,
- Установка opcode-кэшера для php,
- Оптимизация настроек Apache,
- Оптимизация настроек MySQL.
- Настройка связки Nginx + php-fpm и удаление Apache,
- Использование различных уровней кэширования: на уровне движка сайта, opcode-кэшера, веб-сервера nginx,
- Настройка собственных скоростных DNS-серверов,
- Оптимизация запросов к базе данных,
- Оптимизация кода сайта.
2. Рекомендуется использовать OPCache для кэширования php-скриптов и APCu для пользовательского кэширования. Либо можно установить xCache, который может и то, и другое. Кэширование опкода позволяет не компилировать повторно одни и те же скрипты, что значительно повышает скорость их выполнения при повторном обращении.
Чтобы установить OPCache и APCu в Debian вам понадобиться модуль php-pear:
aptitude install php-pearПосле чего можно будет установить необходимые модули с помощью команд:
aptitude install libpcre3-devpecl install zendopcache-7.0.3 apcu-4.0.63. Оптимизация настроек Apache заключается, в основном, в отключении не нужных модулей, которые дополнительно потребляют ОП в расчёте на один процесс, а также установка лимита на максимально возможное количество параллельных процессов, что позволяет не допустить недостатка оперативной памяти в случае скачков посещаемости.
4. Дополнительный тюнинг настроек MySQL позволяет как оптимизировать потребление оперативной памяти, так и ощутимо повысить производительность. Для этого можно использовать MySQLTuner, речь о котором уже шла выше.
Про дополнительные оптимизации здесь говорить не будем, так как каждая из них требует отдельной статьи.
Если у вас возникли вопросы или дополнения, добро пожаловать в комментарии.
источник
sait-svoimi-rukami.ru
Тонкая настройка и увеличение производительности Ubuntu\Debian\Mint\Unity
.
В данной публикации — рекомендации по настройке и ускорению работы Ubuntu\Debian\Mint с графической оболочкой Unity и с любой другой оболочкой.
Автозагрузка в Ubuntu\Debian\Mint:
Ранее у нас на сайте: https://studylinux.ru/autorun.html
В перечисленных дистрибутивах, и им сходных интерфейсы для графического, нативного управления автозагрузкой приложений существуют с незапамятных времен. В Unity эта утилита (gnome-session-properties) находится в основном меню Dash. В утилите отображаются далеко не все запускаемые службы. Что-бы отображался полный список, нужно выполнить команды:
sudo sed -i 's/NoDisplay=true/NoDisplay=false/g' /etc/xdg/autostart/*.desktop sed -i 's/NoDisplay=true/NoDisplay=false/g' ~/.config/autostart/*.desktopи в меню автозагрузки будут видны все приложения, разных пользователей и системные:
В отличие от Windows — систем, где в автозагрузке утилиты msconfig можно спокойно выключить все, и компьютер загрузится — здесь нужно думать.. Не знаете что за сервис\служба\приложение — не трогайте .
Вообще в Ubuntu\Debian\Mint есть две подсистемы автозапуска:
- С оболочкой.
- Автозапуск с самой системой.
Графические утилиты управляют только первым видом. Практически же такая загрузка выполняется через .desktop файл приложений, (по типу ярлыков c:/documents and settings/all users/ в Винде), которые находятся в папках :
- /etc/xdg/autostart или
- ~/.config/autostart
Соответственно как в Windows-директориях c:/documents and settings/all users/и c:/documents and settings/user/. В первом случае ярлыки будут одинаковы для всех, во втором — для отдельного пользователя.
Обычная практика — скопировать ярлыки в эти папки вручную. Ярлыки всех доступных программ размещены в папке /usr/share/applications (из этой папки их берет Dash). Однако скопировать ярлык недостаточно, в нем нужно для свойства «X-GNOME-Autostart-enabled» указать значение true.
Автостарт приложений при запуске ядра системы Ubuntu\Debian\Mint
Есть специальные утилиты для управления очереди модулей в процессе запуска ОС. Они позволяют избежать фрагментации файловой системы при запуске, и ускорить загрузку. Самая популярная в Ubuntu\Debian\Mint и их производных — preload. Установка\запуск:
sudo apt-get install preload sudo touch /var/lib/preload/preload.state sudo chmod 644 /var/lib/preload/preload.state /etc/init.d/preload restartВ Ubuntu по дефалту идет другая утилита со схожим функционалом — ureadahead. По-умолчанию она не загружается при старте ОС, нужно добавить в автозапуск.
Эти утилиты борются с фрагментированием файловой системы, и если у Вас SSD-диск, то они только займут ОЗУ безо всякого смысла.
Уменьшение размеров системных логов Ubuntu\Debian\Mint
По-умолчанию логируется практически все, и системные события, и инциденты всех служб\программ.
Логи по-умолчанию лежат в директории /var/log. Если эта папка размещена в корне (/) то современные дистрибутивы просто резервируют обычно 5% для свободного места. Иначе логи могут забить все и сделать загрузку невозможной.
Для уменьшения журналов событий есть специальная утилита logrotate. Она удаляет старые логи с установленной в конфиге /etc/logrotate.d периодичностью. Каждый файл в этой директории назначает управление логами определенной программы\службы. Также можно задать определенный максимальный размер журнала отдельно для каждого приложения. Например, для медиа-плеера VLC:
sudo gedit /etc/logrotate.d/vlcИ затем поправить этот файл этот предельно понятный, с примерами конфиг.
Можно грохнуть все старые журналы (логи):
sudo find /var/log -type f -name «*.gz» -delete
Для повышения общей скорости системы можно поместить директорию временных файлов в ОЗУ. Нужно в fstab:
sudo gedit /etc/fstab вписать директиву tmpfs /tmp tmpfs defaults,noexec,nosuid 0 0Это значительно ускорит работу системы и отдельных приложений, и часто весьма и весьма значительно. Но есть пару моментов:
- Нужно примерно оценить размер темпов. Они могут спокойно себе занять всю ОЗУ.
- Во временных файлах могут(редко) хранится файлы, нужные для возобновления работы после перезагрузки ОС\перезапуска приложения — как пример, сохраненные вкладки браузера. Но ситуации бывают и вразы по-опасней, — сначала изучите содержимое
и очень хорошо подумайте, особенно если это не домашний компьютер, а сервер компании.
Использование swap на диске
По дефалту, Линух (как минимум Ubuntu\Debian\Mint) начинает писать в swap, когда ОЗУ занята на 40 процентов. Странно, казалось-бы, но причины на то есть. Данный показатель можно посмотреть и поменять —
sudo gedit /etc/sysctl.confдобавив директиву: vm.swappiness=3
vm.swappiness=10 указывает, что свпиться система начнет только при 3 процентах занятой оперативки.
Ускорение меню Dash Unity
Крайне рекомендуем отключить поиск в Интернет в поисковой строке меню Dash. Средствами оболочки: «Настройки — защита и приватность — поиск: отображать результаты поиска в Интернет».
В консоли:
gsettings set "com.canonical.Unity.Lenses" remote-content-search none.длинная команда в терминале:
gsettings set «com.canonical.Unity.Lenses» disabled-scopes «[‘more_suggestions-amazon.scope’,’more_suggestions-u1ms.scope’,’more_suggestions-populartracks.scope’, ‘music-musicstore.scope’,’more_suggestions-ebay.scope’, ‘more_suggestions-ubuntushop.scope’,’more_suggestions-skimlinks.scope’]»
отключит всякие комерческие варианты и немного ускорит систему.
Может, кому будет полезно — для того, чтоб всякие панели\скроллбары в Unity не скрывались, тоже оболочка будет работать плавнее:
gsettings set com.canonical.desktop.interface scrollbar-mode normal
Для любителей всяческих ковыряний в системе (тонкой настройки) в Unity есть две утилиты — gsettings и dconf. Первая консольная, простая и вторая, графическая, и как по мне — более тонкая.
В кратце — все. Если есть дополнения — озвучивайте в комментариях. Хорошего Вам дня.
https://studylinux.ru/tonkaya-nastrojka-i-uvelichenie-proizvoditelnosti-ubuntu-debian-mint-unity.html2016-07-08T10:01:08+00:00adminDebianMintUbuntuАдминистрированиеДругиеДругие приложенияОболочки рабочего столаРуководстваСтатьиУтилитыХакиDash,dconf,Debian,Debian\Ubuntu\Mint,fstab,gsettings,logrotate,Mint,preload,Ubuntu,Unity,ureadahead,Администрирование,Настройка ПО,Настройка системы,Оптимизация,ПО,Производительность,Установка,Утилиты,ХакиВ данной публикации - рекомендации по настройке и ускорению работы Ubuntu\Debian\Mint с графической оболочкой Unity и с любой другой оболочкой. Автозагрузка в Ubuntu\Debian\Mint: Ранее у нас на сайте: http://studylinux.ru/autorun.html В перечисленных дистрибутивах, и им сходных интерфейсы для графического, нативного управления автозагрузкой приложений существуют с незапамятных времен. В Unity эта утилита (gnome-session-properties) находится в основном меню Dash. В...
[email protected]Самоучитель LINUX
Похожее
studylinux.ru
Оптимизация VPS сервера на Debian — Поснов Андрей (Битрикс/iOS/Android разработчик)
Если у вас windows, смиренно слушаемся указаний в письме и переходим по ссылке http://hostink.ru/wiki/ssh3_putty/ за дальнейшими инструкциями, если же у вас Linux(Debian/Ubuntu и др.) подключаемся к серверу так:
$ ssh [email protected] -p 22на что получаем диалог системы безопасности ключей:
The authenticity of host '[93.189.xx.xx]:22 ([93.189.xx.xx]:22)' can't be established. ECDSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Are you sure you want to continue connecting (yes/no)?Соглашаемся и пишем yes.Поздравляю, вы в системе.Давайте обновимся:
# apt-get update && apt-get dist-upgradeНе сидим под root-ом!
По умолчанию нам предлагается сидеть под root-ом, что не очень хорошо по соображениям безопасности.
1. создаем пользователя под которым будем работать(самый простой способ):
# adduser userгде user — имя пользователяДалее мы увидим диалог что-то вроде:
Добавляется пользователь «user» ... Добавляется новая группа «user» (1001) ... Добавляется новый пользователь «user» (1001) в группу «user» ... Создаётся домашний каталог «/home/user» ... Копирование файлов из «/etc/skel» ... Введите новый пароль UNIX: Повторите ввод нового пароля UNIX: passwd: пароль успешно обновлён Изменение информации о пользователе user Введите новое значение или нажмите ENTER для выбора значения по умолчанию Полное имя []: Номер комнаты []: Рабочий телефон []: Домашний телефон []: Другое []: Данная информация корректна? [Y/n] YПишем сложный пароль(который вы не забудете!) и заполняем данные которые считаем нужными, или просто нажимаем enter.
2. Разрешаем user выполнение sudoДобавляем user в специальную группу sudo:
# usermod -a -G sudo userгде собственно user — имя пользователя.Всё, можем выходить и логинится под user
$ ssh [email protected] -p 22и в дальнейшем уже использовать sudo если нужны привилегии root-а
Немного обезопасим SSH
Практически сразу после запуска сервера заметил подозрительную активность в ану.. на порту 22. По всей видимости китайские порно-сканеры разнюхали и начали брутить пароли.Самый простой выход — сменить порт ssh с 22 на любой другой.1. Для этого откроем файл конфигурации ssh сервера:
$ sudo nano /etc/ssh/sshd_configИщем строку «Port 22» и заменяем её на «Port 354» где 354 любое число в пределах от 1 до 65535На всякий случай посмотрим открытые порты:
netstat -tupln | grep LISTENи выберем любой не из этого списка.Скажу сразу, порты 80, 443, 3306, 22, 21, 8080 — советую не использовать.2. Дальше, ограничим тип адресов для подключения(IPv6 либо IPv4). Если у вас на сервере не используется IPv6, то дописываем файл /etc/ssh/sshd_config:
AddressFamily inet3. Запретим авторизацию под root, ищем в файле PermitRootLogin и выставляем no. Если данного параметра нет, дописываем:
PermitRootLogin no4. Разрешаем подключение только по определенным логинам, дописываем файл /etc/ssh/sshd_config:
AllowUsers userгде список пользователей пишется через пробел.
5. Запрещаем попытку входа с пустым паролем. Ищем PermitEmptyPasswords и выставляем no
PermitEmptyPasswords no6. Сохраняем и перезапускаем ssh демон:
$ sudo /etc/init.d/ssh restartДля начала всё, можем перелогиниваться с новыми параметрами($ ssh [email protected] -p 354), далее в статье мы еще вернемся к вопросу безопасности.
Установка SWAP
Как оказалось в автоматическом режиме не был выставлен swap, а при таком объеме памяти — это критично.Внимание! Это мой конкретный случай, проверить есть ли swap можно так:
$ sudo swapon -sСоздаем, с помощью dd, файл необходимого размера для swap области, где /swap — это имя и путь файла, а count=1024K его размер, в данном случае — 512 Мб(обычная формула swap = озу * 1.5, но это не наш случай):
$ sudo dd if=/dev/zero of=/swap bs=1024 count=512KДалее производим запись в начало файла системную информацию, которая будет использоваться ядром системы для работы с файлом подкачки:
$ sudo mkswap /swapПосле окончания операции на экране появится что-то вроде:
Устанавливается пространство для свопинга версии 1, размер = 536868 кБ без метки, UUID=54c60583-e61a-483a-a15c-2f1be966db85Следующим шагом активируем только что созданный SWAP файл:
$ sudo swapon /swapДалее нужно подредактировать файл fstab для подключения swap при следующей загрузке системы:
$ sudo echo "/swap swap swap defaults 0 0" | sudo tee -a /etc/fstabВот и всё, своп готов.
Установка и расширенная настройка NGINX
В качестве frontend-а(Фронтэнд) мы будем использовать всеми известный nginx.Если вы не будете использовать сервер для web-приложений — эту часть можно пропустить.
В стандартном репозитории конечно есть уже nginx, но хотелось бы версию посвежее и без плясок.1. Изменяем файл /etc/apt/sources.list:
$ sudo nano /etc/apt/sources.listи дописываем в самый низ:
deb http://nginx.org/packages/debian/ wheezy nginx deb-src http://nginx.org/packages/debian/ wheezy nginxВ случае если у вас debian отличный от 7, то вместо wheezy пишем его кодовое имя.
2. Обновляем источники пакетов и устанавливаем nginx:
$ sudo apt-get update && sudo apt-get install nginx3. Добавляем в начало файла nginx.conf новые параметры
timer_resolution 100ms; #Уменьшает разрешение таймеров времени в рабочих процессах, за счёт чего уменьшается число системных вызовов worker_rlimit_nofile 8192; #Изменяет ограничение на максимальное число открытых файлов (RLIMIT_NOFILE) для рабочих процессов worker_priority -5;# Выставляем более высокий приоритет процессу воркера4. Ищем worker_processes и выставляем количество по количеству ядер процессора, в нашем случае 1.
worker_processes 1;5. Ищем директиву events и приводим к виду:
events { worker_connections 2048; use epoll; }6. Редактируем директиву http, модифицируя или дописывая следующие параметры:
sendfile on; # экономия ресурсов при отдаче файлов #настройка сжатия контента при отдаче gzip on; gzip_min_length 1100; gzip_buffers 64 8k; gzip_comp_level 3; gzip_http_version 1.1; gzip_proxied any; gzip_types text/plain application/xml application/x-javascript text/css; # Таймаут при чтении тела запроса клиента client_body_timeout 10; # Таймаут при чтении заголовка запроса клиента client_header_timeout 10; # Таймаут, по истечению которого keep-alive соединение с клиентом не будет закрыто со стороны сервера keepalive_timeout 5 5; # Таймаут при передаче ответа клиенту send_timeout 10;7. Редактируем /etc/nginx/conf.d/sitename.conf или же (ubuntu) /etc/nginx/sites-available/sitename.conf где sitename будет имя вашего сайта:
$ sudo nano /etc/nginx/conf.d/sitename.confПриводим к такому виду:
#выделяем память на адреса клиентов limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; server { listen 80; #пишем адреса нашего сайта server_name sitename.net www.sitename.net; # Максимальный размер буфера для хранения тела запроса клиента client_body_buffer_size 1K; # Максимальный размер буфера для хранения заголовков запроса клиента client_header_buffer_size 1k; # Максимальный размер тела запроса клиента, прописанный в поле Content-Length заголовка. Если сервер должен поддерживать загрузку файлов, это значение необходимо увеличить client_max_body_size 1k; # Количество и размер буферов для чтения большого заголовка запроса клиента large_client_header_buffers 2 1k; #отсеиваем неиспользуемые типы запросов if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } #логируем посетителей access_log /var/log/nginx/sitename.access.log main; #и конечно же ошибки error_log /var/log/nginx/sitename.error.log main; #выставляем принудительно кодировку всех документов charset utf-8; location / { # Описываем зону (slimits), в которой будут храниться состояния сессий. Зона размером 1 Мб может хранить около 32000 состояний, мы устанавливаем ее размер равным 5 Мб limit_conn perip 10; limit_conn perserver 100; # Блокируем менеджеры загрузки и некоторые типы ботов # Внимательно проверяем и запоминаем(на будущее) список запрещенных ботов! if ($http_user_agent ~* LWP::Simple|BBBike|wget|curl|msnbot|scrapbot) { return 403; } # Блокируем referer спам. (не позволяем переход с гнусных сайтов) Список можно дополнить на своё усмотрение if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen|pron|money|free|jwh|speed|test|cash|xxx) ) { return 403; } #ДАЛЕЕ ИДУТ ВАШИ НАСТРОЙКИ ДЛЯ location / вашего сайта } }Далее в статье мы вернемся к этим настройкам.
Ковыряем системные переменные, защищаемся от некоторых видов атак
Данные параметры дают некоторую масло-масленность и в некоторых случаях повышают нагрузку.Редактируем /etc/sysctl.conf
$ sudo nano /etc/sysctl.confДописываем в конец
# Защита от smurf-атак net.ipv4.icmp_echo_ignore_broadcasts = 1 # Защита от неправильных ICMP-сообщений net.ipv4.icmp_ignore_bogus_error_responses = 1 # Защита от SYN-флуда net.ipv4.tcp_syncookies = 1 # Запрещаем маршрутизацию от источника net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 # Защита от спуфинга net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # Мы не маршрутизатор, если конечно это так net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 # Включаем ExecShield при атаках направленных на переполнение буфера или срыв стэка kernel.exec-shield = 1 kernel.randomize_va_space = 1 # Расширяем диапазон доступных портов net.ipv4.ip_local_port_range = 2000 65000 # Увеличиваем максимальный размер TCP-буферов net.ipv4.tcp_rmem = 4096 87380 8388608 net.ipv4.tcp_wmem = 4096 87380 8388608 net.core.rmem_max = 8388608 net.core.wmem_max = 8388608 net.core.netdev_max_backlog = 5000 net.ipv4.tcp_window_scaling = 1 #ускоряем высвобождение памяти(см. "Ускоряем общую работу системы") vm.swappiness=10Теперь можно перезагрузится
Ускоряем общую работу системы
Prelink и Preload. Prelink для создание статичных адресов библиотек, Preload это небольшое приложение, которое следит за файлами наиболее часто используемых приложений, и загружает их в память, когда система простаивает.1. Установка Prelink:
$ sudo apt-get -y install prelinkРедактируем файл /etc/default/prelink:
$ sudo nano /etc/default/prelinkИзмените строку с PRELINKING=unknown на PRELINKING=yesЗапускаем:
$ sudo /etc/cron.daily/prelink2. Установка Preload:
$ sudo apt-get -y install preloadВсе, больше ничего не требуется
Настраиваем брандмауэр(фаерволл)
Далее будут очень сомнительные конфигурации. Настраиваем число подключений с одного IP адреса.Спасает при некоторых видах DOS атак и брутфорса.
Выполняем:
$ sudo iptables -A INPUT -p tcp --dport 80 -i eth0 \ -m state --state NEW -m recent --setдалее:
$ sudo iptables -A INPUT -p tcp --dport 80 -i eth0 \ -m state --state NEW -m recent --update \ --seconds 15 --hitcount 20 -j DROPДанное правило ограничивает больше 20-ти подключение к 80 порту(web) за 15 секунд с 1 ip адреса.(кстати, подобное правило уже установлено на уровне nginx, но сжирает огромное количество ресурсов)
$ sudoiptables -A INPUT -p tcp --dport 354 -i eth0 \ -m state --state NEW -m recent --set $ sudoiptables -A INPUT -p tcp --dport 354 -i eth0 \ -m state --state NEW -m recent --update \ --seconds 60 --hitcount 4 -j DROPГде 354 порт вашего ssh сервера. Правило ограничивает количество подключений, не более 4-х подключений за 1 минуту. На деле у меня не получалось авторизовать более 1 раза за минуту.Далее это правило вы дальше можете адаптировать под себя и другие сервисы.
После рестарта системы все правила обнулятся, по этому делаем следующее:создаем и редактируем файл /etc/network/if-up.d/00-iptables
$ sudo nano -w /etc/network/if-up.d/00-iptablesПишем в него:
#!/bin/sh iptables-restore < /etc/firewall.confсохраняем и делаем файл исполняемым:
$ sudo chmod +x /etc/network/if-up.d/00-iptablesСохраняем правила в файл:
$ sudo iptables-save | sudo tee /etc/firewall.confВсё, правила настроены и сохранятся после перезагрузки системы.
aposnov.ru
УСТАНОВКА, НАСТРОЙКА И ОПТИМИЗАЦИЯ ВЕБ-СЕРВЕРА НА DEBIAN
Оптимизация apacheПрежде всего включаем следующие модули: deflate, expires, headers, php5, rpaf (установить его если не настроен)
Затем настраиваем виртуальные хосты:
<Directory />Options FollowSymLinksAllowOverride AllOrder Allow,DenyAllow from all</Directory>NameVirtualHost *Listen *:80Include /etc/apache2/sites/
Затем для каждого сайта добавляем свои файлы в /etc/apache2/sites/ следующего формата:
<VirtualHost *>ServerName example.ruServerAlias www.example.ruDocumentRoot /home/example.ru/docs/ErrorLog /home/example.ru/logs/error.logCustomLog /home/example.ru/logs/access.log combined</VirtualHost>
Теперь перейдем к оптимизации. Добавляем файл /etc/apache2/conf.d/optimize (по рекомендациям webo.in):
# добавляем Content-Type для всех файлов с расширением .gz AddEncoding gzip .gz # включаем сжатие для HTML- и XML-файлов AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml # и для иконок (об этом чуть ниже) AddOutputFilterByType DEFLATE image/x-icon # также для CSS- и javascript-файлов AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE application/x-javascript # выставляем максимальную степень сжатия (если возникнут проблемы с # серверной производительностью, следует уменьшить до 7 или 1) DeflateCompressionLevel 9 # и максимальный размер окна для архивирования DeflateWindowSize 15 # отключаем архивирование для «проблемных» браузеров BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # добавляем заголовок Vary для корректного распознавания браузеров, # находящихся за локальными прокси-серверамиHeader append Vary User-Agent # запрещаем кэширование на уровне прокси-сервера для всех файлов, # для которых у нас выставлено сжатие, <FilesMatch .*\.(css|js|php|phtml|shtml|html|xml)$>Header append Cache-Control: private </FilesMatch>#Устанавливаем Expires <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 week" </IfModule>
# Устанавливаем ETag FileETag MTime Size
Можно переходить дальше.
Оптимизация Nginx
Первым делом заставляем apache слушать локальный нестандартный порт:
Listen 127.0.0.1:8080
И правим файл /etc/nginx/nginx.conf примерно так:
user www-data;worker_processes 2;
error_log /var/log/nginx/error.log;pid /var/run/nginx.pid;
events {worker_connections 1024;}
http {include /etc/nginx/mime.types;default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $status ''"$request" $body_bytes_sent "$http_referer" ''"$http_user_agent" "http_x_forwarded_for"';access_log /var/log/nginx/access.log;
sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 30;
gzip on;
server {listen 80;
location / {proxy_pass http://127.0.0.1:8080/;proxy_redirect off;log_not_found off;
proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;client_body_buffer_size 128k;
proxy_connect_timeout 40;proxy_send_timeout 90;proxy_read_timeout 40;
proxy_buffer_size 4k;proxy_buffers 4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;}}}
Перезагружаем apache и nginx. Наблюдаем за уже значительным увеличением производительности.
Оптимизация PHP
После установки PHP, также устанавливаем eaccelerator. Затем правим php.ini
max_execution_time = 30 Сколько CPU-секунд может потреблять скрипт
max_input_time = 60 Как долго (в секундах) скрипт может ждать входных данных
memory_limit = 32M Какое количество памяти (в байтах) может расходовать скрипт, прежде чем он будет убит. Для неслабых приложений следует устанавливать этот лимит больше 64M
output_buffering = 4096 Какое количество данных (в байтах) накапливается в буфере, прежде чем они будут отправлены клиенту
Размер этих значений обычно зависит от приложения. Если вы принимаете от пользователей большие файлы, max_input_time может быть увеличен или в php.ini, или путем его переопределения в коде. Подобным образом, для программ, потребляющих большое количество CPU или памяти могут потребоваться более высокие значения. Цель состоит в том, чтобы уменьшить воздействие "прожорливой" программы, поэтому глобальная отмена этих настроек не рекомендуется. Другое замечание относительно max_execution_time: это относится ко времени, затраченному CPU на процесс, а не к абсолютному времени. Таким образом, программа, совершающая большое количество вводов/выводов и небольшое количество вычислений, может выполняться намного дольше, чем max_execution_time. max_input_time также может быть больше, чем max_execution_time.
Количество записей, которые может сделать PHP, может настраиваться. В промышленной эксплуатации экономят место на диске, отменяя все журналы, кроме самых критических. Если журналы необходимы для диагностики проблем, вы можете вернуть то журналирование, которое необходимо. error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR включает журналирование, достаточное для выявления проблем, но удаляет из скриптов лишнюю информацию.
Оптимизация MySQL
Первым делом используем скрипты: MySQLtuner.sh и tuning-primer.sh. Следуя появляющимся инструкциям настраиваем my.cnf.
Для правильной работы в кодировке utf8 в файле /etc/mysql/my.cnd настраиваем следующее (в соответствующих секциях):
[client]port = 3306socket = mysqldefault-character-set=utf8
[mysqld]port = 3306socket = mysqlskip-lockinginit_connect='SET collation_connection = utf8_general_ci'init_connect='SET NAMES utf8'default-character-set=utf8character-set-server = utf8collation-server = utf8_general_ci[mysql]default-character-set=utf8key_buffer = 1M max_allowed_packet = 2M table_cache = 4 sort_buffer_size = 64K read_buffer_size = 256K read_rnd_buffer_size = 256K net_buffer_length = 2K thread_stack = 64K query_cache_limit = 256K query_cache_size = 4M
Проверять переменные можно этими запросами:
show variables like "%character%";show variables like "%collation%";
Чтобы задать кодироку по-умолчанию (напр. если была latin1): 1. Для все БД:
alter database DBNAME default character set utf8 collate utf8_general_ci
Для таблицы:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Кстати, Разница между utf8_general_ci и utf8_unicode_ci, в том, что utf8_unicode_ci поддерживает expansions, то есть сопоставление одного символа нескольким (например - в Германии ß = ss ). Т.е. применять utf8_unicode_ci нужно например для немецкого или китайского языков. Если на сайте будет только русский или английский, то достаточно utf8_general_ci, которая будет работать гораздо быстрее.
null-prog.ru
Оптимизация Debian/Ubuntu пакетов под свой компьютер при помощи apt-build
Возможно вы новичок в мире линукса или опытный пользователь, но не достаточно хорошо знаете, как работает система пакетов Debian'а. И вам интересно как устанавливать программы так, что бы система правильно обрабатывала обновления и зависимости. Возможные методы установки программ такие: скачивание архива с исходными текстами, распаковка, запуск компилирующих скриптов, и затем установка. Лёгкая задача для любого пользователя линукса, но это не будет согласовано с системой пакетов Debian'a. Второе решение - использование stow, для более удобного управления обновлениями, но stow не учитывает зависимости. Лучшее решение - использование apt-build для перекомпиляции программ уже упакованных для Debian'a и Ubuntu.Попробуйте это и вам понравиться
В первый день был создан репозиторий
Установите apt-build обычным способом:
[shaddai@patator]~ $ sudo apt-get install apt-build
Сразу после установки будет пару вопросов: про папку для сборки, опциикомпилятора, архитектуру процессора. Эта информация сохраняется в/etc/apt/apt-build.conf. Если вы сделаете ошибку, то сможете вернутсяи исправить её. Вот пример:
[shaddai@patator]~ $ cat /etc/apt/apt-build.confbuild-dir = /var/cache/apt-build/buildrepository-dir = /var/cache/apt-build/repositoryOlevel = -O3march = -march=pentium2mcpu = -mcpu=pentium2options =[shaddai@patator]~ $
Касательно параметров build-dir и repository-dir, убедитесь, что этипапки расположены на разделе с достаточным количеством свободногоместа. Большинство пакетов (все ?) собраны с level 2 оптимизацией, такчто если вы выберете level 3 и укажете архитектуру вашего процессора,можно ожидать увеличение производительности. Здесь, Gentoo-фаны сразуспросят меня: "а флаги?". К сожалению, их нет. Под "флагами",Gentoo-пользователи подразумевают билиотеки с которыми собираютсяпрограммы. Обычному пользователю не стоит менять зависимости пакетов.
Если вы всё же так поступите, то можете сделать ошибку которой не былов первоначальном пакете. Не составляйте отчёт про ошибку. У вас уже неофициальный Debian, а ваш собственный. Наконец, вам понадобитсядополнительная строка в вашем /etc/apt/sources.list, если её там ещёнет:
deb-src ftp://debian_mirror/ [stable|testing|unstable] main contrib
Запустите apt-get update для повторной синхронизации индекса пакетов.Всё. Вы готовы использовать apt-build!
Ну, и что теперь?
Рассмотрим в деталях основные команды apt-build'а. Фактически, подобноapt-get'у, есть несколько ключевых слов, таких как update, upgrade,install, source, clean-build.
Сначала, update команда. Она обновляет индекс списка пакетов, файлы в/var/lib/apt/lists. Команда upgrade обновляет все пакеты. Командуinstall разберём на примере:
[shaddai@patator]~ $ sudo apt-build install memstat-----> Installing build dependencies (for memstat) <----- Reading Package Lists... Done Building Dependency Tree... Done 0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded. -----> Downloading memstat source (memstat) <----- Reading Package Lists... Done Building Dependency Tree... Done Need to get 22.4kB of source archives. Get:1 ftp://127.0.0.1 1.0.4/main memstat 0.4-1 (dsc) [482B] Get:2 ftp://127.0.0.1 1.0.4/main memstat 0.4-1 (tar) [21.9kB] Fetched 22.4kB in 0s (322kB/s) dpkg-source: extracting memstat in memstat-0.4 -----> Building memstat <----- ... ... ... dpkg-genchanges: binary-only upload - not including any source code dpkg-buildpackage: binary only upload (no source included) -----> Moving packages to repository <----- -----> Updating repository <----- Using: -O3 -mcpu=pentium2 -march=pentium2 ... ... Reading Package Lists... Done Building Dependency Tree... Done Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: memstat Как видим, apt-build делает несколько шагов: установка пакетов необходимых для компиляции, скачивание исходных текстов, затем компиляция и установка пакета. Если захотите сами переупаковывать программы, используйте dpkg-buildpackage. Он не устанавливает зависимости, как apt-build, переупаковка с которым может быть сложной и требовать дополнительных навыков. До сих пор, мы видели только простую перекомпиляцию, с целью оптимизации, если вы хотите изменить исходные тексты, изменить файл правил или другие файлы в debian/ папке, apt-build может быть полезным, и создать вам основу пакета. Однако, я рекомендую прочитать руководство разработчика. Что ещё? Давайте, посмотрим на команду: source. Она скачивает пакет с исходными текстами, diff-файл и файлы, необходимые для сборки пакета (правила, управление, файлы со списком изменений и т.д.), она размещает это всё в папке для сборки, затем распаковывает и накладывает патч из diff-файла. Пример: [shaddai@patator]~ $ sudo apt-build source ethereal -----> Downloading ethereal source (ethereal) <----- Reading Package Lists... Done Building Dependency Tree... Done Need to get 6170kB of source archives. Get:1 ftp://127.0.0.1 1.0.4/main ethereal 0.10.4-2.1 (dsc) [821B] Get:2 ftp://127.0.0.1 1.0.4/main ethereal 0.10.4-2.1 (tar) [6154kB] Get:3 ftp://127.0.0.1 1.0.4/main ethereal 0.10.4-2.1 (diff) [14.6kB] Fetched 6170kB in 1s (3533kB/s) dpkg-source: extracting ethereal in ethereal-0.10.4 Обратите внимание на третий скачанный файл. Это описание пакета. Теперь у вас есть исходные тексты и файлы, необходимые для сборки пакета, который вы можете изменять, как хотите. Как только закончите изменения можете собрать и установить пакет командой: apt-build install изменённый_пакет. Но, как уже было сказано ранее, у вас теперь ваш собственный пакет. Ваши изменения могут создать новые ошибки. Изменение пакетов это опасная игра, если не знать что делаешь. Основные параметры мы уже знаем, но есть ещё несколько тонкостей. Например: clean-build это то же самое для apt-build'а что и clean команда для apt-get'а, но она очищает папку сборки, а не репозиторий. Вы можете удалить пакет командой remove, или получить информацию по исходным текстам командой info. Наконец, взгляните на страницу документации apt-build'а, на которой есть несколько интересных параметров. Но самое интересное я придержал напоследок. С помощью if и apt-build'а мы тоже можем пересобрать все установленные пакеты! Полная пересборка всех пакетов системы Последняя команда, о которой я хочу рассказать, - это world. Это слово должно кое что напомнить людям, которые любят маленького красного дружка. И в самом деле, на BSD-системах можно перекомпилировать все порты. Просто перейдите в папку /usr/ports и наберите make world. Эта идея была использована автором apt-build'a, и вот что будет если вы захотите пересобрать всё: [shaddai@patator]~ $ sudo apt-build world -----> Rebuilding the world ! <----- You should read README.Debian first [shaddai@patator]~ $ Чтение этого знаменитого README похоже обязательно. Мы узнаём, что надо составить список пакетов, которые мы хотим перекомпилировать и установить вместо текущих пакетов. Из списка следует убрать некоторые проблемные пакеты, такие как: gcc, libc6, или жизненно важные. Давайте, построим этот список: root@patator:~ # dpkg --get-selections | awk '{if ($2 == "install") print $1}' > /etc/apt/apt-build.list
После редактирования этого списка, можете делать apt-build world дляперекомпиляции и оптимизации всей вашей системы.
И вот он, волнующий момент!
Вы использовали apt-build с целью создания вашего собственного пакета,и после обновления командой apt-get dist-upgrade, один из вашихвеликолепных пакетов заменён на официальный. Как жаль. Вы можетеизбежать этого, привязав ваш пакет к apt-build'у. Для задания болеевысокого приоритета пакету собранному apt-build'ом надоотредактировать файл /etc/apt/preferences примерно так:
Package: *Pin: release o=apt-buildPin-Priority: 990
Таким образом, вы можете не беспокоится, что обновление дистрибутивазаменит ваш пакет официальным. Для проверки приоритетов репозиторияиспользуйте команду apt-cache policy, которая выведет примерноследующее:
[shaddai@kavado]~ $ apt-cache policyPackage Files:100 /var/lib/dpkg/statusrelease a=now500 http://ftp2.de.debian.org sid/non-free Packagesrelease o=Debian,a=unstable,l=Debian,c=non-freeorigin ftp2.de.debian.org500 http://ftp2.de.debian.org sid/contrib Packagesrelease o=Debian,a=unstable,l=Debian,c=contriborigin ftp2.de.debian.org500 http://ftp2.de.debian.org sid/main Packagesrelease o=Debian,a=unstable,l=Debian,c=mainorigin ftp2.de.debian.org990 file: apt-build/main Packagesrelease o=apt-build,a=apt-build,l=apt-build,c=mainPinned Packages:
Использование привязки пакетов не имеет побочных последствий. Нобудьте внимательны при обновлениях. Действительно, если вы решитепересобрать библиотеку, от которой зависит несколько программ, и онане будет обновляться, то это может заблокировать обновление пакетов.
Который час? 15 p.m. ?
Пора закругляться. Надеюсь, я внушил вам сильное желание использоватьapt-build - полезный и интересный инструмент. Автор apt-build'апредупреждает вас не перекомпилировать gcc и некоторые другие пакеты.И ни я, ни он не отвечаем за ваши ошибки. Так что если убьёте вашDebian, не пишите мне (ну разве только что бы рассмешить). И ещёучтите, что apt-build не создаёт новых пакетов. Если программа,которую вы хотите установить, не упакована для Debian'а, apt-build несможет скачать исходные тексты с зеркал Debian'а и откомпилировать их.
homesapians.blogspot.com