ProgramingTip

대체 분할 오류의 원인은 무엇입니까?

bestdevel 2020. 11. 1. 18:29
반응형

대체 분할 오류의 원인은 무엇입니까?


Kosaraju의 SCC (Strong Connected Component) 그래프 검색 알고리즘을 Python으로 구현하고 있습니다.

이 프로그램은 작은 데이터 세트에서 훌륭하게 실행 초대라고 형 그래프 (800,000 개 이상의 노드)에서 실행하면 "Segmentation Fault"가 표시됩니다.

그 원인은 무엇입니까? 감사합니다!


추가 정보 : 초대형 데이터에서 언제라도 사용했을 때 다음 오류가 발생했습니다.

"RuntimeError: maximum recursion depth exceeded in cmp"

그런 다음 사용하여 재귀 제한을 발생합니다.

sys.setrecursionlimit(50000)

그러나 '분할 오류'가 있습니다.

무한 루프가 최고 수준으로 작은 데이터에서 실행됩니다. 프로그램이 자원을 고갈 어디에 있습니까?


이러한 확장 (C로 작성)이 할 수없는 메모리에 액세스 할 때 발생 합니다.

다음과 같은 방법으로 추적 할 수 있습니다.

  • sys.settrace코드의 첫 번째 줄에 추가하십시오 .
  • 답변이 에서 마크gdb설명한대로 사용 .. 명령 프롬프트에서

    gdb python
    (gdb) run /path/to/script.py
    ## wait for segfault ##
    (gdb) backtrace
    ## stack trace of the c code
    

나는 당신이 당신의 문제를 해결했다는 것을 이해하지만, 이것은 대답을 읽는 다른 사람들이 있습니다. 당신은 당신의 운영이 기본 프로세스에 할당하는 스택을 늘려야합니다.

수행하는 방법은 운영에 따라 실행하는 방법. Linux에서는 명령으로 ulimit -s현재 값을 확인할 수 있으며 다음과 같이 늘릴 수 있습니다.ulimit -s <new_value>

이전 값을 두 배로 늘리고 작동하지 않을 때 메모리가 부족하거나 메모리 부족할 때까지 계속 두 배로 늘리십시오.


세분화 오류는 일반적인 오류이며 다음과 같은 여러 원인이 있습니다.

  • 메모리 부족
  • 램 메모리 결함

  • 쿼리를 사용하여 db에서 거대한 데이터 세트 가져 오기 (인출 된 데이터의 크기가 스왑 mem보다 큰 경우)
  • 잘못된 쿼리 / 버그 코드
  • 긴 루프 (다중 재귀)

ulimit 업데이트는 Python (Python segfault .. who know!) 및 C ++ 구현 모두에서 segfault를 수정하여 Kosaraju의 SCC 구현에 적용됩니다.

내 MAC의 경우 다음을 통해 가능한 최대 값을 찾았습니다.

$ ulimit -s -H
65532

Google 검색 에서이 기사를 찾았지만 다음 "개인 솔루션"에 대해 논의 된 내용을 발견했습니다.


Linux 용 Windows 시스템에서 Python 3.7에 대한 최근의 성가심은 동일한 Pandas 라이브러리가있는 두 대의 컴퓨터에서 하나는 저에게 segmentation fault, 하나는 경고를보고 입니다. 어떤 것이 더 새로운 것인지는 확실하지 않지만 "다시 설치" pandas됩니다.

내가 버기 머신에서 실행 한 명령.

conda install pandas

자세한 내용 : 모든 내용 (Git를 통해 동기화 됨)을 실행하고 어느 둘 다 WSL + Anaconda를 사용하는 Windows 10 컴퓨터입니다. 여기에 케이스를 만드는 스크린 샷이 있습니다. 또한 명령 줄 python이에 대해 불평 하는 시스템에서 Segmentation fault (core dumped)Jupyter Lab은 매번을 다시 시작합니다. 더 나쁜 것은 경고가 전혀 주어지지 않았다는 것입니다.

여기에 이미지 설명 입력


몇 달 후 업데이트 : Windows 시스템에서 Jupyter 서버 호스팅을 중단했습니다. 이제 Windows에서 WSL을 사용하여 Linux 서버에서 열린 원격 포트를 가져오고 원격 Linux 컴퓨터에서 모든 작업을 실행합니다. 몇 달 동안 실행 오류를 경험 한 적이 없습니다. :)


RPI에서 dlib를 업그레이드 한 후이 세분화 오류가 발생했습니다. 위의 Shiplu Mokaddim이 제안한대로 스택을 추적하고 OpenBLAS 라이브러리에 포함되었습니다.

OpenBLAS도 다중 프로그램에서 사용하면 분할 오류가 저장 될 때까지 하나의 급수적으로 증가합니다. 다중 단일 응용 프로그램의 경우 OpenBlas를 단일 프로그램 모드로 설정합니다.

Python 가상 환경에서 다음을 편집하여 OpenBLAS에 단일 만 사용 지시합니다.

    $ workon <myenv>
    $ nano .virtualenv/<myenv>/bin/postactivate

다음을 추가하십시오.

    export OPENBLAS_NUM_THREADS=1 
    export OPENBLAS_MAIN_FREE=1

rpi3b에서 모든 이미지 인식 앱을 찾았습니다.

참조 : https://github.com/ageitgey/face_recognition/issues/294

참고 URL : https://stackoverflow.com/questions/10035541/what-causes-a-python-segmentation-fault

반응형