실시간 성능을 방해하는 일부 주기적인 시스템 활동을 추적하는 방법

실시간 성능을 방해하는 일부 주기적인 시스템 활동을 추적하는 방법

저는 64비트 ubuntu-14.04를 실행하는 2코어 노트북에서 Pianoteq-5와 함께 Jack2를 실행하고 있습니다. 이러한 구성은 낮은 대기 시간 요구 사항으로 인해 실시간 성능에 매우 민감합니다. 처음에는 오디오 그룹에 대한 RR 기능을 활성화하기 위해 /etc/security/limits.conf를 조정했을 때 기본적으로 사라지는 지속적인 클릭 소리를 들었습니다.

이제 Jack과 Pianoteq 모두 SCHED_FIFO 스케줄링 클래스가 있는 스레드를 갖게 되었습니다. 128개 샘플 크기의 버퍼로 jack을 실행할 수 있으며 대부분의 경우 원활하게 실행됩니다. 내가 '가장'이라고 말한 이유는 몇 분마다 무언가가 천국을 파괴하기 때문입니다. 나는 끔찍한 균열의 전체 클러스터를 듣습니다. 나는 이것이 백그라운드에서 시작되는 우선순위가 높은 활동의 결과라고 생각합니다. 그런데 누가 범인인지 어떻게 추적할 수 있을까요?

답변1

이를 수행하는 한 가지 방법이 있습니다. 많은 파일을 생성하지만 다른 방법이 생각나지 않습니다.

서버가 언제 바쁜지 확인하기 위해 주변에 없다고 가정하면 sysstat를 사용하여 기록 리소스 데이터를 캡처해야 합니다.

첫 번째 방법: sysstat를 사용하고 5분마다 통계를 수집합니다(하루에 약 8MB가 소요됩니다). cron 항목은 5 * * * * /usr/lib/sa/sa1
또는 5 * * * * /usr/lib64/sa/sa1 과 같습니다.

sysstat는 최대 한 달 동안의 데이터를 보관합니다. 하지만 언제든지 파일을 복사하고 보관할 수도 있습니다.

"sar" 명령을 사용하여 기록 데이터를 되돌아보고 서버가 바쁜 시간을 확인할 수 있습니다.

이제 서버에 기록 데이터가 있으므로 프로세스 출력도 캡처하여 당시 실행 중인 내용을 확인할 수 있어야 합니다. 이를 위해 "ps" 또는 "top"을 사용할 수 있습니다.

따라서 5분마다 top 및 ps auxww의 출력을 캡처하여 실행 중인 모든 프로세스를 볼 수도 있습니다. 나는 "toparchive"와 "psarchive"라는 두 개의 하위 디렉터리를 만든 다음 이를 cron 작업으로 설정합니다.

5 * * * * top -b -n 1 > /root/toparchive/top.`date +"%Y%m%d_%H%M%S"`

또는

5 * * * * ps auxww > /root/psarchive/ps.`date +"%Y%m%d_%H%M%S"`

(이것은 많은 파일이 될 것입니다. 또는 /root/toparchive/20140701/과 같이 날짜 스탬프가 있는 추가 하위 디렉터리를 갖도록 스크립트를 작성할 수 있습니다.)

그러나 기본적으로 sysstat를 보면 서버가 언제 바쁜지 알 수 있습니다. 그런 다음 캡처한 적절한 top 또는 ps 출력을 확인하여 무엇이 공간을 차지했는지 확인할 수 있습니다.

프로세스가 메모리를 많이 사용하는 경우 "pmap" 및 "pgrep"을 추가로 사용하여 현재 프로세스와 실제 메모리 사용량도 확인할 수 있습니다.

관련 정보