2010-06-17 10 views
0

부여 : RHEL 5.3에서 멀티 스레드 (~ 20 스레드) C++ 응용 프로그램. 로드 상태에서 테스트 할 때 top은 CPU 사용량이 매초 10-40 % 범위로 점프한다는 것을 보여줍니다.C++ 프로세스 CPU 사용량 감지가 발생합니다.

디자인이 매우 간단합니다. 대부분의 스레드가 활성 객체 디자인 패턴을 구현합니다. 스레드는 스레드 안전 큐를 가지고 있고, 다른 큐의 요청은 큐에 푸시되며 스레드는 큐를 폴링하고 요청을 처리합니다 . 처리 된 요청으로 인해 새 요청이 다음 처리 스레드로 보내집니다.

이 프로세스는 높은로드에서 데이터를 수신/전송할 때마다 여러 개의 TCP/UDP 연결을 갖습니다.

충분한 자료를 제공하지 못했습니다. 이것은 꽤 큰 응용 프로그램이며, 모든 부분에 익숙하지 않습니다. 이제 Windows에서 ACE 라이브러리를 통해 Linux로 이식되었습니다 (네트워킹 부분에 사용됨).

문제는 응용 프로그램에있는 것이지 외부의 것이 아니라면 문제를 발견하는 데 사용할 수있는 기술/도구/접근 방법은 무엇입니까? 예를 들어, 아마도 이것은 뮤텍스 경합에 의한 것 같습니다.

+0

그래서 정확히 무엇이 문제입니까? 높은 CPU 사용량? "부하가 적다"고 기대하지 않습니까? –

+0

지속적으로 점프하는 동안 안정적인 CPU 사용을 기대합니다. – dimba

+0

Windows에서 안정적 이었습니까? –

답변

1

저는 비슷한 문제에 직면 해 왔습니다. 그리고 저를 도왔던 단계가 있습니다. 1) strace를 사용하여 응용 프로그램이 시스템 호출을 실행하는 데 소요되는 시간을 확인하십시오.

2) OProfile을 사용하여 응용 프로그램과 커널을 프로파일 링합니다.

3) SMP 시스템을 사용하는 경우 numa 설정 인 을 보면 혼란이있었습니다. /proc/appPID/numa_maps는 메모리에 대한 액세스 상황을 간략하게 보여줍니다. 누나가 누락되면 점프가 발생할 수 있습니다.

4) 앱에서 TCP 연결에 대해 언급했습니다. MTU 크기를보고 올바른 값으로 설정되어 있는지 확인하십시오. 전송되는 데이터의 유형에 따라 Nagles Delay를 적절하게 사용하십시오. Nagles Delay