我有一個節點應用程序,它週期性地在我的生產服務器上達到100%。我希望能夠發送一個信號給節點進程,這會給我一個堆棧跟蹤,所以我可以在代碼中找到問題所在。 有沒有簡單的方法來做到這一點?從外部獲取正在運行的節點js的當前堆棧跟蹤
我的服務器是Ubuntu的14.04.2,我正在運行的節點0.12.2
我有一個節點應用程序,它週期性地在我的生產服務器上達到100%。我希望能夠發送一個信號給節點進程,這會給我一個堆棧跟蹤,所以我可以在代碼中找到問題所在。 有沒有簡單的方法來做到這一點?從外部獲取正在運行的節點js的當前堆棧跟蹤
我的服務器是Ubuntu的14.04.2,我正在運行的節點0.12.2
有一個名爲console.trace()
功能將幫助你完成你正在尋找做什麼。
How to print a stack trace in Node.js?
坐落於過程的事件處理程序來監視用下面的代碼SIG1:現在
process.on('SIGUSR1', function(){ console.trace });
,從終端,發出以下命令發送節點的SIGUSR1信號:
killall -10 node
我不確定堆棧跟蹤是否會回到足夠遠的位置以便您有用,它可能只顯示SIG1USR上的回調,不確定。但我認爲這會讓你更接近。
我能夠編譯我自己的節點和V8的版本,以獲得一個堆棧跟蹤: https://github.com/joyent/node/issues/25263
感謝您的答覆布賴恩。我相信只會顯示它所在函數的堆棧跟蹤,意思是SIGUSR1的事件處理程序堆棧,而不是無限循環所在地的堆棧跟蹤 – Dirk
我不認爲使用SIGUSR1的建議將有所幫助。接收到信號後,該過程將等待完成它正在做的事情。在處理SIGUSR1之前,事件迴路必須能夠提供空氣,如果它停滯不前,它將永遠不會到達那裏。 –
另外在我的測試中,當程序處於一個長循環時,它不處理SIGUSR2事件,直到循環完成爲止 – Dirk