[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 メーリングリストの案内