Настройка кэширования php - APC opcode cache

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Strycker
рядовой
Сообщения: 20
Зарегистрирован: 2010-04-27 9:36:37

Настройка кэширования php - APC opcode cache

Непрочитанное сообщение Strycker » 2013-06-26 15:52:09

Добрый день!

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

И так, исходные данные задачи:
- FreeBSD 8.2
- Apache 2.2 MPM prefork
- php 5.3.26
- apc 3.1.9
- nginx 1.0.4

Построена следующая конфигурация: nginx - раздаёт статику, apache - динамику. В apache добавлен модуль fastcgi. Теперь появилась необходимость запустить APC кэширование. Включил в php.ini в соответсвующей секции настройку. Увидел что кэш работает, но через 3-5 минут перезагружается. Погуглил и понял, что для каждого php-процесса APC создаёт свой отдельный кэш. Использовал параметр в php.ini - apc.mmap_file_mask для того php работал с одним файлом кэша (может не правильно понял назначение параметра). Всё равно перегружается, но на этот раз работает дольше (1-2 часа) и жрёт память.

Вычитал, что нужен менеджер php-процессов - php-fpm. Стал настраивать - не работает. Сокет открывается, но данные не идут. Позже, обнаружил, что сам mod_fastcgi может управлять процессами. На этом этапе окончательно запутался - каша в голове.

Помогите осознать схему работы этих компонентов и выбрать правильное решение.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Настройка кэширования php - APC opcode cache

Непрочитанное сообщение vadim64 » 2013-06-27 11:53:04

оцените, что хотите получить на выходе
нарисуйте на бумаге или в гимпе
снесите всё
на чистой системе реализуйте нарисованную схему

всё будет ок, против лома нет приёма
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Аватара пользователя
Strycker
рядовой
Сообщения: 20
Зарегистрирован: 2010-04-27 9:36:37

Re: Настройка кэширования php - APC opcode cache

Непрочитанное сообщение Strycker » 2013-06-27 16:04:27

vadim64 писал(а):оцените, что хотите получить на выходе
нарисуйте на бумаге или в гимпе
Спасибо за совет, но проблема в том, что у меня нет точного понимания структуры решения. Своё представление я постарался изобразить в схеме:
Изображение
Основная проблема для меня здесь - это "вклинить" php-fpm в цепочку.

Если не сложно, посмотрите пожалуйста конфиг? Привожу рабочий вариант конфига Апача. Так у меня настроен модуль fastcgi
"httpd.conf"

Код: Выделить всё

<IfModule mod_fastcgi.c>
    FastCgiConfig	-singleThreshold 30 -minProcesses 2 -restart    \
			-idle-timeout 400 -killInterval 200 -autoUpdate \
			-pass-header HTTP_AUTHORIZATION
    FastCgiIpcDir /var/run/fastcgi
    FastCgiWrapper /usr/local/sbin/suexec
    Action application/x-httpd-fastphp /php-fcgi/php.sh
    Action application/x-httpd-php /php-fcgi/php.sh
    AddType application/x-httpd-fastphp .php
    <Location /php-fcgi/>
	Options ExecCGI FollowSymLinks
	SetHandler fastcgi-script
    </Location>
</IfModule>

<VirtualHost *:8888>
    DocumentRoot	"/usr/local/www/test/"
    ServerAdmin	webmaster@test.ru
    ServerName		www.test.ru
    ServerAlias		test.ru
    Alias /php-fcgi/ "/usr/local/www/cgi-bin/"

    ErrorLog "/var/log/sites/test.er-httpd.log"
    CustomLog "/var/log/sites/test.ac-httpd.log" combined
	<Directory "/usr/local/www/test/">
	    Options None
	    AllowOverride All
	    Order Allow,Deny
	    Allow from All
	</Directory>
</VirtualHost>
Внутри файлика php.sh

Код: Выделить всё

#!/bin/sh

PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
#PHP_FCGI_MAX_REQUESTS=5000
#export PHP_FCGI_MAX_REQUESTS

exec /usr/local/bin/php-cgi
Теперь пытаюсь встроить php-fpm в эту конструкцию.Добавляю в php-fpm.conf одну строчку:

Код: Выделить всё

listen = /tmp/php-fpm.sock
В конфиг апача добавляю строки, в раздел модуля fastcgi:

Код: Выделить всё

FastCGIExternalServer /usr/local/www/test/cgi-bin/php5.fcgi -socket /tmp/php-fpm.sock
Не работает, чего-то явно не хватает.

Аватара пользователя
Strycker
рядовой
Сообщения: 20
Зарегистрирован: 2010-04-27 9:36:37

Re: Настройка кэширования php - APC opcode cache

Непрочитанное сообщение Strycker » 2013-06-27 22:18:15

Разобрался. В файле httpd.conf

Код: Выделить всё

<IfModule mod_fastcgi.c>
    FastCgiExternalServer /usr/local/www/cgi-bin/php5-fcgi -socket /tmp/php-fpm.sock -pass-header Authorization
</IfModule>
в каждом виртуал хосте

Код: Выделить всё

    AddHandler php5fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/local/www/cgi-bin/php5-fcgi
И всё заработало.