gloox 라이브러리를 사용하여 xmpp 서버에 연결하는 프로그램이 있습니다. 프로그램을 직접 실행하면 연결이 항상 성공합니다. 그러나 프로그램의 CPU 사용량이 높습니다. 그래서 나는 valgrind에게 도움을 청했습니다. 그러나 valgrind (--tool = callgrind)를 사용하여 프로그램을 실행하면 연결 시간이 항상 초과됩니다. 나는 밸 글린 드가 처음이라는 것을 인정해야하지만, 왜 이런 일이 일어나고 있습니까?valgrind에서 프로그램을 실행할 때 연결 시간 초과가
1
A
답변
0
Valgrind는 실행 된 코드의 변형을 여러 번 수행하므로 기본적으로 실행 속도가 10-50 배 느립니다. 따라서 연결 시간이 초과 될 가능성이 있습니다. Valgrind를 strace 아래의 프로파일 된 프로그램과 함께 실행하여이 연결을 오류 코드별로 찾을 수 있습니다.
0
만약 당신의 원래 문제가 높은 cpu와 gloox, 나는 거의 확신합니다 귀하의 프로그램을 폴링 매 10 밀리 초에 대한 새로운 xmpp 메시지입니다. 예를 들어 recv(10)
대신 recv(-1)
으로 프로그램을 실행하십시오. 나는 비슷한 문제 및 추가 디버깅으로 실행 한 후 XMPP의 XML 스탠자를 구문 분석 할 때
0
, 그것은 문제가 내려 온다. 우리의 경우, 문제는 long2string을 사용하는 util.h 함수 int2string을 사용하는 xpath 파서에서 발생했습니다.
int len = (int)(log((double)(10))/log((double) 10)) + 1;
2를 제공하지만, Valgrind의 아래에 1을 제공하고 모든 것을 파괴 실행 정상에서.
우리는 Valgrind의는 본질적으로 느린#include <sstream>
static inline const std::string int2string(int value)
{
/* ADDON*/
//when we call long2string, it does weird cmath log stuff and with computer precision,
//the result may be different from an environnement to another. eg: when using valgrind
std::ostringstream s;
s << value;
return s.str();
/* ADDON */
//return long2string(value);
}
하여 기능
를 교체했다. 연결에 대한 시간 초과 값은 무엇입니까? 그것은있을 법하지 않지만, 당신이 그것을 타격을 줄 수 있다고 생각할 수 있습니다. 놀이에 뭔가가있을 수 있습니다. 후드 아래에서 무슨 일이 일어나고 있는지 확인하기 위해 tcpdump를 시도 했습니까? – Flexo