[PHP-users 34665] Re: php.ini がopenされているのに読み込まれない[原因判明]

大瀧保広 y.ohtaki @ mx.ibaraki.ac.jp
2009年 7月 24日 (金) 13:52:44 JST


こんにちは、大瀧です。

On 2009/07/24, at 11:23, Hideo NAKAMITSU wrote:

> 中満と申します。
>
> On Fri, 24 Jul 2009 09:00:33 +0900
> 大瀧保広 <y.ohtaki @ mx.ibaraki.ac.jp> wrote:
>
>> Solaris の fopen の仕様に引っかかっていました。
>> 32bitアプリでは255より大きいファイルディスクリプタでは
>> ファイルにアクセスできないようです。
>
> Solarisのファイルディスクリプタの上限は変更可能です。

「255より大きい値のファイルディスクリプタでアクセスできない」
というのは、上限とは独立に生じる現象のようです。

>
>> (以下、fopen のマニュアルからの該当部分の抜粋)
>>
>> 	Normally, 32-bit applications return an  EMFILE  error  when
>> 	attempting  to  associate a stream with a file accessed by a
>> 	file descriptor with a value greater than 255. If  the  last
>> 	character  of mode is F, 32-bit applications will be allowed
>> 	to associate a  stream  with  a  file  accessed  by  a  file
>> 	descriptor  with  a  value  greater than 255. 
>>
>> open は成功してるのに、fopenがエラーになってたのですね。
>>
>> (最終的にfopenに渡る)モードを"r" から "rF"に直して歩くか、
>> 64bitアプリとしてビルドする(PHP? Apache?)ことになりそうです。
>
> おそらくそれぞれのバーチャルホストでログを出力しているため
> ファイルディスクリプタが足りなくなっているのだと思いますが、
> Apacheをビルドする際、FD_SETSIZEの値を8192など大きめの値に
> するだけでエラーは解消するのでは無いでしょうか?

プロセスあたりのファイルディスクリプタの個数の上限は1024になっており、
実際、バーチャルホストのログファイルはすべて問題なく出力されています。

> # Solaris + バーチャルホストという組み合わせだと、誰もが通る道ですよね、これ。

ですね。
しかも、ホスティング数がそこそこ増えないと発現しないし...
最初の現象からPHPの問題だと思いこんだのが、ハマりのもとでした。




PHP-users メーリングリストの案内