Trouble/Linux

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV) 문제

침닦는수건 2023. 3. 8. 14:53
반응형
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

위 오류명이 나오면서 프로그램이 터지는 경우가 더러있다. 에러에 대한 상세 내용이나 발생 위치에 대한 설명 없이 그냥 터지는 경우가 많은데 원인을 찾기 어려운 오류 중 하나다.
 
원인은 간단하게 말해서 segmentation fault, 즉 메모리 레벨에서 문제가 생긴 것이다. 허용되지 않은 (혹은 잠겨있는) 메모리에 접근하려고 하거나 잘못된 방법으로 메모리에 접근하려고 할 경우 발생하는 것이다. 
 
힌트는 메모리 사용에서 문제가 생겼다는 것 뿐, 발생 원인은 작성하던 코드에 따라 천차만별이므로 정해진 해결법은 없다. 다만 다음과 같은 리스트를 점검해보면 좋다.
 

  • multi processing을 사용하는 경우를 점검할 것. 병렬적으로 돌아가는 무언가에서 서로 메모리를 왔다갔다 하는 코드를 작성한 것이 있는지 점검한다.
  • 계속 별도로 돌아가는 장비와 연결되어 있진 않은지 점검할 것. 예를 들어, 한 번 켜두면 계속 돌아가는 ZED2 같은 카메라를 사용할 시 이미지 grab하고 이를 처리하려고 하면 장비가 점유하고 있는 메모리에 접근하려고 하는 것이라 터지기도 한다. (이 땐 이미지의 복사본을 사용해야 한다. (.copy()를 이용해라.)
  • GPU와 CPU 메모리를 오가는 부분을 점검할 것. 
  • 다루는 데이터에 inf 나 NaN이 없는지 점검할 것. 
  • bit 연산자를 사용하는 부분을 점검할 것.
  • 딥러닝을 하고 있다면 graph가 어디서 꼬이진 않았는지 점검할 것. torch.no_grad()를 중간에 사용해서 graph를 끊었다 붙였다 했다거나 jacobian을 직접 계산해서 사용한다거나 gradient의 gradient 같이 N차 미분을 사용한 부분을 점검할 것

 

반응형