한 프로세스의 CPU 점유율이 90% 정도가 되었습니다.
글쓴이: gsong / 작성시간: 월, 2003/09/01 - 10:52오전
솔라리스에서 서버프로그램을 만들고 있습니다.
Connection Oriented 방식으로 클라이언트들이 접속 하구요.
클라이언트 패킷 처리를 위해서 poll() 을 사용합니다.
그리고 간간이 클라이언트에서 패킷을 보내오구요.
근데 프로세스를 처음 시작할때는 CPU 점유율 등이 정상적입니다. 높지 않다는 말이죠. 그러다가 어느 '특정' 상황이 되면 CPU 점유율이 높아집니다.
처음엔 프로그램의 어느 부분에서 무한루프같은것에 빠지나 싶었는데,
프로그램이 멀티쓰레드 구조도 아니고
CPU 점유율이 높은 상태에서도 정상적으로 작동을 합니다.
이런 문제를 겪으신 분들 계시면 문제점을 찾기 위해 어떤 걸 해봐야 하는지 조언 부탁드립니다.
그리고 gdb 같은 툴을 이용해서 현재 실행 중인 프로세스에서 어떠함수들을 계속 호출하는지 등의 정보를 알 수 있는 방법이 있나 싶어 질문 올려 봅니다.
그럼 고수님들의 도움 부탁드리겠습니다.
Forums:
select() 를 쓰신다면 select에 들어가는 변수값들을 확인해 보
select() 를 쓰신다면 select에 들어가는 변수값들을 확인해 보심이 좋을듯 합니다.
^^*
Re: 한 프로세스의 CPU 점유율이 90% 정도가 되었습니다.
strace나 ltrace의 -p 옵션을 사용하여 해당 pid가 어떤 (시스템 혹은 라이브러리) 콜을 하는지 확인할 수 있습니다.
내외부의 특정 조건을 통해 프로그램을 안전하게 종료할 수 있다면, gprof를 통해 프로파일을 뽑아보는 것도 가능한 선택 가운데 하나 아닐까 생각해 봅니다.
----------------------------
May the F/OSS be with you..
truss를 사용해보세요..
truss를 사용해 보시죠...
CPU 점유율이 90%가 넘게 되는 상황에서 truss -p pid를 하면 현재 프로세스가 어떤 system call을 사용하고 있는지 알 수 있습니다.
세상은 하나..........
댓글 달기