mongodb在建立一个T级别的数据库时,进程挂掉的解决方法
mongod进程退出,退出时数据库中记录大概1.2亿,数据库小大600G
错误信息如下:
SatMay1208:37:18Invalidaccessataddress:0x7ef6036a9000 SatMay1208:37:19Gotsignal:7(Buserror). SatMay1208:37:19[conn4878]moveChunkdatatransferprogress:{active:true,ns:"genbank.main",from:"shard1/192.168.136.72:29022,192.168.136.73:29023,192.168.136.79:29021",min:{_id:ObjectId('4fabda86be960438ed0099d2')},max:{_id:ObjectId('4fabdaa1be960439500040b1')},state:"clone",counts:{cloned:8138,clonedBytes:50270960,catchup:0,steady:0},ok:1.0}mymemused:0 SatMay1208:37:19Backtrace: 0xa909990xa90f700x7f3c7ffcc0600x7f3c7f5b38730xa483420xa48c760x97cd040x97e2ff0x940ca50x9445740x8866b70x88dc290xaa33f60x6374070x7f3c7ffc3efc0x7f3c7f55d89d /usr/local/mongodb-linux-x86_64-2.0.4/bin/mongod(_ZN5mongo10abruptQuitEi+0x399)[0xa90999] /usr/local/mongodb-linux-x86_64-2.0.4/bin/mongod(_ZN5mongo24abruptQuitWithAddrSignalEiP7siginfoPv+0x220)[0xa90f70] /lib/x86_64-linux-gnu/libpthread.so.0(+0x10060)[0x7f3c7ffcc060] /lib/x86_64-linux-gnu/libc.so.6(+0x137873)[0x7f3c7f5b3873] /usr/local/mongodb-linux-x86_64-2.0.4/bin/mongod(_ZN5mongo17MigrateFromStatus5cloneERSsRNS_14BSONObjBuilderE+0x3d2)[0xa48342] /usr/local/mongodb-linux-x86_64-2.0.4/bin/mongod(_ZN5mongo19InitialCloneCommand3runERKSsRNS_7BSONObjEiRSsRNS_14BSONObjBuilderEb+0x16)[0xa48c76] /usr/local/mongodb-linux-x86_64-2.0.4/bin/mongod(_ZN5mongo11execCommandEPNS_7CommandERNS_6ClientEiPKcRNS_7BSONObjERNS_14BSONObjBuilderEb+0x6a4)[0x97cd04] /usr/local/mongodb-linux-x86_64-2.0.4/bin/mongod(_ZN5mongo12_runCommandsEPKcRNS_7BSONObjERNS_11_BufBuilderINS_16TrivialAllocatorEEERNS_14BSONObjBuilderEbi+0x6ff)[0x97e2ff] /usr/local/mongodb-linux-x86_64-2.0.4/bin/mongod(_ZN5mongo11runCommandsEPKcRNS_7BSONObjERNS_5CurOpERNS_11_BufBuilderINS_16TrivialAllocatorEEERNS_14BSONObjBuilderEbi+0x35)[0x940ca5] /usr/local/mongodb-linux-x86_64-2.0.4/bin/mongod(_ZN5mongo8runQueryERNS_7MessageERNS_12QueryMessageERNS_5CurOpES1_+0x1724)[0x944574] /usr/local/mongodb-linux-x86_64-2.0.4/bin/mongod()[0x8866b7] /usr/local/mongodb-linux-x86_64-2.0.4/bin/mongod(_ZN5mongo16assembleResponseERNS_7MessageERNS_10DbResponseERKNS_11HostAndPortE+0x559)[0x88dc29] /usr/local/mongodb-linux-x86_64-2.0.4/bin/mongod(_ZN5mongo16MyMessageHandler7processERNS_7MessageEPNS_21AbstractMessagingPortEPNS_9LastErrorE+0x76)[0xaa33f6] /usr/local/mongodb-linux-x86_64-2.0.4/bin/mongod(_ZN5mongo3pms9threadRunEPNS_13MessagingPortE+0x287)[0x637407] /lib/x86_64-linux-gnu/libpthread.so.0(+0x7efc)[0x7f3c7ffc3efc] /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7f3c7f55d89d] Logstream::getcalledinuninitializedstate SatMay1208:37:19ERROR:Client::~Client_contextshouldbenullbutisnot;client:conn Logstream::getcalledinuninitializedstate SatMay1208:37:19ERROR:Client::shutdownnotcalled:conn
问题已经解决。有用机器是numa架构,因此在启动mongod进程的时候加上:numactl--interleave=all
mongodb官网上有如下说明,可供参考:
Linux,NUMAandMongoDBtendnottoworkwelltogether.IfyouarerunningMongoDBonnumahardware,werecommendturningitoff(runningwithaninterleavememorypolicy).Problemswillmanifestinstrangeways,suchasmassiveslowdownsforperiodsoftimeorhighsystemcputime.
numactl
ToturnoffNUMA,startmongodwith
numactl--interleave=all${MONGODB_HOME}/bin/mongod--configconf/mongodb.conf
procsettings
echo0>/proc/sys/vm/zone_reclaim_mode
Youcanchangezone_reclaim_modewithoutrestartingmongod.Formoreinformationonthissettingseehttp://www.kernel.org/doc/Documentation/sysctl/vm.txt.