RedHat 系システムで Apache、PHP、および IMAP を、FD_SETSIZE (1024) より大きいファイル記述子でリコンパイルするには

Created:

2016-11-16 13:06:39 UTC

Modified:

2017-06-05 06:09:10 UTC

0

Was this article helpful?


Have more questions?

リクエストを送信

RedHat 系システムで Apache、PHP、および IMAP を、FD_SETSIZE (1024) より大きいファイル記述子でリコンパイルするには

Applicable to:

  • Plesk for Linux/Unix

症状

ベンダーによって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

httpd dead but subsys locked

これは、多数の仮想ホストを構成したサーバで発生する一般的な Apache の問題です。詳しくは、こちらの記事を参照してください。 http://httpd.apache.org/docs/2.0/misc/descriptors.html

解決策

注記: Parallels Plesk 8.2.0 以降では、本記事に記述されているシステムパッケージのリコンパイルを行うことなく、最大 900 ドメインを OS ベンダーの Apache ビルドでホスティングできます。 Plesk サーバでパイプログ機能が有効化されている場合、 KB 2066 を参照してください。

注記: 本記事は、パッケージ形式が RPM である Linux OS(RHEL、Fedora、CentOS、SUsE など)が対象です。

Debian システムに関しては、 こちらの記事 を参照してください。

FreeBSD システムに関しては、 こちらの記事 を参照してください。

注記: Parallels Plesk では、Plesk ソフトウェア以外に多数のサーバアプリケーションが必要になります。例えば、Apache ウェブサーバ、MySQL サーバ、PHP モジュールおよびバイナリ、およびその他多くのアイテムは、Parallels がコンパイルしたり、提供しているものではありません。一方、OS ベンダーからの標準のシステム RPM パッケージは、Plesk で「変更なしの状態で」使用されます。このため管理者は、これらのパッケージを必要なオプションでアップグレードしたり、リコンパイルすることができます。本記事は、Plesk 管理者がホステッドドメインで使用するために Plesk に含まれない OS やシステムパッケージを構成する支援をすることを目的としています。

FD_SETSIZE の値を増やして、ソース RPM から関連アプリケーションやライブラリ( openssl apache imap PHP など)をリコンパイルする必要があります。これには、次の手順に従ってください。

システムで十分なファイルを開くことが許可されているか確認します。

# /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 パッケージをインストールする必要があります。これらは OS ディストリビューション CD またはダウンロードサイトから入手できます。以下のコマンドで typesizes.h および posix_types.h ファイルを探し、 FD_SETSIZE の値を編集します。

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

次に、値を次のように設定します。

#define __FD_SETSIZE 65536

OS のダウンロードサイトなどから次のソース RPM をダウンロードします。 http://rpm.pbone.net または http://rpmfind.net のような RPM エンジンを使用できます。

  • 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

以下のコマンドラインで、コンパイルした openssl 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

imap または libc-client-devel パッケージ(OS によって異なります)で提供された libc-client ライブラリをリコンパイルおよびインストールします。システムにインストールされているものをリコンパイルする必要があります。例えば:

# /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-*

Apache スタートアップスクリプト /etc/rc.d/init.d/httpd および /usr/sbin/apachectl で、他のコマンドの前に「 ulimit -n 65536 」コマンドを追加します。

/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
他にご質問がございましたら、リクエストを送信してください
ログインしてコメントを残してください。