3

私は大企業の開発者であり、エクスポート関数に非常に大量のメモリを必要とするレガシー コードがあります。これに対処するには、ini_set('memory_limit', '4G'); 使用されている。

問題は、スクリプトがメモリ不足でクラッシュすることです。制限を 2G に設定すると、スクリプトは最後まで実行されます。1GB のピーク メモリ使用量にも達しません。

コードはバージョン管理され、会社の他のメンバーと共有されているため、制限を変更することはできず、ローカル インストールで制限を変更するのは面倒です。

私の質問は、2GB ではなく 4GB の制限でスクリプトがクラッシュする原因は何ですか?

PS: 私のセットアップは、nginx と php-fpm で Debian を実行している virtualbox マシンです。VMには4GBのRAMがあります(ただし、これを変更しても違いはないようです)。


更新

64 ビット オペレーティング システムで新しい仮想マシンを作成し、vm メモリを 2GB に設定すると動作します。(4GBを使用する場合はそうではありません)。私は 2GB で問題ないので、この問題はクローズします。

4

3 に答える 3

3

これは自然な制限です。ファイル マッピングにも 2 GB または 4 GB のアドレス空間が使用され、メモリ ページが必要になります。

最終的な解決策は、64 ビット PHP インタープリターを使用することです (つまり、可能であれば 64 ビット システムに切り替えます)。

于 2012-05-29T08:15:06.327 に答える
1

多分あなたは32ビットシステムを使っていますか?

VM に 4GB しかない場合は、メモリを増やす必要があります。

于 2012-05-29T08:11:52.183 に答える
1

32 ビット システムでは、4GB がメモリ空間の限界です。PHP が 4GB のメモリを取得しようとすると、メモリ違反が発生する可能性があると思います。

于 2012-05-29T08:16:05.237 に答える