2016-06-06 9 views
6

나는 web.py를 사용하여 파이썬 웹 서버를 만듭니다. 이 서버는 선형 프로그래밍 문제를 해결하기 위해 호출되며 CBC 라이브러리를 사용하여이를 수행합니다.Python 서버 "Aborted (Core dumped)"

가끔씩, 즉처럼 보이는 로그로 서버 충돌 :

78.243.184.3:56271 - - [03/Jun/2016 04:35:54] "HTTP/1.1 GET /optimization" - 200 OK 
Aborted (core dumped) 

나는 보라는 하나 web.py에서 유래하며,이 C 오류입니다 "(코어 덤프) 중단되었습니다" 또는 CBC.

오류의 출처를 추적 할 수있는 방법이 있습니까?

+1

코어 파일을 찾을 수 있습니다. –

+0

그 방법을 알고 계십니까? – Arnaud

+0

시스템에 따라 다릅니다. 'find/-name "core"-ls "가 될 수 있습니다. –

답변

4

코어 덤프는 웹 서버의 기본 코드에 결함이 있기 때문에 발생합니다. 요즘 파이썬은 꽤 튼튼한 편이므로 이러한 결함은 거의 항상 내 경험의 C 확장 버그로 인해 발생합니다.

따라서 문제가 3 개 있습니다.

  1. 코어 덤프 파일을 찾아야합니다. 이것은 대개 덤프 된 프로세스의 현재 작업 디렉토리에 있습니다. 그러나 configation options that can change this이 있습니다.

  2. 실패한 호출 스택을 디버깅해야합니다. StackOverflow에서 다룹니다. How to analyze a program's core dump file with gdb?

  3. 파이썬 인터프리터 스택을 실행중인 파이썬 코드와 다시 관련시켜야 할 수도 있습니다. 이렇게하려면 gdb 용 Python 디버그 심볼과 Python 확장을 설치해야합니다. 파이썬 위키에는 그 일을하는 방법에 대한 좋은 조언이 있습니다. here.

+0

이 답변을 주셔서 감사합니다. 내일 gdb를 확인하겠습니다. 제 질문은 몇 가지 있습니다. 1. CBC가 아니라 웹 서버에서 문제가 발생한다는 것을 어떻게 알 수 있습니까? 2. 문제는 내 코드가 아닌 라이브러리 web.py에서 비롯된 것임을 인정합니까? 3. server.py 디렉토리에서 코어 덤프 파일을 찾지 못했습니다. web.py의 구성 옵션은 어디에서 찾을 수 있습니까? 4. web.py의 코드에서 디버깅하는 방법은 무엇입니까? 5. 다른 라이브러리에 대해 web.py를 변경하는 것이 가장 좋은 방법이라고 생각하십니까? 당신의 도움을 주셔서 감사합니다! – Arnaud

+1

나는 진솔하게 대답 할 수 없다. 코어 덤프가 있고 gdb를 실행하면 버그가있는 곳을 알려줍니다. 이것이 사후 분석을위한 핵심 파일이 존재하는 이유입니다. 누구든지 더 많은 도움을 얻으려면 필자가 설명한 기술을 사용하여 호출 스택을 추출하고 질문을 업데이트해야합니다. –

+0

하지만 버그는 매 2 ~ 3 주에 한 번씩 갑자기 나타납니다. 나는 그것을 재현 할 수 없습니다 ... – Arnaud

0

코어 덤프의 가장 일반적인 이유는 도달 범위 외부의 메모리 주소 (프로그램에 속하지 않는 메모리)에 액세스하는 것입니다. 운영 체제는 SegFault 또는 BusError라는 인터럽트로 프로그램을 인터럽트하여 프로그램이 잘못된 메모리 주소에 액세스하려고 시도한 방법을 알려줍니다. 그러면 프로그램은 커널에 의해 강제 종료됩니다. 코어 덤프 (메모리 덤프와 프로그램 스택)를 생성하도록 커널을 구성한 경우 디스크에 저장됩니다. 다른 답변에서 언급했듯이 GDB 나 다른 디버거에 코어 덤프를로드하고 프로그램이 충돌했을 때 수행중인 작업을 표시 할 수 있습니다. 이 문제로 인해 문제가 발생할 수도 있고 그렇지 않을 수도 있습니다. 일반적으로 숙련 된 프로그래머가 이러한 도구를 사용하는 것은 어렵 기 때문에 잘 알고 있어야합니다. 당신이 GDB를 사용하려고 시도하는 경우,이 시도 :

$ gdb를/경로 /로/충돌/프로그램/진/경로// 핵심

(GDB) 것이다

'BT'

BT에 StackTraces로 알려진 'backtraces'를 표시하고 프로그래머가 오류를 추적하는 데 유용 할 수 있습니다.

오류를 재현 할 수 있다면 문제가되는 프로그램의 작성자에게 자세한 버그 보고서를 제출하는 것이 좋습니다. 선임 소프트웨어 개발자 인 나조차도 때때로 그 길을 택합니다. :-)