Как перекомпилировать Apache, PHP и IMAP со значением файловых дескрипторов больше, чем FD_SETSIZE (1024), в RedHat

Создана:

2016-11-16 13:06:39 UTC

Изменена:

2017-06-05 06:09:10 UTC

0

Помогла ли вам статья?


Есть вопросы?

Отправить запрос

Как перекомпилировать Apache, PHP и IMAP со значением файловых дескрипторов больше, чем FD_SETSIZE (1024), в RedHat

Симптомы

При компиляции пакетов RPM поставщики используют слишком мало файловых дескрипторов (1024), из-за чего в файле /var/log/httpd/error_log могут появляться следующие сообщения:

Segmentation fault (11)

[warn] make_sock: problem listening on port 443, file descriptor (1068) larger than FD_SETSIZE (1024)

Unable to open logs

Too many open files

Это стандартная проблема Apache на серверах с большим количеством виртуальных серверов. Более подробную информацию смотрите на странице http://httpd.apache.org/docs/2.0/misc/descriptors.html .

Решение

ПРИМЕЧАНИЕ. Начиная с Parallels Plesk 8.2.0 в сборках Apache, поставляемых поставщиками ОС, можно разместить до 900 доменов без перекомпиляции, процедура которой описана в данной статье. Если на сервере Plesk включена функция Piped Logs, смотрите статью 213393889 .

ПРИМЕЧАНИЕ. Эта статья предназначена для операционных систем Linux на базе RPM, таких как RHEL, Fedora, CentOS и SuSE.

Если у вас Debian, пожалуйста, смотрите эту статью .

Если у вас FreeBSD, пожалуйста, смотрите эту статью .

ПРИМЕЧАНИЕ 1. Для работы Plesk необходим ряд серверных приложений, которые не входят в комплект поставки. Например, компания Parallels не предоставляет такие компоненты, как веб-сервер Apache, сервер MySQL, модуль и двоичные файлы PHP и др. Однако Plesk полностью поддерживает стандартные RPM-пакеты от поставщиков операционных систем. Это позволяет администратору обновлять и перекомпилировать такие пакеты с нужными параметрами. Данная статья будет полезна администраторам Plesk при конфигурации ОС и системных пакетов, не включенных в дистрибутив Plesk, для использования с большим количеством размещенных на сервере доменов.

Вам потребуется перекомпилировать связанные приложения и библиотеки, такие как openssl , apache , imap , PHP и т.д., из исходных RPM-пакетов, используя более высокое значениее параметра FD_SETSIZE. Для этого сделайте следующее:

Убедитесь, что система позволяет открывать достаточное количество файлов:

# /sbin/sysctl fs.file-max
fs.file-max = 131072

Если установлено относительно небольшое значение fs.file-max (несколько тысяч), его нужно изменить, добавив следующие строки в файл /etc/sysctl.conf :

fs.file-max = 131072

и выполнив следующую команду:

# /sbin/sysctl -w fs.file-max=131072

ПРИМЕЧАНИЕ. Если вы пользуетесь Parallels Virtuozzo Containers (PVC), вам нужно отредактировать fs.file-max на физическом сервере. Эти изменения будут применены ко всем виртуальным средам.

У вас должны быть установлены пакеты glibc-kernheaders и glibc-headers . Их можно взять с установочного диска операционной системы или скачать с сайта ее производителя. Измените значение FD_SETSIZE в файлах typesizes.h и posix_types.h , которые можно найти с помощью:

# find /usr/include/ -name typesizes.h
# find /usr/include/ -name posix_types.h

Затем установите следующее значение:

#define __FD_SETSIZE 65536

Скачайте перечисленные ниже пакеты RPM (например, с сайта вашей ОС). Вы можете использовать поисковые системы RPM, такие как http://rpm.pbone.net и http://rpmfind.net :

  • openssl-*.src.rpm
  • httpd-*.src.rpm
  • imap-*.src.rpm
  • php-*.src.rpm
  • libc-client-devel-*.src.rpm (если этот RPM установлен)
  • curl-*.src.rpm

Прежде всего перекомпилируйте пакет openssl . Пример:

# /usr/bin/rpmbuild --rebuild openssl-0.9.7a-35.src.rpm

Установите полученный пакет с помощью следующей команды:

# rpm -Uvh --force /usr/src/redhat/RPMS/i386/openssl-0.9.7a-35.i386.rpm

То же самое сделайте с пакетом cURL .

Перекомпилируйте и установите apache :

# rpmbuild --rebuild httpd-2.0.51-2.9.src.rpm
# rpm -Uvh --force /usr/src/redhat/RPMS/i386/httpd-2.0.51-2.9.i386.rpm
# rpm -Uvh --force /usr/src/redhat/RPMS/i386/httpd-devel-2.0.51-2.9.i386.rpm
# rpm -Uvh --force /usr/src/redhat/RPMS/i386/mod_ssl-2.0.51-2.9.i386.rpm

Перекомпилируйте и установите библиотеку libc-client (входит в пакет imap или libc-client-devel - в зависимости от ОС). Вам нужно перекомпилировать тот пакет, который установлен в вашей системе. Пример:

# /usr/bin/rpmbuild --rebuild imap-2002d-3.src.rpm
# rpm -Uvh --force /usr/src/redhat/RPMS/i386/imap-devel-2002d-3.i386.rpm

или

# /usr/bin/rpmbuild --rebuild libc-client-devel.src.rpm
# rpm -Uvh --force /usr/src/redhat/RPMS/i386/libc-client-devel.rpm

Перекомпилируйте и установите PHP . Пример:

# rpmbuild --rebuild php-4.3.10-2.4.src.rpm
# rpm -Uvh --force /usr/src/redhat/RPMS/i386/php-*

Прежде чем выполнять какие-либо другие команды, добавьте команду ulimit -n 65536 в сценарии запуска Apache /etc/rc.d/init.d/httpd и /usr/sbin/apachectl .

Замените /usr/sbin/suexec на файл Plesk:

# cp /usr/local/psa/suexec/psa-suexec /usr/sbin/suexec
# /etc/init.d/httpd restart

В случае с более ранними версиями Plesk (до 7.5) используйте следующие команды:

# cp /usr/local/psa/suexec/psa-suexec /usr/sbin/suexec
# chown root:apache /usr/sbin/suexec
# chmod 4510 /usr/sbin/suexec
# /etc/init.d/httpd restart
Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 0 из 0
Еще есть вопросы? Отправить запрос
Войдите в службу, чтобы оставить комментарий.