Redis SLOWLOG은 속도가 느린 명령의 시간을 redis로 기록합니다. 기록 된 시간은 마이크로 초입니다. 그러나 시간이 CPU 시간인지 아니면 실시간인지 확실하지 않습니다. 따라서 시스템에 부하가 많이 걸리고 redis 프로세스가 굶어 죽는다면 그렇지 않으면 빠른 명령에서 더 느린 로그 항목이 발생하게됩니까?redis SLOWLOG 명령은 CPU 시간 또는 실시간을 측정합니까?
답변
SLOWLOG는 CPU가 아닌 벽시계 감각으로 시간을줍니다. 명령이 실행 시간에 대해 구성된 임계 값을 초과하면 항목이 로그에 추가됩니다. CPU가 굶고 일반 또는 빠른 작업을 완료하는 데 시간이 오래 걸리고 임계 값을 초과하면 실제로 로그에 추가됩니다.
Redis는 CPU 1 대신 실시간으로 사용합니다.
인터넷을 검색 한 결과 redis slowlog (http://blog.wjin.org/posts/redis-slowlog.html)에 대한 흥미로운 링크를 발견 했으므로 Redis 소스 코드를 검색 할 수있는 아이디어를 얻었습니다. 이 데이터는 slowlog this function
void slowlogPushEntryIfNeeded(client *c, robj **argv, int argc, long long duration);
의 호출에 의해 첨가하는 것이 밝혀 소스 코드에 따라
검색 후이 기능이 server.c 파일 내부에서만 호출됩니다.
은 그러므로 시간이 기록되며, 이는 [이 코드]으로부터 생성된다 (https://github.com/antirez/redis/blob/bb3b5ddd1968d2715acc37b63124ccf461276160/src/server.c#L2207)
start = ustime();
c->cmd->proc(c);
duration = ustime()-start;
그리고 ustime는 following source code로 제조된다.
/* Return the UNIX time in microseconds */
long long ustime(void) {
struct timeval tv;
long long ust;
gettimeofday(&tv, NULL);
ust = ((long long)tv.tv_sec)*1000000;
ust += tv.tv_usec;
return ust;
}
그래서 gettimeofday 인 기간 생산을 담당하며 CPU 대신 실제 시간을 표시합니다.
좋은 답변이지만 다른 답변에 대한 올바른 답을 이미 받았습니다. –
감사합니다. 따라서 CPU가 부족한 컴퓨터가있는 경우에는 CPU가없는 컴퓨터보다 느린 로그 항목이 많을 것으로 예상됩니다. –
네, 맞습니다. –