Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Javascript 尝试查找node express阻塞的cpu代码,并希望使express处理程序与堆栈跟踪异步_Javascript_Node.js_Express_Asynchronous_Setimmediate - Fatal编程技术网

Javascript 尝试查找node express阻塞的cpu代码,并希望使express处理程序与堆栈跟踪异步

Javascript 尝试查找node express阻塞的cpu代码,并希望使express处理程序与堆栈跟踪异步,javascript,node.js,express,asynchronous,setimmediate,Javascript,Node.js,Express,Asynchronous,Setimmediate,我有node10 express应用程序,类似于: const app = express(); app.use(function(req, res, next) { ..} app.use( bodyParser.text({ limit: '1mb', type: '*/*', }) ); more of those.. app.post('myApiName', [(req, res, next) => {..}, (req, res, next) =>

我有node10 express应用程序,类似于:

const app = express();
app.use(function(req, res, next) { ..}
app.use(  bodyParser.text({
    limit: '1mb',
    type: '*/*',
  })
); 
more of those..
app.post('myApiName', [(req, res, next) => {..}, (req, res, next) => {..} .. etc many more]);
https.createServer(sslOptions, app) ...
但是有更多的路线和中间产品。 由于我遇到的阻塞问题,cpu正在处理某些事情,并且几秒钟内“没有响应”,我添加了模块。但是它提供给我的大多数堆栈跟踪都是从Server.connectionListener(\u http\u Server.js:319:3)的
开始的,…
。自述文件中提到:
在某些情况下,您的代码不会被直接调用,跟踪它仍然很困难。查看HTTP测试用例如何生成指向Server.connectionListener的堆栈作为慢函数,因为其中的所有内容都是同步调用的。如果您感到绝望,您可以随时将处理程序的代码包装到setImmediate中。或者使用资源。
。 我知道我需要从另一个“源”运行我的处理程序,该“源”将从事件循环中的另一个任务开始(我可能没有很好的措辞),但我并不真正理解使用setImmediate的建议可以做什么。我看到有一些npm库用于错误处理,但我仍然不确定我的代码应该是什么样子(特别是因为我有许多处理程序和中间件)。
我很乐意获得一些建议或代码片段,以了解如何获得更好的堆栈跟踪。

“几秒钟都没有响应”您能跟踪到某个api端点吗?@Jonaswillms非常感谢您的回答。例如,服务器正在工作,某些事情导致“立即设置超时”任务在一秒钟后发生(我认为这就是npm中被阻塞的模块所做的)。那么多API同时发生,每个API都在进行DB调用、aws调用、body计算等等,我不知道哪段代码需要CPU时间。你试过连接Chrome开发工具吗?谢谢你@Jonaswillms。我在本地尝试过,但它并没有真正复制,我得到了在生产环境中运行这个blocked at包的建议,它检测到block(但不会像我也尝试过的v8 profiler那样导致它),并打印堆栈跟踪,但其中一些对我来说不清楚,比如process.nextTick的新TickObject(internal/process/next_tick.js:86:9)上的
(internal/process/next_tick.js:117:16)、endReadable(_stream_readable.js:1083:13)、IncomingMessage.readable.readable(_stream_readable.js:403:7).
或Server.connectionListener上的
“几秒钟内没有响应”你能追踪到某个api端点吗?@Jonaswillms非常感谢你的回答。服务器正在工作,一些事情导致“立即设置超时”任务在一秒钟后发生(我认为npm中的阻塞模块就是这样做的)。那么多API同时发生,每个API都在执行DB调用、aws调用、正文计算等操作,我不知道哪些代码需要CPU时间。您是否尝试连接Chrome Devtools?谢谢@Jonaswills。我在本地进行了尝试,但它并没有真正复制,我得到了有关该程序包运行的建议生产,它检测块(但不像我也尝试过的v8 profiler那样导致它),并打印堆栈跟踪,但其中一些对我来说不清楚,比如在new TickObject(internal/process/next_tick.js:86:9)、process.nextTick(internal/process/next_tick.js:117:16)、endReadable(_stream_readable.js:1083:13)上的
,位于IncomingMessage.Readable.read(_stream_Readable.js:403:7).
或服务器上的
。connectionListener