Javascript 尝试查找node express阻塞的cpu代码,并希望使express处理程序与堆栈跟踪异步
我有node10 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) =>
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