是不是收到了1G的http post数据,这个进程占用的内存就会有1G?
程序员文章站
2022-05-07 14:54:38
...
如果内存只有1G,接下来又会发生什么,比如php,死机?
如果是node.js,单进程本来就有1G的内存限制。又会发生什么,崩溃?
而且如果用 node.js 的话,这个应该取决于实现 http server 的人自己的设定。比如说我完全可以把接收到的数据写到硬盘里,以免占用内存:
详见Stream Node.js v5.1.1 Manual & Documentation
大部分的web框架只是封装了让你不直接接触到请求body的那个网络流。 不是的,都是流的形式,http/tcp底层都是TCP协议,读写都有一定的缓冲区,数据或文件通过流的形式不停写到本地
如果是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协议,读写都有一定的缓冲区,数据或文件通过流的形式不停写到本地
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频