9 заметок с тегом

администрирование

Позднее Ctrl + ↑

Оптимизируем сервак. Memcache


В предыдущей статье я описал пару простых приёмов освобождения оперативной памяти. Сейчас же поговорим насчёт ускорения работы скриптов.

Хорошим тоном нынче является связка Apache + Nginx, которая работает чуть быстрее по сравнению с обычным Апачем, в силу особенностей передачи запросов от Nginx ему. Дополнением к этой связке будет служить мод memcache и eAccelerator, которые призваны кэшировать и ускорять выполнение php-скриптов.

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

Установка memcache. Способ 1

Всё ниже описанное подходит для серверов с CentOS 5 и им подобным.

Зайдите в шелл (для этого можно использовать популярную программку PuTTy) и вводите следующие команды (можно копировать здесь и вставлять туда правой кнопкой мыши):

cd /usr/local/src
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
rpm -ivh rpmforge-release-0.5.1-1.el5.rf.i386.rpm
yum -y install memcached

После чего в файле /etc/sysconfig/memcached и замените параметр OPTIONS на:

OPTIONS="-l 127.0.0.1"

Добавляем memcache в автозагрузку командами:

/etc/init.d/memcached start
chkconfig memcached on

Следующим пунктом нужно установить библиотеку PHP-memcache:

yum -y install php-pecl-memcache

В файл php.ini (в /etc/) в секцию [extensions] внесите строчку:

extension=memcache.so

Перезагрузите httpd:

/etc/init.d/httpd restart

или

service httpd restart

Установка memcache. Способ 2

yum install libmemcache memcached -y

Стартуем:

memcached -d -m 256 -l 127.0.0.1 -p 11211 -u nobody

Можно также добавить в автозагрузку командами из предыдущего способа. Для следующего шага потребуется наличие библиотеки phpize. Если таковой нет, нужно установить php-devel:

yum install zlib-devel

Устанавливаем библиотеку для работы с PHP:

wget http://pecl.php.net/get/memcache-2.1.2.tgz
tar -xvf memcache-2.1.2.tgz && cd memcache-2.1.2
phpize && ./configure --enable-memcache && make && make install

В файл php.ini (в /etc/) в секцию [extensions] внесите строчку:

extension=memcache.so

Теперь библиотека установлена и должна работать. Обычно она ускоряет работу скриптов примерно на 30%.

2011   CentOS   администрирование

Оптимизируем сервак. Часть 1.

Ну, как и обещал, несколько коротких статей с советами о том, что может помочь ускорить ваш VPS.

Имеется достаточно немаленький по объёму сайт, состоящий из MediaWiki и форума. Поскольку со временем он разросся (хоть и не до таких впечатляющих масштабов, как хотелось бы, но хостеров неприятно впечатлил всё же), пришлось искать новый хостинг. Нашли устраивающий и по цене, и по качеству (о нём я уже писал, оперативный саппорт по-прежнему на высоте).

Но вот незадача: вроде бы купленный VPS и работает, но единственный размещённый сайтец немного тормозит (а MediaWiki — много, время генерации главной страницы было порядка 4-6 секунд).

В один прекрасный момент решил всё-таки получше поштудировать интернетную литературу по данному вопросу. Статей написано немало, потому здесь лишь буду пересказывать их содержимое.

Во-первых, достаточно удобно будет обзавестись FTP-аккаунтом от корня сервера, чтобы проводить манипуляции в нём. В шелле хоть и можно производить действия, но гораздо медленнее. Если есть SSH, то можно попробовать установить и соединение по sFTP с логином и паролем администратора. Например, SmartFTP такое позволяет.

Совет 1

Первым делом, если у вас на серве стоит OpenVZ, то маленькая хитрость существенно увеличит объём свободной оперативки, которая нам частично ещё пригодится.

Найдите файл rc (в моём случае он располагается в /etc/rc.d/) и добавьте где-нибудь вверху строчку:

ulimit -s 1024

Это ограничит потребление ресурсов, которое несколько раздута из-за особенностей OpenVZ. Чем меньше значение (в Кбайтах), тем больше должно освободиться памяти, но всё-таки не стоит с этим перебарщивать. После изменения перезагрузите сервер (командой reboot в шелле, например). Одна строчка освободила порядка 100 Мб оперативки, ну и общая загрузка несколько снизилась.

Совет 2

Если не используете в MySQL базы InnoDB, их можно отключить. Найдите файл my.cnf (у меня он лежит в /etc/) и добавьте в секцию [Mysqld] строчку:

skip-innodb

После сохранения перезагрузите сервер БД из шелла, набрав:

service restart mysqld

или

/etc/init.d/mysqld restart

Отключение этой штуки мне дало около 50-80 Мб освободившейся оперативки.

Часть вторая: Оптимизируем сервак. Memcache
Часть третья: Оптимизируем сервак. eAccelerator

2011   CentOS   администрирование

NETIO.SYS и экран смерти


Нет, это не айтишная версия гарепоттера, а суровая бытовуха. Уже много-много времени мучала одна назойливая проблема: при скачивании чего-нибудь через uTorrent периодически появлялся синий экран DRIVERS_IRQL_NOT_LESS_OR_EQUAL с проблемой в NETIO.SYS.

Для Windows 7 у мелкомягких никакого решения проблемы не было (зато есть фикс для XP и Висты, естественно без возможности установить на своей семёрке). В сети также решений определённых нет: от удаления антивируса (в частности, Нода в безопасном режиме) до переустановки драйверов для сетевухи и видеокарты.

Сам же уже перепробывал кучу вариантов: сменил антивирь с Нода на KIS 2010 (кстати, думаю, не зря), обновлял дрова сетевухи, ну и в конце концов полностью переставил систему. Был разочарован, когда она, свеженькая, подлым образом снова вылетела при попытке докачать сериал.

Я же, надеюсь, что нашёл решение для своей проблемы: поскольку BSoD вызывал лишь uTorrent при скачиваниях, потому скорее всего проблема была в нём. Откатился к версии 1.7.7 и проблема пока более не наблюдается. Буду надеяться, что больше и не выскочит этот поганый экран смерти.

2010   администрирование   лайфхаки   факап

Бэкап базы данных

harddrive
Наверняка кто-то из вас сталкивался с такой неприятной проблемой как ленивый хостер, который лишь наобещал вам делать бэкапы данных каждый день, а сам этого не выполняет. И вот в час Ч его сервер полетел к чертям, вместе с вашим сайтом, а потом выясняется, что свежих бэкапов никто делать и не собирался, а последний — двухмесячной давности, что, конечно же, вряд ли устраивает прогрессивных вебмастеров.

Посему предлагаю такое элегантное решение как бэкап базы на e-mail.

Вот скрипт, который поможет в этом муторном деле:

<?
$datestamp = date("d.m.Y");      // Current date to append to filename of backup file in format of YYYY-MM-DD
/* CONFIGURE THE FOLLOWING SEVEN VARIABLES TO MATCH YOUR SETUP */
$dbuser = "";            // Database username
$dbpwd = "";            // Database password
$dbname = "";            // Database name. Use --all-databases if you have more than one
$filename= "backup-$datestamp.sql.gz";   // The name (and optionally path) of the dump file
$to = "you@remotesite.com";      // Email address to send dump file to
$from = "you@yourhost.com";      // Email address message will show as coming from.
$subject = "MySQL backup file";      // Subject of email

$command = "mysqldump -u $dbuser --password=$dbpwd $dbname | gzip &gt; $filename";
$result = passthru($command);

$attachmentname = array_pop(explode("/", $filename));   // If a path was included, strip it out for the attachment name

$message = "Compressed database backup file $attachmentname attached.";
$mime_boundary = "&lt;&lt;&lt;:" . md5(time());
$data = chunk_split(base64_encode(implode("", file($filename))));

$headers = "From: $from\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: multipart/mixed;\r\n";
$headers .= " boundary=\"".$mime_boundary."\"\r\n";

$content = "This is a multi-part message in MIME format.\r\n\r\n";
$content.= "--".$mime_boundary."\r\n";
$content.= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$content.= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$content.= $message."\r\n";
$content.= "--".$mime_boundary."\r\n";
$content.= "Content-Disposition: attachment;\r\n";
$content.= "Content-Type: Application/Octet-Stream; name=\"$attachmentname\"\r\n";
$content.= "Content-Transfer-Encoding: base64\r\n\r\n";
$content.= $data."\r\n";
$content.= "--" . $mime_boundary . "\r\n";

mail($to, $subject, $content, $headers);

unlink($filename);   //delete the backup file from the server
?>

Для большей эффективности рекомендую скрипт вставить в cron и настроить частоту выдачи бэкапов по своему усмотрению.

Также можно запастись и скриптом, который аккуратно сложит на FTP вашу базу, а то и весь сайт.

2009   администрирование