Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js-JSONStream期间的无限循环_Node.js_Stream_Infinite Loop_Jsonstream - Fatal编程技术网

node.js-JSONStream期间的无限循环

node.js-JSONStream期间的无限循环,node.js,stream,infinite-loop,jsonstream,Node.js,Stream,Infinite Loop,Jsonstream,我有一个node.js服务器在生产中冻结,这似乎是由JSONStream内部的无限循环造成的。以下是从冻结服务器的核心转储捕获的堆栈跟踪: 1: toString [buffer.js:~392] (this=0x1e28fb6d25c9 <a Buffer>#1#,encoding=0x266ee104121 <undefined>,start=0x266ee104121 <undefined>,end=0x266ee104121 <undefined

我有一个node.js服务器在生产中冻结,这似乎是由JSONStream内部的无限循环造成的。以下是从冻结服务器的核心转储捕获的堆栈跟踪:

1: toString [buffer.js:~392] (this=0x1e28fb6d25c9 <a Buffer>#1#,encoding=0x266ee104121 <undefined>,start=0x266ee104121 <undefined>,end=0x266ee104121 <undefined>)
2: arguments adaptor frame: 0->3
3: write [/home/deploy/node_modules/JSONStream/node_modules/jsonparse/jsonparse.js:136] (this=0x32cc8dd5a999 <a Parser>#2#,buffer=0x32cc8dd5aa49 <a Buffer>#3#)
4: /* anonymous */ [/home/deploy/node_modules/JSONStream/index.js:~17] (this=0x32cc8dd5ab11 <a Stream>#4#,chunk=0x32cc8dd5aa49 <a Buffer>#3#)
5: write [/home/deploy/node_modules/JSONStream/node_modules/through/index.js:~24] (this=0x32cc8dd5ab11 <a Stream>#4#,data=0x32cc8dd5aa49 <a Buffer>#3#)
6: write [_stream_readable.js:~582] (this=0x266ee106c91 <JS Global Object>#5#,dest=0x32cc8dd5ab11 <a Stream>#4#,i=0,list=0x266ee104101 <null>)
7: flow [_stream_readable.js:592] (this=0x266ee106c91 <JS Global Object>#5#,src=0x32cc8dd5ac69 <an IncomingMessage>#6#)
8: /* anonymous */ [_stream_readable.js:560] (this=0x266ee106c91 <JS Global Object>#5#)
9: _tickCallback [node.js:415] (this=0x29e7331bb2a1 <a process>#7#)

1:toString[buffer.js:~392](这在JSONStream repo上=0x1e28fb6d25c9,并尝试分叉JSONParse,仅更新到最新的JSONParse版本。它没有解决此问题。

您的问题似乎是由of
jsonstream@0.0.5
。虽然我无法为您最终解决这个问题,但我必须了解整个过程r、 这似乎表明您的缓冲区非常大

这也解释了为什么您的服务器被锁定(正如您在聊天中提到的),为什么事件循环没有继续,为什么您的内存没有上升到天空,但您的CPU会上升;这里可能发生的是您正在尝试
toString()
难以置信的大量字节,这是您的硬件无法做到的,它会死掉

无论如何,报告来自该线索的任何进一步调查。我觉得不可避免的是,您将在开发盒上重新处理该问题。这可能很简单,只需向缓冲区添加一些健全检查,并确保其不超过某个大小


只有当
n第一条消息说
toString[buffer.js:~392]时,才会点击上面的代码部分
,问题出在buffer.js第392行,通过@JonathanS,什么可能导致无限循环?该源看起来非常无害。您有JSON字符串本身,正在序列化到流中吗?很好。您的问题似乎是由您引起的。让我们来看看。再次感谢!我已经设法验证我们确实在该行循环。直接无限循环的原因是这个.bytes\u在\u序列中是0,所以我们从不增加计数器i,所以我们被卡住了。我还没有找出0的根本原因,但是…progress!!这似乎是一个奇怪的错误。只有当
bytes\u在\u序列中最后出现两个独立但相关的问题时,才到达我链接的部分。首先,版本我们使用的JSONStream的sion包括在内jsonparse@0.0.5,这是在OP中提到的修复之前。一旦我们应用了该修复,服务器仍然处于冻结状态,因为该修复处理了128到194之间的ASCII字符,但没有处理244以上的字符。tldr:特定的ASCII字符导致jsonparseWhat内部出现无限循环一个非常有趣的bug:P@ZECTBynmo似乎有这个问题,只是没人开公关。