just using http.createServer to create a simple http server
in chrome ,using a input then using fetch to POST the File Obj, your file MUST be large enough(20G+)
on httpServer, pipe the req to a fs.createWriteStream("xxxxx")
just wait, when the file uploaded to about 10~12G, you maybe can get 【abortIncoming (node:_http_server:806:17)】
Although this is NOT 100% to reproduce, BUT try 2-3 times ,you will get this error
IF you use other http-server (such as uWebsocket ) everything woked well
see below:
`【request from client(chrome OR edge), client JUST use xmlhttp OR fetch to post a File object】
recv post {
host: '192.168.1.140:65535',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0',
'content-length': '20981630881',
accept: '/',
'accept-encoding': 'gzip, deflate',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
batchseq: '0',
'cache-control': 'no-cache',
'content-type': 'application/octet-stream',
name: 'paligemma-jax-paligemma-3b-pt-224-v1.tar.gz',
origin: 'http://192.168.1.140:65535',
pragma: 'no-cache',
referer: 'http://192.168.1.140:65535/',
size: '20981630881',
type: 'application%2Fx-gzip',
uiseq: 'events'
}
传输20981630881总耗时314.401s 文件位于 /home/cs6666-upld-srv/file/2024-11-21T12:56:35.146Z::0::paligemma-jax-paligemma-3b-pt-224-v1.tar.gz
[
false,
Error: aborted
at abortIncoming (node:_http_server:806:17)
at socketOnClose (node:_http_server:800:3)
at Socket.emit (node:events:532:35)
at TCP. (node:net:339:12) {
code: 'ECONNRESET'
}
]
//------------【
after the Abort message , the server report it receive a second POST from client(chrome OR edge)
BUT acturally
//-------------】
recv post {
host: '192.168.1.140:65535',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0',
'content-length': '20981630881',
accept: '/',
'accept-encoding': 'gzip, deflate',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
batchseq: '0',
'cache-control': 'no-cache',
'content-type': 'application/octet-stream',
name: 'paligemma-jax-paligemma-3b-pt-224-v1.tar.gz',
origin: 'http://192.168.1.140:65535',
pragma: 'no-cache',
referer: 'http://192.168.1.140:65535/',
size: '20981630881',
type: 'application%2Fx-gzip',
uiseq: 'events'
}
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
306856 root 20 0 19.1g 14.7g 7248 D 8.3 94.2 4:44.11 node --------------------【IT COST nearly all memory】
【-----------------------------
client upload ONE
but server received two POST (each post i will creat a new file)
-> server (req,res ) handle triggered post
->abortIncoming (node:_http_server:806:17)
-> server (req,res ) handle triggered post
the tcp socket is same
】
ls -l file/
total 14874992
-rw-r--r-- 1 root root 12621333720 Nov 21 21:01 2024-11-21T12:56:35.146Z::0::paligemma-jax-paligemma-3b-pt-224-v1.tar.gz
-rw-r--r-- 1 root root 2610647040 Nov 21 21:03 2024-11-21T13:01:49.563Z::0::paligemma-jax-paligemma-3b-pt-224-v1.tar.gz`
How often does it reproduce? Is there a required condition?
you need to upload a BIG-FILE (20G+) to triggered it
NOT always。
BUT high. (try 2-3 times)
What is the expected behavior? Why is that the expected behavior?
IF 'ECONNRESET' triggered, node should tear down the tcp-socket.
What do you see instead?
when 'ECONNRESET' triggered, node-js http-server still live, AND wrongly report recv NEW request
Additional information
it NOT 100% to trigger it. you maybe need try it on different machine FOR serveral times
[9809629.918039] Out of memory: Killed process 306856 (node) total-vm:21659964kB, anon-rss:15465044kB, file-rss:2268kB, shmem-rss:0kB, UID:0 pgtables:45924kB oom_score_adj:0
Version
Node.js v22.4.1.
Platform
Subsystem
No response
What steps will reproduce the bug?
see below: `【request from client(chrome OR edge), client JUST use xmlhttp OR fetch to post a File object】 recv post { host: '192.168.1.140:65535', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', 'content-length': '20981630881', accept: '/', 'accept-encoding': 'gzip, deflate', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', batchseq: '0', 'cache-control': 'no-cache', 'content-type': 'application/octet-stream', name: 'paligemma-jax-paligemma-3b-pt-224-v1.tar.gz', origin: 'http://192.168.1.140:65535', pragma: 'no-cache', referer: 'http://192.168.1.140:65535/', size: '20981630881', type: 'application%2Fx-gzip', uiseq: 'events' } 传输20981630881总耗时314.401s 文件位于 /home/cs6666-upld-srv/file/2024-11-21T12:56:35.146Z::0::paligemma-jax-paligemma-3b-pt-224-v1.tar.gz [ false, Error: aborted at abortIncoming (node:_http_server:806:17) at socketOnClose (node:_http_server:800:3) at Socket.emit (node:events:532:35) at TCP. (node:net:339:12) {
code: 'ECONNRESET'
}
]
//------------【 after the Abort message , the server report it receive a second POST from client(chrome OR edge) BUT acturally //-------------】 recv post {
host: '192.168.1.140:65535', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0', 'content-length': '20981630881', accept: '/', 'accept-encoding': 'gzip, deflate', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', batchseq: '0', 'cache-control': 'no-cache', 'content-type': 'application/octet-stream', name: 'paligemma-jax-paligemma-3b-pt-224-v1.tar.gz', origin: 'http://192.168.1.140:65535', pragma: 'no-cache', referer: 'http://192.168.1.140:65535/', size: '20981630881', type: 'application%2Fx-gzip', uiseq: 'events' }
top - 21:33:52 up 113 days, 12:51, 12 users, load average: 3.21, 3.11, 2.17 Tasks: 295 total, 1 running, 294 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.8 us, 2.0 sy, 0.0 ni, 76.3 id, 21.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 15988.4 total, 163.1 free, 15663.0 used, 162.4 buff/cache MiB Swap: 4096.0 total, 794.5 free, 3301.5 used. 42.8 avail Mem
306856 root 20 0 19.1g 14.7g 7248 D 8.3 94.2 4:44.11 node --------------------【IT COST nearly all memory】
【----------------------------- client upload ONE but server received two POST (each post i will creat a new file) -> server (req,res ) handle triggered post
->abortIncoming (node:_http_server:806:17) -> server (req,res ) handle triggered post the tcp socket is same
】
ls -l file/
total 14874992 -rw-r--r-- 1 root root 12621333720 Nov 21 21:01 2024-11-21T12:56:35.146Z::0::paligemma-jax-paligemma-3b-pt-224-v1.tar.gz -rw-r--r-- 1 root root 2610647040 Nov 21 21:03 2024-11-21T13:01:49.563Z::0::paligemma-jax-paligemma-3b-pt-224-v1.tar.gz`
How often does it reproduce? Is there a required condition?
you need to upload a BIG-FILE (20G+) to triggered it
NOT always。
BUT high. (try 2-3 times)
What is the expected behavior? Why is that the expected behavior?
IF 'ECONNRESET' triggered, node should tear down the tcp-socket.
What do you see instead?
when 'ECONNRESET' triggered, node-js http-server still live, AND wrongly report recv NEW request
Additional information
it NOT 100% to trigger it. you maybe need try it on different machine FOR serveral times