是不是收到了1G的http post資料,這個進程佔用的記憶體就會有1G?

來源:互聯網
上載者:User
如果記憶體只有1G,接下來又會發生什麼,比如php,死機?
如果是node.js,單進程本來就有1G的記憶體限制。又會發生什麼,崩潰?

回複內容:

PHP 貌似確實會把接收到的 request body 放到記憶體裡。所以為避免麻煩,php.ini 裡通常會配置最大 request body size 限制,預設通常是 2MB、 4MB 之類的,總之不大 。超過這個限制的請求會直接被 413 掉。

而且如果用 node.js 的話,這個應該取決於實現 http server 的人自己的設定。比如說我完全可以把接收到的資料寫到硬碟裡,以免佔用記憶體:
http.createServer(function (req, res) {  var fd = fs.openSync('/tmp/' + Math.random(), 'w+');  req.on('data', function (chunk) {    fs.writeSync(fd, chunk);  });  req.on('end', function () {    callbackWithRequestBody(fd);    res.end();  });});
nodejs 的 buffer 記憶體似乎是另算的,另外這種超大檔案上傳一般都是串流,讀多少寫多少,記憶體佔用不算高。可以用串流擷取到請求的流,慢慢讀慢慢寫就好了,node server擷取到的request本身就是實現了readable stream的東西
詳見Stream Node.js v5.1.1 Manual & Documentation
大部分的web架構只是封裝了讓你不直接接觸到請求body的那個網路流。不是的,都是流的形式,http/tcp底層都是TCP協議,讀寫都有一定的緩衝區,資料或檔案通過流的形式不停寫到本地
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.