« 自宅サーバー 冷却装置の作成 その4 | メイン | iPhone MACアドレスの確認 »

2008年07月07日

Apache PHP emalloc() でエラー

HTTPのPOSTで、非常に大きなサイズのデータを受け取る必要があり、試行錯誤しているんですがなかなか解決しません。

Error.logには「emalloc(): Unable to allocate 1407033033 bytes」が連発です。
(まー、1G超をPOSTってどうよ・・って思うんですが、なにぶんここ最近急激な変化があったもので、仕方なかったんですぅ)


プログラム自身を見直すのが一番の近道で本道なんでしょうが、自社内だけの話ではなく、先方のプログラムも変更をしなければならないので、何か方法な無いものかと探していました。

エラーメッセージからすると、当然mallocから推測できるように、メモリ確保の失敗が原因らしいですが、何をどうしたら直るのかがわかりません。

PHPの設定は当然大きな値に変更しましたが、まったく状況は変わりません。

・・・・・・・・ということで、いろいろと情報を探ってみると

住商情報システムさん?株式会社アライドエンジニアリングさん?
http://www.scs.co.jp/advc/techinfo_linux.html
とか、大規模なシステムを組んでいるところから、いくつか技術情報がでてました。
----------------------上記サイトより抜粋--------------------------------
x86 (386, 486, Pentium ...) の Linux では, 最新のカーネルを使えば 64GB まで使える, などと聞かれたことがあるかも知れませんが, これはシステム全体として使えるメモリサイズで, 1 プロセスではこんなに使えません。 まず,32bit のアーキテクチャということで 4GB (2^32B) の壁 があるのですが,実は更に制限があります。 簡単にまとめますと,
1回の malloc のサイズが 128kB 以下のものの合計:約 1GB まで
1回の malloc のサイズが 128kB 以上のものの合計:約 2GB まで
・・・・・・・・
---------------------------------------------------------------

このようなことは、当然Linuxの技術文書にも載っていることとは思いますが、なにぶんエイゴはマッタクダメデース。

大変助かりました。


解決したわけではありませんが、原因がわかりすっきりしたところで、プログラムの変更です。


原因がわからないままでのプログラム変更は絶対にしたくない性質なので、これでさくさく仕事が進みそうです。


投稿者 Anne : 2008年07月07日 11:45

コメント

コメントしてください




保存しますか?


 

ハワイ旅行| サトピの子連れグアム旅行記| グアム旅行の情報サイト| ジャマイカ| ハワイ・ハワイ旅行の携帯サイト| 海外レンタル携帯電話| ハワイに行きたいAnneさんのページ| サイパン旅行の情報サイト| ケイマン諸島の情報サイト| 沖縄 沖縄旅行の情報サイト| ガーデニング| エクステリア| リナックス| ザウルス| アフィリエイト| 相互リンク| ブログパーツ| ブログ・ブログ比較| 日本のお城データベース| 技術立国日本| 通信販売| 靴 通販 ショッピング| 腕時計 ショッピング 通販| 無料動画、フラッシュ、API

Copyright (C) 2006-2007 Anne Corporation. All Rights Reserved.