2012-06-15 2 views
1

현재 충돌이있는 C++ 프로세스가 있습니다 (주로 성능 테스트가 완료 될 때). 코어 로그를 검사 할 때 크래시가 발생하기 전에 많은 Informix 오류를 볼 수있었습니다.Informix 오류 후 프로세스 크래시

프로세스 코어 덤프 전에 Out of Memory 예외와 관련된 오류 코드 406이있는 일련의 Informix 오류가 표시됩니다. 오류 코드 244 (다음 행을 가져 오기 위해 실제 주문 읽기를 수행 할 수 없음)도 표시됩니다.

누군가이 시나리오가 프로세스 코어 덤프를 초래할 수있는 방법에 대한 생각을 공유 할 수 있습니까?

상세 정보

프로세스 : 멀티 스레드 C++ 과정
환경 : 솔라리스
데이터베이스 : ESQL 인터페이스 인포믹스

ESQL DB 기능 (삽입/업데이트/선택)에 의해 체포 된 던지고 과정. catch 블록의 메시지는 프로세스 로그에 나타나는 마지막 메시지입니다. 그 후에 프로세스에 대한 단서가 없습니다.

프로세스 coredumps도 표시 될 때 나타나는 정상 메시지 (Caught signal. dumped core)입니다.

+0

코어 덤프 또는 Informix 서버의 C++ 프로그램입니까? 스레드 C++ 프로그램을 사용하고 있습니까? 스레드 라이브러리를 사용하고 있습니까? 어떤 인터페이스를 사용하고 있습니까 (ODBC, ESQL/C, OLEDB, ...)? 프로그램이 실행되는 플랫폼은 무엇입니까? 데이터베이스 서버? 어떤 버전을 사용하고 있습니까? 애플리케이션이 오류 보고서를 어떻게 처리합니까? 온라인 로그 파일의 내용은 무엇입니까? 기타 문제가 될 수있는 무수한 문제가 있습니다. 서버가 충돌하지 않아야합니다. 그것은 모든 종류의 일을 할 수 있지만 충돌은 그들 중 하나가 아닙니다. –

+0

@JonathanLeffler - 다중 스레드 C++ 프로세스입니다. 그것은 ESQL 인터페이스를 사용합니다. 프로세스가 Solaris에서 실행 중입니다. 프로세스가 어떤 단서도없이 충돌합니다. 프로세스 로그에 마지막으로 표시되는 로그는 일련의 Informix 오류입니다. 프로세스에 코어 덤프가 있음을 나타내는 로그조차도 나타나지 않습니다. pstack은 올바른 정보도 제공하지 않습니다. – cppcoder

+0

스레드 안전 (r) ESQL/C 라이브러리에 연결하고 있습니까? 이것은 Solaris입니다. 8, 9, 10, 11입니까? 어떤 버전의 ESQL/C? 스레드 간의 연결을 제대로 공유하고 있습니까? 당신은 SET CONNECTION 'conn_name'DORMANT를 알고 있습니까? 스레드가 설정되기 전이나 후에 연결을 설정합니까? DB와 통신하는 각 스레드는 자체 연결을합니까? (귀하의 의견에 감사드립니다. Informix 데이터 서버가 아닌 C++ 프로그램이 맞습니까?) –

답변

1

during performance testing라고 말하면 커다란 단서가 있습니다 !!!!!

일반적으로 성능 테스트 케이스의 경우 컴파일러 최적화가 실행되어 충돌이 발생하는 잘 작성되지 않은 코드의 일부가 단락됩니다.

일반적인 경우를 말하자면 변수는 스레드를 통해 읽어야 할 때 휘발성으로 선언되지 않습니다.

+0

'휘발성'이 어떻게 영향을 줄 수 있는지 예를 들려 줄 수 있습니까? 스레드 프로그램? 내 것은 다중 스레드 프로세스입니다. – cppcoder

+0

http : //www.eetimes.co.kr/discussion/beginner-s-corner/4023801/소개 - 휘발성 - 키워드 좋은 기사. –