문제해결 방안모색중입니다.
SunOS 2.7과 SunOS 2.8 두대의 컴퓨터가 있습니다.
2.7에서 잘돌던 데몬이 있는데요
이걸 2.8에서 돌려보니깐..처음에는 잘 동작하더라구요
2.7에서는 몇달간 문제가 없었는데..
2.8에서 컴파일하고 동작을 시키니깐
어느날 갑자기 데몬의 CPU 점유율이 100% 차지하게 됩니다.(top 명령)
이게 계속 100% 차지하면 잘못된 부분을 찾겠는데..
어쩌다 한번 그렇게 되어서요. 여러 방법으로 스트레스를 주어도
잘 동작합니다. 벌개진 얼굴로 디버깅하다가
선배님들의 조언을 듣고자 이렇게 글을 올립니다.
참고로..데몬의 동작은..
클라이언트가 소켓통신요청하면
스레드A를 생성하여
메시지큐에 요청을 집어넣고
미리 생성된 스레드 B는 외부 컴퓨터에 소켓통신하여 데이타를 얻어오고
메시지큐에 응답을 집어넣고
스레드A는 메시지큐에서 꺼내서 클라이언트에 응답해줍니다.
공유메모리에 상태정보 집어넣고 있구요
스레드A는 솔라리스스레드(thr_create()함수) 이고
프로세스간 공유되는 뮤텍스를 가지고 있습니다.
스레드B는 pthread_create로 생성한 스레드입니다.
짧은 소스인데..여러사람이 코드를 작성했다고 합니다.(제가 작성한것은 아님)
그니깐.. 소켓통신, IPC , 스레드(pthread,솔라리스 스레드)
이 정도 기술이 사용되고 있는데요 혹시 SunOS 2.8에서
특별히 해야할 패치가 있는 것인지요
아무 말이라도 좋으니 조언좀 주십시요.
시스템 프로그래밍에 관심이 많고 2주전에 졸업한 대학생입니다.
그래서...좀 허접합니다.
잘은 모르겠지만, 어느시점에서 데드락이 발생하는 것 같은데요,,제
잘은 모르겠지만,
어느시점에서 데드락이 발생하는 것 같은데요,,
제생각에는 os 버젼보다는 시스템을 바꾸면서,
실행시간의 차이로 인해서 발생되는 것 같습니다.
각 쓰레드들의 lock, unlock 시점을 프린트 하면서,
정상적으로 동작을 하는지를 확인해야 할것 같네요...
만약에..데드락이라면..
긴글이라 누가 읽어주실까 했는데
일단 읽어주시고 답변올려주셔서 감사드립니다. ^__^ ~~
사실상.. 제게 주어진 과제는 어쩌다 한번 발생하는
CPU 100%의 버그를 잡는 것입니다.
만약 데드락이라면...
CPU를 사용하지 않고 대기하므로 데드락 생각은 하지 않고 있거든요
컴파일러의 버전문제?
여러가지 잔대가리 굴리다가..
문득 생각이 들어서.. 컴파일러 버전을 확인해보앗습니다.
SunOS2.7에서 gcc 2.9.5 컴파일러를 사용하고 있었습니다.
그리고..
SunOS 2.8에서는 gcc 3.2 를 사용하고 있었습니다.
아마도 컴파일러 문제일것 같습니다. 아마도~~~
근데 이상황에서 어떻게 해결할 수 있을까요..
댓글 달기