Ruby 2.6 Rails 6.0에서 MongoDB를 사용하면 Segmentation Fault가 발생하면 concurrent-ruby를 의심합니다.
프로세스를 종료할 때 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 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
이상으로 버전 올려 봅시다.
Reference
이 문제에 관하여(Ruby 2.6 Rails 6.0에서 MongoDB를 사용하면 Segmentation Fault가 발생하면 concurrent-ruby를 의심합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YusukeIwaki/items/7d0df2d281a0ebea8826텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)