Ruby 2.6 Rails 6.0에서 MongoDB를 사용하면 Segmentation Fault가 발생하면 concurrent-ruby를 의심합니다.

4687 단어 mongoidMongoDBRails
일시적인 기사입니다.

프로세스를 종료할 때 Segmentation Fault가 발생함



Rails 콘솔이나 Rails runner에서 mongodb에 데이터를 일괄 투입하는 배치를 실행시키면
MONGODB | [25] mongodb:27017 | admin.endSessions | SUCCEEDED | 0.000s
[BUG] Segmentation fault at 0x0000000000000014
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
-- Control frame information -----------------------------------------------
c:0001 p:---- s:0003 e:000002 (none) [FINISH]
-- Machine register context ------------------------------------------------
 RIP: 0x00007f209f69725b RBP: 0x00007f208c6c9c80 RSP: 0x00007f208c6c9bd8
 RAX: 0x0000000000000014 RBX: 0x000055a9a45db430 RCX: 0x0000000000000000
 RDX: 0x0000000000000014 RDI: 0x000055a9a3da07a0 RSI: 0x00007f208c6c9c30
  R8: 0x0000000000000010  R9: 0x000055a99e9f4780 R10: 0x0000000000000010
 R11: 0x0000000000000246 R12: 0x000055a9a2be1fd0 R13: 0x0000000000000000
 R14: 0x000055a9a40b3510 R15: 0x000055a9a248b2e8 EFL: 0x0000000000010206
-- C level backtrace information -------------------------------------------
root@a46ce56df74d:/usr/src/app# 

이런 식으로 Rails 콘솔을 exit한 타이밍에 Segmentation Fault가 일어났다.

과연 모르겠다.

구그라도 유용한 정보는 나오지 않는다.



「mongo segmentation fault」라든가 「mongoid segmentation fault」라고 하면, 낡은 Ruby버전의 정보만이 나오는 것이다.

MongoDB+Ruby의 조합으로 일어나고 있는지, Rails의 버전 의존으로 일어나고 있는지, Mongoid에서 일어나고 있는지, 등 등, 전혀 구별되지 않았기 때문에, 구분을 시도했다.
  • Mongoid를 사용하지 않고 mongodb의 Ruby 드라이버를 직접 사용하면? → Segmentation Fault 발생. Mongoid는 시로.
  • Ruby 2.5라고? → Segmentation Fault 발생

  • ··· 결국 잘 모르겠습니다.

    그런 가운데, 우연히 "mongoid Rails6 Segmentation Fault"에서

    htps : // 기주 b. 코 m / 라이 ls / 라이 ls / 이스에 s / 37004


    이런 것을 쓰는 사람이 있었다.

    concurrent-ruby 버그?



    어쩐지 매우 그런 게 있었다. (내가 찾은 것은 아니고, 회사의 선배가 발견했다. 신...!!)

    어쨌든 concurrent-ruby를 1.1.6 계에 올려 보면 ...
    [4] pry(main)> exit
    MONGODB | EVENT: #<ServerDescriptionChanged address=mongodb:27017 topology=Single[mongodb:27017] prev=#<Mongo::Server:Description:0x47071403801000 config={"ismaster"=>true, "maxBsonObjectSize"=>16777216, "maxMessageSizeBytes"=>48000000, "maxWriteBatchSize"=>100000, "localTime"=>2020-01-30 08:10:49 UTC, "logicalSessionTimeoutMinutes"=>30, "connectionId"=>168, "minWireVersion"=>0, "maxWireVersion"=>8, "readOnly"=>false, "saslSupportedMechs"=>["SCRAM-SHA-256", "SCRAM-SHA-1"], "ok"=>1.0} average_round_trip_time=0.0028635040000000002> new=#<Mongo::Server:Description:0x47071377786500 config={"ismaster"=>true, "maxBsonObjectSize"=>16777216, "maxMessageSizeBytes"=>48000000, "maxWriteBatchSize"=>100000, "localTime"=>2020-01-30 08:10:52 UTC, "logicalSessionTimeoutMinutes"=>30, "connectionId"=>170, "minWireVersion"=>0, "maxWireVersion"=>8, "readOnly"=>false, "saslSupportedMechs"=>["SCRAM-SHA-256", "SCRAM-SHA-1"], "ok"=>1.0} average_round_trip_time=0.0024351632000000002>>
    MONGODB | Server description for mongodb:27017 changed from 'standalone' to 'standalone'.
    MONGODB | EVENT: #<TopologyChanged prev=Single[mongodb:27017] new=Single[mongodb:27017]>
    MONGODB | Topology type 'Single' changed to type 'Single'.
    MONGODB | [26] mongodb:27017 #3 | admin.saslStart | STARTED | {}
    MONGODB | [26] mongodb:27017 | admin.saslStart | SUCCEEDED | 0.001s
    MONGODB | [27] mongodb:27017 #3 | admin.saslContinue | STARTED | {}
    MONGODB | [27] mongodb:27017 | admin.saslContinue | SUCCEEDED | 0.001s
    MONGODB | [28] mongodb:27017 #3 | admin.saslContinue | STARTED | {}
    MONGODB | [28] mongodb:27017 | admin.saslContinue | SUCCEEDED | 0.001s
    MONGODB | [29] mongodb:27017 #3 | admin.endSessions | STARTED | {"endSessions"=>[{"id"=><BSON::Binary:0x47071403781940 type=uuid data=0xa448984090b24fab...>}]}
    MONGODB | [29] mongodb:27017 | admin.endSessions | SUCCEEDED | 0.001s
    root@a46ce56df74d:/usr/src/app# 
    

    오! !

    어쩌면 고치고 있습니다. 어쩌면.

    요약



    Rails 6에서 Mongoid나 MongoDB를 사용하기 시작하면 Segmentation Fault 일어나서・・・라는 분은 concurrent-ruby 를 1.1.6.pre1 이상으로 버전 올려 봅시다.

    좋은 웹페이지 즐겨찾기