分段故障运行Express

在运行PM2快速应用程序时,我非常随机地收到了SIGSEGV。 奇怪的是,服务器在过去的几个星期运行良好。 它不会打印任何错误消息,除了:

App [XXX] with id [7] and pid [27757], exited with code [255] via signal [SIGSEGV] 

在实现“segfault-handler”模块之后,我开始接收一些堆栈跟踪。 看来应用程序遇到了一些不同的分段错误:

 /lib/x86_64-linux-gnu/libpthread.so.0(+0x10330)[0x7fd211f87330] node(_ZN2v88internal9HashTableINS0_15ObjectHashTableENS0_20ObjectHashTableShapeENS0_6HandleINS0_6ObjectEEEE18FindInsertionEntryEj+0x40)[0xc0b680] node(_ZN2v88internal15ObjectHashTable3PutENS0_6HandleIS1_EENS2_INS0_6ObjectEEES5_i+0x124)[0xc0c0a4] node(_ZN2v88internal7Runtime17WeakCollectionSetENS0_6HandleINS0_16JSWeakCollectionEEENS2_INS0_6ObjectEEES6_i+0x59)[0xc7d639] node(_ZN2v88internal25Runtime_WeakCollectionSetEiPPNS0_6ObjectEPNS0_7IsolateE+0x11d)[0xc7d89d] [0x2acdd80963b] /lib/x86_64-linux-gnu/libpthread.so.0(+0x10330)[0x7f0fc311c330] node(_ZN2v88internal32IncrementalMarkingMarkingVisitor26VisitFixedArrayIncrementalEPNS0_3MapEPNS0_10HeapObjectE+0x376)[0xad8a16] node(_ZN2v88internal18IncrementalMarking4StepElNS1_16CompletionActionENS1_18ForceMarkingActionENS1_21ForceCompletionActionE+0x2c1)[0xad6181] node(_ZN2v88internal8NewSpace15SlowAllocateRawEiNS0_19AllocationAlignmentE+0x74)[0xb05244] node(_ZN2v88internal4Heap11AllocateRawEiNS0_15AllocationSpaceES2_NS0_19AllocationAlignmentE+0x1b9)[0xa678c9] node(_ZN2v88internal4Heap20AllocateFillerObjectEibNS0_15AllocationSpaceE+0x19)[0xab00b9] node(_ZN2v88internal7Factory15NewFillerObjectEibNS0_15AllocationSpaceE+0x2d)[0xa67d1d] node(_ZN2v88internal29Runtime_AllocateInTargetSpaceEiPPNS0_6ObjectEPNS0_7IsolateE+0x5e)[0xc99e8e] [0x249862c06355] /lib/x86_64-linux-gnu/libpthread.so.0(+0x10330)[0x7fbebabd2330] node(_ZN2v88internal9HashTableINS0_15ObjectHashTableENS0_20ObjectHashTableShapeENS0_6HandleINS0_6ObjectEEEE18FindInsertionEntryEj+0x40)[0xc0b680] node(_ZN2v88internal15ObjectHashTable3PutENS0_6HandleIS1_EENS2_INS0_6ObjectEEES5_i+0x124)[0xc0c0a4] node(_ZN2v88internal7Runtime17WeakCollectionSetENS0_6HandleINS0_16JSWeakCollectionEEENS2_INS0_6ObjectEEES6_i+0x59)[0xc7d639] node(_ZN2v88internal25Runtime_WeakCollectionSetEiPPNS0_6ObjectEPNS0_7IsolateE+0x11d)[0xc7d89d] [0x125b9620963b] 

我知道这里的信息很less。 任何人都可以请告诉我一个好的方法来开始诊断? 我已经检查了PM2日志,mongoDB日志但没有运气。

谢谢! 火星

由于堆栈轨迹每次都不一样,不太明亮,所以你只能尝试一下。 第一个主要的嫌疑人将是使用本机代码的东西,因为它不可能是简单的Javascript导致segFault。 这可能是本地代码,它以某种方式破坏了内存,或者与node.js中的垃圾收集器没有正确的交互。

所以,寻找的东西是你当前版本的node.js和你使用本地代码(如mongoDB)的东西之间的交互。 这里是要尝试的东西:

  1. 识别使用本机代码的所有模块,并临时删除您无法使用的任何模块。

  2. 将node.js和mongoDB升级到最新版本,以防在导致问题的特定版本之间发生某种交互。 如果您不能将node.js升级到最新的稳定版本,那么请确保您正在运行的所有模块都已经通过了Node.js版本的authentication。

  3. 重新启动你的服务器,以防万一在操作系统中引起问题的东西太多了。

  4. 从一个干净的数据库开始,或者对数据库运行某种数据库检查,以validation那里没有损坏。

  5. 每当你更新你的数据库scheme,确保你有一个策略来移动前面的数据库(看起来像在MongoDB中,你可以确保你为新的scheme元素分配一个默认值)。

  6. 在做出改变之后收集新的信息并重复这个过程,试图一次只改变一件事情,这样如果修复了这个问题,你就可以确切地知道哪个项目修复了它。

类似这样的情况可能会发生,当你复制代码与node_modules包括二进制模块编译为一个不同的体系结构比你试图运行它。

尝试删除node_modules并从头开始运行npm install ,或者尝试运行npm rebuild而不删除node_modules