Page_c76a3fcf https://linux-notes.org Unix/ Linux блог, на котором можно найти полезную информацию по настройке ОС и ПО. Fri, 08 Dec 2017 20:59:12 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.7.2 Page_c76a3fcf https://linux-notes.org/oshibki-raboty-s-php-sessiyami-v-unix-linux/ https://linux-notes.org/oshibki-raboty-s-php-sessiyami-v-unix-linux/#respond Fri, 08 Dec 2017 20:58:39 +0000 http://linux-notes.org/?p=5665 Ошибки работы с PHP сессиями в Unix/Linux Хочу описать статью с возможными ошибками работы PHP и сессиями в Unix/Linux. Думаю многие сталкиваются и будет полезно знать как решать ту, или иную ошибку. Обновлял заббикс и после его обновления, перестал корректно работать, посмотрел лог и увидел: 2017/12/08 21:15:48 [error] 40014#40014: *395 FastCGI sent in stderr: "PHP message: […]

The post Ошибки работы с PHP сессиями в Unix/Linux first appeared on linux-notes.org.]]>

Ошибки работы с PHP сессиями в Unix/Linux

Хочу описать статью с возможными ошибками работы PHP и сессиями в Unix/Linux. Думаю многие сталкиваются и будет полезно знать как решать ту, или иную ошибку.

Обновлял заббикс и после его обновления, перестал корректно работать, посмотрел лог и увидел:

2017/12/08 21:15:48 [error] 40014#40014: *395 FastCGI sent in stderr: "PHP message: PHP Warning:  require_once(/etc/zabbix/web/maintenance.inc.php): failed to open stream: Permission denied in /usr/share/zabbix/include/classes/core/ZBase.php on line 269

-=== Ошибка 1 ===-

Можно увидить следующую ошибку:

Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.

Возникла у меня при установке phpmyadmin.

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

ошибка в phpMyAdmin «Cannot start session without errors»

-=== Ошибка 2 ===-

При работе с апачем, я получил:

Warning: session_start() [function.session-start]: open(/var/lib/php/session/sess_eqbchncji8kj22f0iqa9g3v7u2, O_RDWR) failed: Permission denied (13) in /var/www/vhosts/httpdocs/index.php on line 6
Warning: Unknown: open(/var/lib/php/session/sess_eqbchncji8kj22f0iqa9g3v7u2, O_RDWR) failed: Permission denied (13) in Unknown on line 0
Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0

-=== Ошибка 3 ===-

Получил еще ошибку:

FastCGI sent in stderr: “PHP message: PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0” while reading upstream, client: 37.***.***.56, server: rtfm.co.ua, request: “POST /wp-admin/admin-ajax.php HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9009”, host: “rtfm.co.ua”, referrer: “http://linux-notes.org/wp-admin/post.php?post=5496&action=edit&message=10”

Другие ошибки я буду добавлять по мере их возникновения.

Решения ошибок работы с PHP сессиями в Unix/Linux

Ну что, пришли к решению. Первое что необходимо сделать, — так проверить путь куда сохраняются сессии, для этого, выполните:

$ php -i |grep save_path

session.save_path => /var/lib/php/session => /var/lib/php/session

Как видно у меня этот путь рассположен в /var/lib/php/session директории.

Проверим права на данную директорию:

# ls -alh /var/lib/php/session

Смотрим от какого юзера идет выполнение php кода:

# ps aux |grep php-fpm

PS: Или, можно зайти в ваш пул php-fpm и найти пользователя от которого он запущен!

Решение довольно примитивное. Для начала, стоит создать папку под использующие сессии (если ее нет еще) и выставить права:

# mkdir /var/lib/php/session
# chmod 1777 /var/lib/php/session

И так же, выставляем владельца и группу:

# chown root:www /var/lib/php/session
# chown -R www: /var/cache/nginx

ИЛИ:

# chmod o+rw /var/lib/php/session

Потом, открываем ваш php.ini и находим строку:

;session.save_path = "/tmp"

И нужно выполнить расскоменчивание данной строки.

PS: Возможно, нужно будет выставить права и владельца!

Если вы используете выделенные пулы под свои php- проекты, то стоит поискать данную строку в:

# grep -lR 'php_value' /etc/php-fpm.d

Если покажет файлы, то стоит посмотреть привести к:

[...]
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
[...]

Перезапускаем php-fpm службу:

# service php-fpm restart

Для апача, следуюет указать следующие строки:

php_value session.save_handler "files"
php_value session.save_path    "/var/lib/php/session"

а поиск файла можно сделать так:

# grep -lR 'php_value' /etc/

И тоже, выполнить перезапуск службы:

# service httpd restart

Вот и все решение! А у меня на этом статья «Ошибки работы с PHP сессиями в Unix/Linux» завершена.

The post Ошибки работы с PHP сессиями в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/oshibki-raboty-s-php-sessiyami-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-phpdox-v-unix-linux/ https://linux-notes.org/ustanovka-phpdox-v-unix-linux/#respond Thu, 30 Mar 2017 20:00:41 +0000 http://linux-notes.org/?p=12168 Установка PhpDox в Unix/Linux phpDox — является генератором документации для PHP проектов. Он включает, но не ограничивается в API документации. Установка PhpDox в Unix/Linux -=== Использование PHAR файла===- Вы всегда можете загрузить последнюю стабильную версию в виде phar-архива по следующей агностической ссылке: $ wget https://github.com/theseer/phpdox/releases/download/0.9.0/phpdox-0.9.0.phar && chmod +x phpdox-0.9.0.phar && sudo mv phpdox-0.9.0.phar /usr/bin/phpdox  -=== Использование github===- $ […]

The post Установка PhpDox в Unix/Linux first appeared on linux-notes.org.]]>

Установка PhpDox в Unix/Linux

phpDox — является генератором документации для PHP проектов. Он включает, но не ограничивается в API документации.

Установка PhpDox в Unix/Linux

-=== Использование PHAR файла===-

Вы всегда можете загрузить последнюю стабильную версию в виде phar-архива по следующей агностической ссылке:

$ wget https://github.com/theseer/phpdox/releases/download/0.9.0/phpdox-0.9.0.phar && chmod +x phpdox-0.9.0.phar && sudo mv phpdox-0.9.0.phar /usr/bin/phpdox

 -=== Использование github===-

$ git clone git://github.com/theseer/phpdox.git

После чего выполним установку composer:

$ composer install

Использование PhpDox в Unix/Linux

Чтобы проверить версию phpdox, выполните:

$ phpdox --version

Если все работает корректно, вы должны получить такой результат:

phpDox 0.9.0 - Copyright (C) 2010 - 2016 by Arne Blankerts

Вот и все, тема «Установка PhpDox в Unix/Linux» завершена.

The post Установка PhpDox в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-phpdox-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-php-copy-paste-detector-phpcpd-v-unix-linux/ https://linux-notes.org/ustanovka-php-copy-paste-detector-phpcpd-v-unix-linux/#respond Thu, 30 Mar 2017 19:45:13 +0000 http://linux-notes.org/?p=12166 Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux phpcpd — это детектор копирования / вставки (CPD) для PHP-кода. Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux -=== Использование PHAR файла===- Вы всегда можете загрузить последнюю стабильную версию в виде phar-архива по следующей агностической ссылке: $ wget https://phar.phpunit.de/phpcpd.phar && chmod +x phpcpd.phar && mv phpcpd.phar /usr/local/bin/phpcpd Вы также можете […]

The post Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux first appeared on linux-notes.org.]]>

Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux

phpcpd — это детектор копирования / вставки (CPD) для PHP-кода.

Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux

-=== Использование PHAR файла===-

Вы всегда можете загрузить последнюю стабильную версию в виде phar-архива по следующей агностической ссылке:

$ wget https://phar.phpunit.de/phpcpd.phar && chmod +x phpcpd.phar && mv phpcpd.phar /usr/local/bin/phpcpd

Вы также можете сразу же использовать PHAR после его загрузки, конечно:

$ wget https://phar.phpunit.de/phpcpd.phar
$ php phpcpd.phar

 -=== Использование Composer===-

Для начала установим Composer:

Установить PHP Composer в Unix/Linux

После установки, выполняем установку:

$ composer require --dev sebastian/phpcpd

Затем вы можете вызвать его, используя vendor/bin/phpcpd.

 -=== Использование github===-

$ git clone https://github.com/sebastianbergmann/phpcpd.git

В папке найти и использовать данную утилиту.

А на этом, статья «Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux» завершена.

The post Установка PHP Copy/Paste Detector (PHPCPD) в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-php-copy-paste-detector-phpcpd-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-php-mess-detector-phpmd-v-unix-linux/ https://linux-notes.org/ustanovka-php-mess-detector-phpmd-v-unix-linux/#respond Thu, 30 Mar 2017 17:35:39 +0000 http://linux-notes.org/?p=12159 Установка PHP Mess Detector (PHPMD) в Unix/Linux PHPMD — является молодым проектом, поэтому он предоставляет только ограниченный набор предварительно определенных правил по сравнению с его братом PMD, который обнаруживает «запахи кода» и возможные ошибки в анализируемом исходном коде. Что делает PHPMD: Он берет исходный PHP код и ищет несколько потенциальных проблем внутри этого источника. Эти проблемы […]

The post Установка PHP Mess Detector (PHPMD) в Unix/Linux first appeared on linux-notes.org.]]>

Установка PHP Mess Detector (PHPMD) в Unix/Linux

PHPMD — является молодым проектом, поэтому он предоставляет только ограниченный набор предварительно определенных правил по сравнению с его братом PMD, который обнаруживает «запахи кода» и возможные ошибки в анализируемом исходном коде.

Что делает PHPMD: Он берет исходный PHP код и ищет несколько потенциальных проблем внутри этого источника. Эти проблемы могут быть такими:

  • Возможные ошибки
  • Субоптимальный код
  • Сложные выражения
  • Неиспользуемые параметры, методы, свойства

Установка PHP Mess Detector (PHPMD) в Unix/Linux

-=== Использование PHAR файла===-

Вы всегда можете загрузить последнюю стабильную версию в виде phar-архива по следующей агностической ссылке:

$ wget -c http://static.phpmd.org/php/latest/phpmd.phar

 -=== Использование Composer===-

Для начала установим Composer:

Установить PHP Composer в Unix/Linux

После установки, выполняем установку:

$ composer require --dev phpmd/phpmd

Или, альтернативно, включите зависимость в composer.json файле. Для примера:

{
"require-dev": {
"phpmd/phpmd" : "@stable"
}
}

 -=== Использование github===-

Если вы хотите выполнить установку через GitHub, вы можете использовать зеркало PHPMD:

$ git clone git://github.com/phpmd/phpmd.git

Перейдем в папку и инициализируем все дочерние модули:

$ cd phpmd
$ git submodule update --init

Как-то так. У меня с темой «Установка PHP Mess Detector (PHPMD) в Unix/Linux» все.

The post Установка PHP Mess Detector (PHPMD) в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-php-mess-detector-phpmd-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-php_depend-v-unix-linux/ https://linux-notes.org/ustanovka-php_depend-v-unix-linux/#respond Thu, 30 Mar 2017 01:17:06 +0000 http://linux-notes.org/?p=12160 Установка PHP_Depend в Unix/Linux PHP_Depend — это анализатор программного обеспечения, который так же показывает полезные метрики. Установка PHP_Depend в Unix/Linux -===Скачиваем файл===- $ wget http://static.pdepend.org/php/latest/pdepend.phar && sudo chmod +x pdepend.phar && sudo mv pdepend.phar /usr/local/bin/pdepend -===Используем composer===- Для начала, выполним установку самого composer: Установить PHP Composer в Unix/Linux После установки, выполняем установку: $ composer require --dev pdepend/pdepend […]

The post Установка PHP_Depend в Unix/Linux first appeared on linux-notes.org.]]>

Установка PHP_Depend в Unix/Linux

PHP_Depend — это анализатор программного обеспечения, который так же показывает полезные метрики.

Установка PHP_Depend в Unix/Linux

-===Скачиваем файл===-

$ wget http://static.pdepend.org/php/latest/pdepend.phar && sudo chmod +x pdepend.phar && sudo mv pdepend.phar /usr/local/bin/pdepend

-===Используем composer===-

Для начала, выполним установку самого composer:

Установить PHP Composer в Unix/Linux

После установки, выполняем установку:

$ composer require --dev pdepend/pdepend

Или вы можете использовать composer, просто добавив PHP_Depend зависимость в вш composer.json файл:

{
"require": {

"pdepend/pdepend" : "2.5.0"
}
}

-===Используем git===-

$ git clone git://github.com/pdepend/pdepend.git

Ну и в самом проекте, можно вызвать данную утилиту.

Использование PHP_Depend в Unix/Linux

Чтобы узнать версию, используйте:

$ pdepend --version

Теперь у вас есть запущенная версия PHP_Depend, которая может быть вызвана в командной строке:

$  pdepend --summary-xml=/tmp/sum.xml /path_to_code

Вот собственно и все, тема «Установка PHP_Depend в Unix/Linux» завершена.

The post Установка PHP_Depend в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-php_depend-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-phploc-v-unix-linux/ https://linux-notes.org/ustanovka-phploc-v-unix-linux/#respond Thu, 30 Mar 2017 00:56:37 +0000 http://linux-notes.org/?p=12161 Установка PHPLOC в Unix/Linux phploc — является инструментом для быстрого измерения размера и анализа структуры PHP проекта. Установка PHPLOC в Unix/Linux -=== Использование PHAR файла===- Самый простой способ получить PHPLOC — загрузить архив PHP (PHAR), в котором имеются все необходимые зависимости PHPLOC и они находятся в одном файле: $ wget https://phar.phpunit.de/phploc.phar && chmod +x phploc.phar && […]

The post Установка PHPLOC в Unix/Linux first appeared on linux-notes.org.]]>

Установка PHPLOC в Unix/Linux

phploc — является инструментом для быстрого измерения размера и анализа структуры PHP проекта.

Установка PHPLOC в Unix/Linux

-=== Использование PHAR файла===-

Самый простой способ получить PHPLOC — загрузить архив PHP (PHAR), в котором имеются все необходимые зависимости PHPLOC и они находятся в одном файле:

$ wget https://phar.phpunit.de/phploc.phar && chmod +x phploc.phar && mv phploc.phar /usr/local/bin/phploc

Вы также можете сразу же использовать PHAR после его загрузки, конечно:

$ wget https://phar.phpunit.de/phploc.phar
$ php phploc.phar

 -=== Использование Composer===-

Для начала установим Composer:

Установить PHP Composer в Unix/Linux

После установки, выполняем установку:

$ composer require --dev phploc/phploc

Имеется готовый проект, который хорошо подойдет для тестирования данной утилиты и jenkins:

$ git clone https://github.com/sebastianbergmann/phploc

Затем вы можете вызвать его, используя исполняемый файл vendor/bin/phploc. А на этом, статья «Установка PHPLOC в Unix/Linux» подошла к завершению.

The post Установка PHPLOC в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-phploc-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-php_codesniffer-v-unix-linux/ https://linux-notes.org/ustanovka-php_codesniffer-v-unix-linux/#respond Wed, 29 Mar 2017 23:49:10 +0000 http://linux-notes.org/?p=12157 Установка PHP_CodeSniffer в Unix/Linux PHP_CodeSniffer — Представляет собой набор из двух PHP-скриптов; Основной скрипт phpcs, который выделяет PHP, JavaScript и CSS-файлы для обнаружения нарушений определенного стандарта кодирования, а второй скрипт phpcbf автоматически исправляет стандартные нарушения кодирования. PHP_CodeSniffer — это важный инструмент разработки, который гарантирует, что ваш код остается чистым и последовательным. Установка PHP_CodeSniffer в Unix/Linux -=== […]

The post Установка PHP_CodeSniffer в Unix/Linux first appeared on linux-notes.org.]]>

Установка PHP_CodeSniffer в Unix/Linux

PHP_CodeSniffer — Представляет собой набор из двух PHP-скриптов; Основной скрипт phpcs, который выделяет PHP, JavaScript и CSS-файлы для обнаружения нарушений определенного стандарта кодирования, а второй скрипт phpcbf автоматически исправляет стандартные нарушения кодирования. PHP_CodeSniffer — это важный инструмент разработки, который гарантирует, что ваш код остается чистым и последовательным.

Установка PHP_CodeSniffer в Unix/Linux

-=== Использование готового пакета===-

Самый простой способ начать работу с PHP_CodeSniffer — загрузить файлы Phar для каждой из команд:

$ curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar
$ php phpcs.phar -h

И еще одно действие:

$ curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar
$ php phpcbf.phar -h

Для удобства, я бы переместил данные файлы:

# wget https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar && sudo chmod +x phpcs.phar && sudo mv phpcs.phar /usr/local/bin/phpcs

Ну и для другого:

# wget https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar && sudo chmod +x phpcbf.phar && sudo mv phpcbf.phar /usr/local/bin/phpcbf

-=== Использование установщика PEAR===-

Если вы используете PEAR, вы можете установить PHP_CodeSniffer с помощью PEAR-установщика. Чтобы установить PHP_CodeSniffer с помощью PEAR-установщика (сначала убедитесь, что вы установили PEAR) выполните следующую команду:

$ pear install PHP_CodeSniffer

-=== Использование Composer===-

Если вы предпочитаете использовать Composer, вы можете легко установить PHP_CodeSniffer для всей системы с помощью следующей команды:

$ composer global require "squizlabs/php_codesniffer=*"

PS: если нужно установить composer — вот статья:

Установить PHP Composer в Unix/Linux

Убедитесь, что у вас есть каталог bin в PATH. Значение по умолчанию: ~/.composer/vendor/bin/,  но вы можете проверить данное значение, запустив команду:

$ composer global config bin-dir --absolute

Или, альтернативно, включите зависимость для squizlabs/php_codesniffer в вашем composer.json файле. Для примера:

{
"require-dev": {
"squizlabs/php_codesniffer": "2.*"
}
}

После этого вы сможете запускать PHP_CodeSniffer из папки установщика:

./vendor/bin/phpcs -h
./vendor/bin/phpcbf -h

Вы также можете скачать PHP_CodeSniffer с исходного кода и запускать phpcs и phpcbf команды из под директории. Например:

$ git clone https://github.com/squizlabs/PHP_CodeSniffer.git
$ cd PHP_CodeSniffer
$ php scripts/phpcs -h
$ php scripts/phpcbf -h

Как-то так. У меня с темой «Установка PHP_CodeSniffer в Unix/Linux» все.

The post Установка PHP_CodeSniffer в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-php_codesniffer-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-phpunit-v-unix-linux/ https://linux-notes.org/ustanovka-phpunit-v-unix-linux/#respond Wed, 29 Mar 2017 23:25:23 +0000 http://linux-notes.org/?p=12155 Установка PHPUnit в Unix/Linux PHPUnit — это платформа для тестирования PHP проектов . Это пример архитектуры xUnit для фреймворков модульного тестирования. Установка PHPUnit в Unix/Linux -==Используем готовый phpunit.phar файл ==- Самый последний релиз, можно скачать следующим образом: # wget https://phar.phpunit.de/phpunit.phar && chmod +x phpunit.phar && mv phpunit.phar /usr/local/bin/phpunit Вы также можете сразу же использовать PHAR […]

The post Установка PHPUnit в Unix/Linux first appeared on linux-notes.org.]]>

Установка PHPUnit в Unix/Linux

PHPUnit — это платформа для тестирования PHP проектов . Это пример архитектуры xUnit для фреймворков модульного тестирования.

Установка PHPUnit в Unix/Linux

-==Используем готовый phpunit.phar файл ==-

Самый последний релиз, можно скачать следующим образом:

# wget https://phar.phpunit.de/phpunit.phar && chmod +x phpunit.phar && mv phpunit.phar /usr/local/bin/phpunit

Вы также можете сразу же использовать PHAR после его загрузки, конечно:

$ wget https://phar.phpunit.de/phpunit.phar

$ php phpunit.phar

Можно скачивать определенные версии данной утилиты:

$ wget https://phar.phpunit.de/phpunit-6.0.phar && sudo chmod +x phpunit-6.0.phar && sudo mv phpunit-6.0.phar /usr/local/bin/phpunit

Последний релиз поддерживает PHP 7.0 и PHP 7.1, чтобы получить поддержку PHP 5.6, скачайте:

$ wget https://phar.phpunit.de/phpunit-5.7.17.phar && sudo chmod +x phpunit-*.phar && sudo mv phpunit-*.phar /usr/local/bin/phpunit

-==Используем composer ==-
Simply add a (development-time) dependency on phpunit/phpunit to your project’s composer.json file if you use Composer to manage the dependencies of your project:

$ composer require --dev phpunit/phpunit ^6.0

Доступны следующие дополнительные пакеты:

PHP_Invoker

Утилита класса для вызова callables с тайм-аутом. Этот пакет необходим для обеспечения тайм-аутов тестирования в строгом режиме.

Этот пакет включен в дистрибутив PHAR для PHPUnit. Его можно установить через Composer, используя следующую команду:

$ composer require --dev phpunit/php-invoker

DbUnit
DbUnit порт для PHP/PHPUnit для поддержки тестирования взаимодействия с базой данных.

Этот пакет не входит в дистрибутив PHPARnit PHP. Его можно установить через Composer, используя следующую команду:

$ composer require --dev phpunit/dbunit

Чтобы проверить версию, используйте команду:

$ phpunit --version

Для вызова помощи, используйте:

$ phpunit --help

Очень простая установка, по этому, моя тема «Установка PHPUnit в Unix/Linux» завершена.

The post Установка PHPUnit в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-phpunit-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/nastrojka-process-manager-dynamic-static-ondemand-dlya-php-fpm-v-unix-linux/ https://linux-notes.org/nastrojka-process-manager-dynamic-static-ondemand-dlya-php-fpm-v-unix-linux/#comments Sun, 19 Feb 2017 02:27:46 +0000 http://linux-notes.org/?p=11844 Настройка «process manager(dynamic/static/ondemand)» для php-fpm в Unix/Linux Покопавшись у себя в черновиках, я нашел довольно интересную тему — настройка процесс менеджера для работы php-fpm и nginx. Я постараюсь рассказать как можно больше информации по этой теме. Расскажу на наглядных примерах что лучше и как считается некоторые важные параметры в php-fpm. И так, что такое «process […]

The post Настройка «process manager(dynamic/static/ondemand)» для php-fpm в Unix/Linux first appeared on linux-notes.org.]]>

Настройка «process manager(dynamic/static/ondemand)» для php-fpm в Unix/Linux

Покопавшись у себя в черновиках, я нашел довольно интересную тему — настройка процесс менеджера для работы php-fpm и nginx. Я постараюсь рассказать как можно больше информации по этой теме. Расскажу на наглядных примерах что лучше и как считается некоторые важные параметры в php-fpm.

И так, что такое «process manager» в php-fpm? Process manager в php-fpm — это менеджер процессов для PHP-FPM, который создает и использует PHP процессы, чтобы получить максимальную отдачу от вашего сервера.

Разновидности Process manager в php-fpm:

  • dynamic — Имеет динамическое число pm.max_children (дочерние процессы). Которое изменяется и задается на основании: pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers.
  • static — Имеет фиксированное число pm.max_children (дочерние процессы).
  • ondemand — Дочерние процессы не запускаются с самого начала. Количество процессов, создаются по требованию (по мере появления запросов, в отличии от PM dynamic, когда запускается  заданное количество процессов, равное pm.start_servers, при старте службы.

Это 3 основных процесс менеджера для php-fpm-а.

Настройка process manager как dynamic для php-fpm в Unix/Linux

Стандартный менеджер процессов и он хорош тем, что имеет несколько PHP-FPM мастеров.

И так, редактируем свой пул и выставляем:

pm = dynamic

И так, сейчас можно определить максимальное количество процессов. Для этого имеется формула:

Total Max Processes = (Total Ram - (Used Ram + Buffer)) / (Memory per php process)

Предположим, что на сервере имеется 6Гб RAM, но посмотреть можно следующей утилитой:

# cat /proc/meminfo | grep -E 'MemTotal'
MemTotal:        6291456 kB

Проверяем сколько использует памяти PHP-FPM с помощью следующей команды:

# ps -aylC "php-fpm" | grep -Ev "grep" | sort -n | awk '{sum+=$8; ++n} END {print "Tot="sum"("n")";print "Avg="sum"/"n"="sum/n/1024"MB"}'
Tot=3126148(46)
Avg=3126148/46=66.3669MB

Чтобы вывести все php-fpm процессы, используйте:

# ps --no-headers -o "rss,cmd" -C php-fpm | sort -n | awk '{print $1/1024 " Mb"}'

Самый «жирный» процесс:

# ps --no-headers -o "rss,cmd" -C php-fpm | sort -n | awk '{print $1/1024,"Mb"}' | tail -n1

Еще один способ:

В 1-й вкладке запускаем:

# while true; do curl http://linux-notes.org &> /dev/null; sleep 1; done

Во 2-й вкладке запускаем проверку:

# ps aux | grep -E 'php-fpm'| grep -Ev "grep" | awk '{print $6/1024, "Mb"}'

Снова таки, я показал список всех процессов. Как правильно поступить и взять среднее значение или самое больше — решать вам. Нужно все тестировать! Количество памяти занятой процессами, можно проверить через утилиту ps_mem:

Установка ps_mem для проверки занятой памяти процессами в Unix/Linux

Тогда максимальное количество процессов можно посчитать (Я решил отдать под использование PHP всю RAM):

(1024*6) / 66 = 93.0909

Видим что можно использовать 93 max servers для php-fpm:

pm = dynamic
pm.max_children = 93 
pm.start_servers = 30
pm.min_spare_servers = 30
pm.max_spare_servers = 45 
pm.process_idle_timeout = 10s;

Главные параметры:

  • pm = dynamic — Как уже говорилось, это менеджер процессов.
    pm = dynamic
  • pm.max_children — Задается максимальное количество дочерних процессов (процессы-потомки), которые создаются PM.
    pm.max_children= (Общее количество виртуальной памяти)/(память выделенная 1 php процессу) = 93
  • pm.start_servers — Задается количество процессов-потомков, которые будут созданы PM при запуске PHP-FMP.
    pm.start_servers = ~(pm.max_children/3) = 31
  • pm.min_spare_servers — Задается количество процессов, которые должны оставаться в idle, как “запасные”, ожидая задач на выполнение, если количество меньше – будут созданы новые;
    pm.min_spare_servers = ( устанавливаю в 1 ядро) ИЛИ ~(pm.max_children/3) = 31
  • pm.max_spare_servers — наоборот, максимальное количество процессов, которые должны оставаться в idle,если количество больше – некоторые потомки будут уничтожены:
    pm.max_spare_servers = (общему количеству ядер) ИЛИ ~(pm.max_children/2) = 45
  • pm.max_requests – количество запросов процесса, после которого он будет пересоздан, полезно для предотвращения утечек памяти (memory-leak);
    pm.max_requests =  100000
  • pm.process_idle_timeout — время в секундах после чего простаивающий процесс будет удалён.
    pm.process_idle_timeout = 10s

Обратите внимание, что я не принял во внимание (Used Ram + Buffer). Это было бы нужно, если на сервере имелись базы данных:

# cat /proc/meminfo | grep -E '(MemTotal|MemFree|Cached)'
MemTotal:        6291456 kB
MemFree:         1678704 kB
Cached:          2205940 kB

Проверить использование буфера  и памяти, можно следующей командой:

# free -m
              total        used        free      shared  buff/cache   available
Mem:           6144        1521        1622         641        3000        3716
Swap:             0           0           0

Тогда, можно было бы пересчитать:

Total Max Processes = (6144 - (1521 + 3000)) / 66 = 24

Перезапускаем php-fpm службу:

$ sudo service php5-fpm restart

или

# service php-fpm restart

PS: Используйте команду в зависимости типа ОС.

Теперь будем использовать htop/top и ab чтобы проверить что и как работает.

Выполняем стрестест:

ab -n 10000 -c 500 http://localhost/index.php

Как-то так.

Имеется скрипт для рекомендаций:

# cd /usr/local/src && wget http://linux-notes.org/wp-content/uploads/scripts/php-fpm/php-fpmpal.sh -q -O - | bash

Дает вполне годные указания:

 (        )  (         (     (       *                      
 )\ )  ( /(  )\ )      )\ )  )\ )  (  `                 (   
(()/(  )\())(()/(     (()/( (()/(  )\))(             )  )\  
 /(_))((_)\  /(_))     /(_)) /(_))((_)()\  `  )   ( /( ((_) 
(_))   _((_)(_))      (_))_|(_))  (_()((_) /(/(   )(_)) _   
| _ \ | || || _ \ ___ | |_  | _ \ |  \/  |((_)_\ ((_)_ | |  
|  _/ | __ ||  _/|___|| __| |  _/ | |\/| || '_ \)/ _` || |  
|_|   |_||_||_|       |_|   |_|   |_|  |_|| .__/ \__,_||_|  
========================================= |_| =============


AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 31.187.70.238. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 31.187.70.238. Set the 'ServerName' directive globally to suppress this message
===== List of PHP-FPM pools =====
--- nagios ---
Configuration file: /etc/php-fpm.d/nagios.conf
List of processes: 53028 53029 53030 53031 53032
Number of processes: 5
Current max_children value: 50
Total memory usage for pool in KB: 54440
Average memory usage per process in KB: 10888
Total potential memory usage for pool (based on average process) (KB): 544400
Largest process in this pool is (KB): 10888
Total potential memory usage for pool (based on largest process) (KB): 544400

--- www ---
Configuration file: /etc/php-fpm.d/www.conf
List of processes: 53033 53034 53035 53036 53037 53038 53039 53040 53041 53042 53043 53044 53045 53046 53047 53048 53049 53050 53051 53052 53053 53054 53055 53056 53057 53058 53059 53060 53061 53062 53083 53119 53434 53491 61608 73379
Number of processes: 36
Current max_children value: 50
Total memory usage for pool in KB: 2295440
Average memory usage per process in KB: 63762
Total potential memory usage for pool (based on average process) (KB): 3188100
Largest process in this pool is (KB): 67792
Total potential memory usage for pool (based on largest process) (KB): 3389600

===== Server memory usage statistics =====
Total server memory in KB: 6291456
  =Total Apache memory usage in KB: 0
  =Total nginx memory usage in KB: 55868
  =Total Varnish memory usage in KB: 0 0
  =Total MySQL memory usage in KB: 201324.8
  =Total PHP-FPM memory usage in KB: 2349880

Memory available to assign to PHP-FPM pools in KB: 6099670 (total free memory + PHP-FPM's current memory usage)

Total potential PHP-FPM memory usage based on largest processes (KB): 3934000 (64.49%) ...GOOD :-)
Total potential PHP-FPM memory usage based on average process size (KB): 3732500 (61.19%) ...GOOD :-)

===== Recommendations per pool =====
-- nagios -- currently uses 54440 KB memory (2.31% of all PHP-FPM memory usage). It should be allowed to use about 140902 KB of all available memory. Its average process size is 10888 KB so this means max_children should be set to ~12. It is currently set to 50 (this can be changed in /etc/php-fpm.d/nagios.conf).
-- www -- currently uses 2295440 KB memory (97.68% of all PHP-FPM memory usage). It should be allowed to use about 5958157 KB of all available memory. Its average process size is 63762 KB so this means max_children should be set to ~93. It is currently set to 50 (this can be changed in /etc/php-fpm.d/www.conf).

===== Other considerations to take into account =====
From the PHP-FPM error logfiles (/var/log/php-fpm/error.log):
 - pool www had reached its max_children value of 50 on 2 occasion(s)

For these pools you may want to compare the recommended max_children value to this information, and decide whether the recommended value would be high enough to prevent max_children from being hit in future.

Note: It is not ideal to run PHP-FPMpal shortly after restarting PHP-FPM or your webservices. This is because PHP-FPMpal makes recommendations based on the average pool process size, and if PHP-FPM was restarted a short while ago then the likelihood is high that there won't have been many requests made to the sites since the restart, and metrics will be skewed and not show a normalised average.
It is also worth noting that if you've recently restarted any services that normally use up a large amount of memory then you probably want to wait a while before running PHP-FPMpal (e.g. if MySQL normally uses 50% of memory, but you've just restarted it then it may only use 10% of memory right now, thus the recommendations will be very skewed).

============================================================

Идем далее…

Настройка process manager как static для php-fpm в Unix/Linux

Статический менеджер процессов почти не используется, из-за того, что имеется 1 PHP-FPM master.

Открываем свой пул из php-fpm-а и меняем параметры:

pm = static
pm.max_children = 5

Перезапускаем php-fpm службу:

$ sudo service php5-fpm restart

или

# service php-fpm restart

PS: Используйте команду в зависимости типа ОС.

Выполняем стрестест:

# ab -n 1000 -c 10 http://localhost/index.php
# ab -n 5000 -c 20 http://localhost/index.php

Больше об утилите «ab» можно узнать в статье:

Проверка нагрузки на web-сервер с ab для Linux и Unix

Открываем конфигурационный файл для php-fpm пула. Его можно найти поискам ( если кто-то не знает где лежит он).

Раскомментируем строчку с  «pm.max_requests» опцией:

pm.max_requests = 500

Снова перезапускаем php-fpm и проверяем нагрузку:

# ab -n 5000 -c 20 http://localhost/index.php

Можно видеть,  что некоторые процессы — умерли, а затем некоторые процессы были убиты, а затем они сново породились!

Настройка process manager как ondemand для php-fpm в Unix/Linux

Самый продвинутый ( на мой взгляд) менеджер процессов. С названия очевидно, что он не оставляет процессы, но создает их, по мере необходимы.

Пример пула выглядит следующим образом:

[linux-notes.og]
user = www-data
group = www-data
listen = /var/run/php5-fpm/linux-notes.og/sock
listen.owner = www-data
listen.group = www-data
listen.mode = 770
chdir = /srv/www/wp-content/linux-notes.og/
pm = ondemand
pm.max_children = 5
pm.max_requests = 500

Главные параметры:

  • pm = ondemand — Как уже говорилось, это менеджер процессов.
    pm = ondemand
  • pm.max_children — Задаем максимальное число дочерних-процессов.
    pm.max_children= (Общее количество виртуальной памяти)/(память выделенная 1 php процессу) = 93
  • pm.process_idle_timeout — Задаем время в секундах после чего простаивающий процесс будет удалён.
    pm.process_idle_timeout = 10s
  • pm.max_requests — Задаем количество обработаных запросов, после которых процессы php-fpm будут перезагружены.
    pm.max_requests =  100000

Если вам нужна большая производительность, то менеджер процессов — «OnDemand» не подойдет вам. Тем не менее, на 90% случаев, конфигурация PHP-FPM в режиме OnDemand лучше, чем static или dynamic.

The post Настройка «process manager(dynamic/static/ondemand)» для php-fpm в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/nastrojka-process-manager-dynamic-static-ondemand-dlya-php-fpm-v-unix-linux/feed/ 1
Page_c76a3fcf https://linux-notes.org/ustanovka-nagios-s-nginx-v-centos/ https://linux-notes.org/ustanovka-nagios-s-nginx-v-centos/#respond Wed, 18 May 2016 22:34:38 +0000 http://linux-notes.org/?p=10218 Установка Nagios с nginx в CentOS И так, решил я значит написать статью и привести пример установки в виде bash скрипта. В самом конце, я приведу его. Недавно, возникла необходимости установить nagios с использованием nginx. В своей статье «Установка Nagios с nginx в CentOS» я расскажу как можно это сделать. Nagios — утилита для мониторинга серверов и сетей и […]

The post Установка Nagios с nginx в CentOS first appeared on linux-notes.org.]]>

Установка Nagios с nginx в CentOS

И так, решил я значит написать статью и привести пример установки в виде bash скрипта. В самом конце, я приведу его.

Недавно, возникла необходимости установить nagios с использованием nginx. В своей статье «Установка Nagios с nginx в CentOS» я расскажу как можно это сделать.

Nagios — утилита для мониторинга серверов и сетей и служит для наблюдения разных состояний различных служб (может проверять место на вашем HDD, загрузку CPU, загрузку RAM, состояние сервера (dead/alive) через ICMP протокол). Данная программа показывает администратору какие службы прекращают (или возобновляют) свою работу.

Как работает nagios можно посмотреть на рисунке ниже:

Зачем нужен Nagios

Зачем нужен Nagios

Установка nginx в CentOS

И так, начнем с nginx, чтобы установить его, выполните:

# yum install nginx php php-fpm php-common gcc glibc glibc-common gd gd-devel make net-snmp unzip

Приведу конфиг nginx для nagios. Настроим его сейчас.

Настройка NGINX

Создаём файл /etc/nginx/conf.d/nagios.conf:

server {
 listen 80;
 server_name nagios_local;

 access_log /var/log/nginx/nagios-access.log;
 error_log /var/log/nginx/nagios-error.log info;

 root /usr/local/nagios/share;
 index index.php;

 auth_basic "Nagios Restricted Access";
 auth_basic_user_file /usr/local/nagios/passwd;

 location /stylesheets {
 alias /usr/local/nagios/share/stylesheets;
 }

 location ~ .cgi$ {
     root /usr/local/nagios/sbin/;
     include fastcgi_params;
     rewrite ^/nagios/cgi-bin/(.*).cgi /$1.cgi break;
     fastcgi_param AUTH_USER $remote_user;
     fastcgi_param REMOTE_USER $remote_user;
     fastcgi_pass unix:/var/run/fcgiwrap.socket;
     fastcgi_param SCRIPT_FILENAME /usr/local/nagios/sbin/$fastcgi_script_name;
     fastcgi_param PATH_INFO $fastcgi_script_name;
 }

 location ~ .php$ {
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php-fpm/nagios.socket;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /usr/local/nagios/share$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
 }

 location ~ (.*.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf))$ {
    root /usr/local/nagios/share/;
    rewrite ^/nagios/(.*) /$1 break;
    access_log off; expires max;
 }
}

Можно переименовать стандартный конфиг:

# mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/conf.d/default.conf_back

Проверяем все ли в конфиге работает:

# nginx -t

Запускаем web-сервер:

Для CentOS 5/6:

# service nginx restart

Для CentOS 7:

# systemctl restart nginx.service

Добавляем его в автозагрузку ОС:

# chkconfig nginx on

Или (CentOS 7):

# systemctl enable nginx.service

Проверим, появился ли он в автозагрузке:

# chkconfig --list nginx

IPtables

Так же, можно добавить правило (проброс 80-го порта) в  IPtables:

# iptables -I INPUT 2 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

Сохраняем все настройки:

# service iptables save

Настройка PHP-FPM

И так, займемся настройкой PHP для Nagios. Открываем файл:

# vim /etc/php-fpm.d/nagios.conf

И приводим к такому виду:

[nagios]

;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/nagios.socket
listen.owner = nginx
listen.group = nginx
listen.mode=0660
listen.allowed_clients = 127.0.0.1

user = nagios
group = nagios

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

;request_slowlog_timeout = 0

slowlog = /var/log/php-fpm/www-slow.log

;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/php-fpm/nagios-error.log
php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 128M

php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session

Запускаем php-fpm службу:

# service php-fpm start

Или для CentOS 7:

# systemctl restart php-fpm

Добавляем php-fpm в автозагрузку ОС:

# chkconfig php-fpm on

Или (CentOS 7):

# systemctl enable php-fpm.service

Установка Nagios в CentOS

Для начала, создаем пользователя и группу для него:

# adduser --system --no-create-home nagios

Для CentOS 7 создать пользователя можно так:

# useradd nagios

Можно проверить,  нормально ли все с группой:

# cat /etc/group | grep nagios

Можно проверить,  нормально ли все с пользователем:

# cat /etc/shadow | grep nagios

Добавим nginx юзера в nagios группу:

# usermod -G nagios nginx

Далее, необходимо скачать nagios (на момент написания статьи, был самой последней версии):

# cd /usr/local/src && wget http://liquidtelecom.dl.sourceforge.net/project/nagios/nagios-4.x/nagios-4.1.1/nagios-4.1.1.tar.gz && gunzip nagios-4* && tar xvf nagios-4*

Компилируем  Nagios и устанавливаем его:

# rm -f /usr/local/src/nagios-4.1.1.tar && cd nagios-4* && ./configure && make all && make install && make install-init && make install-config && make install-commandmode && make install-webconf

Проверим конфигурацию:

# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
...
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check

Nagios выполнит установку в /usr/local/nagios, по этому, проверим так ли это:

# ls -l /usr/local/nagios/

Установим все плагины для работы:

# yum install nagios-plugins-all

Так же, подключаем их:

# rm -rf /usr/local/nagios/libexec
# ln -s /usr/lib64/nagios/plugins /usr/local/nagios/libexec
# chown -R nagios:nagios /usr/local/nagios/libexec

Стартуем Nagios службу:

# service nagios restart

Или (CentOS 7):

# systemctl restart nagios

Добавляем в автозапуск ОС:

# chkconfig nagios on

CentOS 7:

# chkconfig --add nagios

Для более надежного использования, я буду использовать 2-ю авторизацию, по этому, создаю пароль для юзера (для HTTP-авторизации):

# htpasswd -c /usr/local/nagios/passwd nagiosadmin

Делаем симлинки:

# mkdir /usr/local/nagios/share/nagios
# cd /usr/local/nagios/share/nagios/
# ln -s /usr/local/nagios/share/stylesheets/ stylesheets
# ln -s /usr/local/nagios/share/js js
# ls -l

Установка spawn-fcgi и fcgiwrap

Выполняем установку некоторых утилит:

# yum groupinstall 'Development Tools'
# yum install fcgi-devel spawn-fcgi

Загружаем fciwrap и компилируем его:

# cd /usr/local/src/ && git clone https://github.com/gnosek/fcgiwrap.git && cd fcgiwrap && autoreconf -i && ./configure && make && make install

Выполняем проверку и убеждаемся что все ОК:

# file /usr/local/sbin/fcgiwrap

/usr/local/sbin/fcgiwrap: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

Отредактируем файл:

# vim /etc/sysconfig/spawn-fcg

Прописываем следующий текст:

FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
FCGI_USER=nginx
FCGI_GROUP=nginx
FCGI_EXTRA_OPTIONS="-M 0700"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"

Запускаем службу spqwn-fcgi:

# service spawn-fcgi start

Или:

# systemctl start spawn-fcgi

И так же, пропишим его в автозапуск ОС:

# chkconfig spawn-fcgi on

Или:

# chkconfig --add spawn-fcgi

И последнее, проверим создался ли сокет файл:

# file /var/run/fcgiwrap.socket
/var/run/fcgiwrap.socket: socket

ВСЕ! Открываем  nagios и приступаем к работе. Я в своей следующей статье расскажу как устанавливать nagios-client на Unix/Linux ОС.

PS: Для самых ленивых, я создал bash скрипт c установкой всего и в автоматическом режиме. По этому, делюсь:

# cd /usr/local/src && wget http://linux-notes.org/wp-content/uploads/scripts/nagios/Install_Nagios_RPM.sh  && bash Install_Nagios_RPM.sh

Тестировался на CentOS 6/7.

А на этой, у меня уже все, тема «Установка Nagios с nginx в CentOS» завершена.

 

The post Установка Nagios с nginx в CentOS first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-nagios-s-nginx-v-centos/feed/ 0