HTTP 서버와 유사하게 영구적으로 실행되도록 설계된 C++
컴파일된 프로그램( )이 있습니다 . ELF binary
나는 사용하고 싶다월그린드프로그램의 메모리 누수를 분석합니다. 그러나 Valgrind는 일반적으로 프로그램이 종료된 후 출력 및 분석 결과를 인쇄합니다. 프로그램이 계속 실행되는 동안 주기적으로 분석 결과를 인쇄하도록 Valgrind를 구성하는 방법이 있습니까?
Valgrind가 이 기능을 지원하지 않는 경우 해당 기능이 있는지 알고 싶습니다.대안이것은 달성될 수 있다.
제가 작업 중인 프로그램은 임베디드 장치에서 서비스로 실행되도록 설계되었습니다. 이를 염두에 두고, 작은 메모리 누수라도 결국 Linux OOM Killer를 트리거하여 프로그램을 종료하게 되면 문제가 될 수 있습니다.
여기서 주요 목표는 추적하는 것입니다.메모리 누수(또는 기타 메모리 손상)이러한 위반의 메모리 주소를 기록합니다(따라서 다음 명령을 사용하여 이러한 메모리 위반의 원인을 찾을 수 있습니다).분해기술).
거기서 찾았어이 답변PID
, 프로세스 및 파일을 사용하여 프로세스의 메모리 사용량을 확인하는 것이 좋습니다 /proc/PID/smaps
. diff 명령을 사용하면 특정 시간과 미래 시간의 메모리 소비를 비교하여 차이점을 확인할 수 있습니다. 이 정보를 사용하여 GDB 코어 덤프를 사용하여 분석을 완료 할 수 gcore -o process
있습니다 .strings
이 작업을 수행하는 더 좋은 방법이 있는지 궁금합니다. (나에게는 수동 프로세스가 너무 많은 것 같습니다.)
Valgrind를 사용하고 서비스를 24시간 동안 실행하도록 제한한 다음 Valgrind의 출력에 문제가 있는지 확인하는 것을 고려해 보았습니다. 그러나 내 프로그램이 24시간 동안 간헐적으로 실행될 수 있다면 이것이 수년 동안 지속적으로 실행된다는 보장은 없다고 생각합니다.