.
Место для Вашей рекламы
18 Октябрь 2016

Сайт тормозит! Как провести технический аудит сайта и сервера?

Всем привет!
Итак, сегодня коснулся очень интересной задачи — полный технический аудит сайта и сервера в целом!
Собственно, задача звучит просто — сайт сильно тормозит! вплоть до полного ступора — что делать? как выявить причину падения?
Это я и называю полным техническим аудитом сайта и сервера.
1. Протестировать всё что можно протестировать и выявить все проблемы
2. Дать рекомендации по их устранению.
3*. Устранить проблемы

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

Все пункты довольно не просты — причина проблем может скрываться хоть где — начиная от аппаратной части, заканчивая отсутствием индекса по полю в таблице БД.
Последний пункт под большой звёздочкой т.к. проекты бывают разные … 🙂 например, в данный момент изучаю сапомисный проект на yii фреймворке (что печально — без придерживания логики фреймворка)

Опубликую полностью свой первый отчёт, сделанный вообще без какого либо доступа к сайту/серверу — очень рассчитываю на Ваши дополнения, комментарии.
Особенно интересуют способы и инструменты для поиска проблем.

Читать полностью »

рубрики: Администрирование, Оптимизация | Комментарии (0)

7 Сентябрь 2016

История добавления PHP расширения SOAP на FreeBSD 9.0

Всем привет!
Собственно, когда меня касаются задачи по администрированию фришки (да и линуха тоже — чего греха таить) на меня нападает печаль 🙂
Не являясь гуру в этих областях у меня ещё не разу не проходило всё гладко, с первой попытки. ВСЕГДА какие то проблемы вылезают…
А тут друг сидит на виртуалке с FreeBSD 9.0 на PHP 5.4 (повышать версию нельзя из за специфики проекта — пока не готов он к переезду) и нужно всего то навсего добавить soap модуль в PHP.
Вроде всё просто … но см.выше — просто у меня не бывает
Итак, иду в порты, думаю быстренько сконфигурирую пых (который уже в даунгрейде в портах лежал т.к. 5.4 уже в портах в наличии не было).
make config и первое западло — куча ошибок, предупреждений — элементарное базовое make не работает ни для одного из портов!
Читать полностью »

рубрики: NIX, Администрирование | Комментарии (0)

16 Август 2016

Битрик VM — установка PHP 7.0.9 вместе с PHP 5.6.24

В продолжении предыдущего поста о всяческих обновлениях …
Итак, довольно прилично подзаебавшись с обновой на PHP 5.6 я решил не махать так шашкой — а реализовать задуманное более степенно.
То есть установить PHP 7.0.9 на дублирующий сокет и потихоньку тестировать и настраивать (как выяснилось позже это была очень правильная мысль).
За основу была взята статья но не всё пошло так гладко — пришлось допиливать.

PHP 5.6 у меня уже был установлен и в режиме php-fpm так же использовался.
Сам phpbrew я установил, так же под новым юзером, и чтобы не путаться все пути оставил такие же как в статье.
Скрипт запуска у меня никак не вставал, поэтому я переделал из запуска существующего php-fpm изменив настройки на конфиги, пид и лок файлы
В www.conf я поменял и файл сокет (было listen=/tmp/php-fpm.sock стало listen=/tmp/php7-fpm.sock)

В итоге с параметрами как в статье php у меня скомпилировался и даже запустился, но как выяснилось некоторых модулей не хватило.

По идее модули ставятся без проблем командой phpbrew ext install [module name]

НО тут нужно чётко понимать, что phpbrew использует при компиляции исходники — как оказалось у меня для необходимых модулей их небыло

Модуль для MYSQL ставим как в статье!

phpbrew ext install https://github.com/php/pecl-database-mysql.git

Подробности — как обычно ищем в логах установки (где логи пишется в процессе установки), например для курла у меня логи был тут
/opt/phpbrew/.phpbrew/build/php-7.0.9/ext/curl/build.log

вот список того, что мне пришлось доустановить для компиляции phpbrew некоторых модулей
yum install libxml2
yum install libxml2-devel
yum install libxslt-devel
yum install libmcrypt-devel

а вот с установкой curl пришлось поискать подходящий репозиторий, вот инструкция
1) create a new file /etc/yum.repos.d/city-fan.repo
2) Paste the following contents:
[CityFan]
name=City Fan Repo
baseurl=http://www.city-fan.org/ftp/contrib/yum-repo/rhel$releasever/$basearch/
enabled=1
gpgcheck=0
3) type:
yum clean all
yum install curl
4) And it’s done.
yum install curl-devel

phpbrew ext install curl

после всех инсталяций не забываем дёргать сервис
service php7-fpm restart (название — это имя вашего переделанного файла запуска в init.d)
так же для того чтобы сервис стартовал сам- нужно сделать симлинки в rc3.d

Ещё в www.conf для php-fpm необходимо прописать имя юзера и группы под кем запускается php7-fpm (без этого у меня не работало).
listen.owner=bitrix
listen.group=bitrix
listen.mode=666

Об одном баге (а точнее особенности) — напишу отдельно, т.к. меня она повергла в небольшой шок 🙂
После включения Zend Opcode Cache (у меня это был последний этап) — решил я затестировать работу на простых скриптах.
echo time(); — вывело время
echo «abc «.time(); — снова вывело время (причём в реалтайме), но без строки abc !!!
То есть динамический вывод работал, а то что поменялось практически в статике — нет (хотя этот тоже динамика, но без функций).
В общем немного потупив, дошло, что трабла в оптимизаторе, а точнее в настройке параметра opcache.revalidate_freq=60
Т.е. после изменения файла должно пройти 60 секунд, прежде чем интерпретатор его обновит в кэше (если конечно он был кэширован ранее).
На нужный домен (где идёт разработка) можно в php.ini секцией задать свои значения

[HOST=dev.site.com]
opcache.revalidate_freq = 0

Так же смотрим на удалённые функции из интерпретатора https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7 заменяем их правильными аналогами

Вроде на этом вроде всё!

P.S.
Чуток я разочаровался по приросту быстродействию и потреблению ресурсов, но оно для моего проекта объяснимо — слишком он простой 🙂

рубрики: Bitrix, VM, Администрирование | Комментарии (0)

16 Август 2016

Битрик VM — обновление системы и PHP до 5.6.24

Собственно, после того, как на Битриксовой виртуалке отказалась ставится Joomla 3 — понял, что тянуть с обновлениями уже дальше нельзя!
Тут большинство скажет, касательно обновлений — нужно делать всё перманентно и вовремя — согласен на все 100% !
Но как обычно — с временем туговато, а последствия обновлений как всегда непредсказуемы. Да и не забываем притчу «солнце всходит и заходит — не трогай, пусть работает» 🙂

Итак, имеем битриксовую виртуалку с довольно устаревшей CentOs 5.8 (со всеми пакетами) и PHP 5.3.3 на борту (bitrix.env 4.0.2)

Перелопатил много инфы, кратко решение вопроса: (как делал я)
* полный бэкап всей виртуалки
* внутри — полный бэкап /etc/ — при обновах старые конфиги переименовываются и т.п…
* обновляем систему (yum update или в меню битрикса system update — одно и тоже)
* добавляем remi репозиторий
Centos 6
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
После установки пакета нужной версии репозитория, у Вас появится соответствующий файл: /etc/yum.repos.d/remi.repo
Теперь необходимо включить нужную версию PHP. Для этого редактируем /etc/yum.repos.d/remi.repo.
Для обновления PHP до 5.6 достаточно установить enabled=1 в главной секции [remi].

После чего обновляем bitrix.env до 5й версии через меню битрикса (иначе этот пакет будет мешать обновиться PHP)
Далее yum update и вуаля имеем PHP 5.6.24

Теперь к самому вкусному — грабли перехода
С повышением версии PHP куча фукнций стали устаревшими, кое какие вообще прекратили своё существование — куча сайтов у меня пришли в непотребный или полностью нерабочий вид.

Первое — старые версии Джумлы (и не только), портянка предупреждений — просто убираю вывод ошибок в .htaccess (либо как вариатн настроить error_reporting — убрать депрекатед и предупреждения)
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off

Второе — при апдейте слетели подключаемые модули, соответственно валят ошибки
Fatal error: Call to undefined function mysqli_init() in
Fatal error: Call to undefined function curl_init() in
и т.д. и т.п

Идём в /etc/php.d/ — переименовываем подключения (убираем .disabled в файлах) — подключаются *.ini файлы после чего рестартим аппач

Ещё фишка — передача амперсанта в функции. Во всех вызовах фукнций function(&$variable) — апмерсант убираем!

Вроде всё — всем успехов!

P.S. Почитал инфу о PHP7 — поставил на виртуалку одновременно с 5.6 в режиме php-fpm на другой сокет.
Пока эксперементирую тестирую (тут ещё жестче с переходом). Как будет результат — отпишу.

рубрики: Bitrix, Администрирование | Комментарии (0)

30 Июнь 2016

Как переименовать группу файлов в Linux CentOs

Задача — быстро переименовать файлы *.txt в *.1251.txt
Решение
rename .txt .1251.txt *.txt

Утилитка поддерживает регулярные выражения!
В моём случае параметры rename
* что ищем в названии = .txt
* на что меняем = .1251.txt
* в каких файлах = *.txt

рубрики: Администрирование | Комментарии (0)

15 Апрель 2016

Настройка кэширования в Битриксе — что если не работает ?

Случай конечно можно сказать уникальный!
Но тем не менее решил я поделиться и таким опытом.

Обращаются ко мне с определённым ТЗ (не имеет отношение к сабжу) … и я в процессе ознакомления с сайтом, замечаю приличные тормоза (до 10 сек) при открытии страниц.
А конктретно — страничка с компонентом видео потока ютуба. Посмотрел код — вызывается компонент step2use:youtube.subscribe.
Поковырял — смысл простой — тащит канал с ютуба, парсит, результат кэширует и выводит.
Ладно, 10 секунд для запроса канала с ютуба я ещё понимаю, но почему при повторномо открытии такие тормоза?
Проверил — кэш компонента включен! Чудеса!
Тут к бабке не ходи — кэш глючит!
Накинул самый простой скрипт для проверки кэша

InitCache(3600, '12356356gt' , '/' )) {
echo "cache";
$res = $cache->GetVars();
$arResult = $res['arResult'];
} elseif ($cache->StartDataCache()) {
echo "no cache";
$arResult = array(1,2,3,4,5);
$cache->EndDataCache(array("arResult"=>$arResult));
}
?>

и тот хоть ты тресни выводит «no cache» — что говорит о том, что кэш не работает!

Далее посмотрел в dbconn.php и .setting.php — кэш настроен на memcashed (кэширование в памяти)
Перенастроил на файловый кеш — скрипт отработал и всё залетало!
Страничка стала генерироваться за 0.2 секунды ! ускорение в 50 раз!

Но всё же решил кэш настроить как и задумано на memcached!
дал рутом
#service restart memcashed
а самого сервиса то и нет! 🙂

Ну далее, всё как в книжке
# yum -y install memcached

настройки я сделал как в статье (чуть увеличил)
в файле /etc/sysconfig/memcached

MAXCONN = «1024» — количество одновременных подключений (по умолчанию 1024) — больше думаю не понадобится
CACHESIZE=»2048″ — объем выделяемой памяти для кеша (по умолчанию 64MB) — я дал 2 гига
USER=»bitrix» — пользователь, от которого будет запущен memcache
OPTIONS=»-t 16 -s /tmp/memcached.sock» — количество потоков и путь к сокету — у меня один домен на сервер, можно и через сокет — быстрее вроде

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

ВСЕ залетало!
Страничка с компонентом место 10 секунд стала открываться за 0.1 секунду — т.е. прирост в скорости в 100 раз! 🙂

После экспериментов с кэшами я подумал, что не помешало бы сделаать полную очистку кэша (чтоб все с нуля и в память! и лишнее место на диске почистить)
Запустил чистку и … сервер встал наглухо!
Смотрю top — 99% на mysqld
Поставил mytop — смотрю там удаление из таблицы b_cache_tag с параметром каким то (уже не помню)
Зашел в phpmyadmin — и охренел, таблица b_cache_tag — почти 30 миллионов записей и под 4 гигабайта размером!
Что это за наследие «прошлого» я разбираться не стал — очистил всю табличку
TRUNCATE TABLE b_cache_tag (таблица для управляемого кэша, а я все равно весь кэш чистить собрался)
и далее уже ещё раз из панели «очистить весь кэш» — на этот раз кэш нормально очистился, и теперь сайт живёт совсем другой жизнью 🙂

рубрики: Bitrix, Администрирование, Полезности | Комментарии (0)

15 Апрель 2016

Настройка почты

После очередного ТЗ по настройке почты, решил отдельный пост этому вопросу посвятить.
Итак, что же необходимо для того, чтобы почта нормально уходила, как это диагностировать и настраивать?

Во первых конечно же необходимо настроить в принципе саму почтовую систему на сервере — я обычно использую MTA Sendmail или Exim
(непосредственно почтовый сервер на виртуальной машине не поднимаю)

PTR проверка

Далее необходимо настроить соответствие IP адреса сервера-отправителя почты, с обратной доменной записью — так называемая PTR проверка.
Для отладки я создаю простенький php скрипт отправляющий почту средствами штатной фукнции mail() себе же на почтовый ящик gmail и смотрю полученное письмо в исходных кодах («Показать оригинал»)
Received: from srv.mydomain.ru (srv.mydomain.ru. [123.123.123.123])

То есть доменное имя сервера отправителя и обратная запись должны совпадать!
Проверяется с консоли windows
nslookup srv.mydomain.ru
получаем IP адрес 123.123.123.123
далее делаем обратный запрос
nslookup 123.123.123.123
должны получить srv.mydomain.ru

Если несоответствие — необходимо настроить прямую и обратную зону DNS!

Чтобы не ждать пока обновится зона (часа 3-4) рекомендую проверить обратную запись linux командой
dig -x 123.123.123.123 @ns.server.ru
Предварительно узнав какие именно NS сервера обслуживают наш домен командой
whois mydomain.ru

SPF проверка
приведу пример из исходных кодов тестового письма отправленного на гугл
Received-SPF: pass (google.com: domain of info@srv.mydomain.ru designates 123.123.123.123 as permitted sender) client-ip=123.123.12.123;

В переводе на русский — SPF проверка пройдена, IP адрес отправителя считается разрешенным.
Для того, чтобы сервер проходил SPF проверку необходимо IP адрес сервера (или домен) внести в SPF запись зоны (это текстовая DNS запись определенного формата)
Например такой записи «v=spf1 +mx +ip4:123.123.123.123» вполне будет достаточно, чтобы пройти SPF проверку

Далее при настройке почты и изучении оригинала письма мне не понравилась сточка генерируемая моим же sendmail
X-Authentication-Warning: srv.mydomain.ru : bitrix set sender to info@mydomain.ru using -f

видите ли пользователь bitrix не является отправителем для домена srv.mydomain.ru!
Добавляю пользователя bitrix в доверенных пользователей для отправки почты в файл /etc/mail/trusted-users и перезапускаю sendmail — всё, ошибка ушла!

Ну и чтобы не было путаницы с доменными именами, hostname серверу я так же присваиваю srv.mydomain.ru
Правим /etc/sysconfig/network на предмет HOSTNAME=srv.mydomain.ru
и чтоб не ребутить для текущей сессии даём команду
hostname srv.mydomain.ru

Всё!
Обычно этого «набора» хватает для того, чтоб письма нормально доходили и не попадали в спам

P.S.
Бывает нужно ещё и цифровую подпись DKIM настроить для верности — мне не приходилось, но могу порекомендовать хорошую статью по настройке почты (в т.ч. dkim)

рубрики: Администрирование, Полезности | Комментарии (0)

Яндекс.Метрика