5.12. 높은 메모리 사용량 문제 해결
다음 시나리오에서는 메모리 사용량이 증가할 수 있습니다.
-
pmproxy
프로세스는 새 PCP 아카이브를 처리하는 데 사용 중이며 Redis 요청 및 응답을 처리하는 데 필요한 CPU 사이클은 없습니다. - Redis 노드 또는 클러스터가 과부하되어 제 시간에 들어오는 요청을 처리할 수 없습니다.
pmproxy
서비스 데몬은 Redis 스트림을 사용하며 PCP 튜닝 매개변수인 구성 매개 변수를 지원하며 Redis 메모리 사용량 및 키 보존에 영향을 미칩니다. /etc/pcp/pmproxy/pmproxy.conf
파일에는 pmproxy
및 관련 API에 사용 가능한 설정 옵션이 나열됩니다.
다음 절차에서는 높은 메모리 사용 문제를 해결하는 방법을 설명합니다.
사전 요구 사항
pcp-pmda-redis
패키지를 설치합니다.# dnf install pcp-pmda-redis
redis PMDA를 설치합니다.
# cd /var/lib/pcp/pmdas/redis && ./Install
절차
메모리 사용량의 문제를 해결하려면 다음 명령을 실행하고
inflight
열을 관찰합니다.$ pmrep :pmproxy backlog inflight reqs/s resp/s wait req err resp err changed throttled byte count count/s count/s s/s count/s count/s count/s count/s 14:59:08 0 0 N/A N/A N/A N/A N/A N/A N/A 14:59:09 0 0 2268.9 2268.9 28 0 0 2.0 4.0 14:59:10 0 0 0.0 0.0 0 0 0 0.0 0.0 14:59:11 0 0 0.0 0.0 0 0 0 0.0 0.0
이 열에는 진행 중인 Redis 요청 수가 표시됩니다. 즉, 대기하거나 전송되며 지금까지 응답이 수신되지 않았습니다.
숫자가 높으면 다음 조건 중 하나를 나타냅니다.
-
pmproxy
프로세스는 새 PCP 아카이브를 처리하는 데 사용 중이며 Redis 요청 및 응답을 처리하는 데 필요한 CPU 사이클은 없습니다. - Redis 노드 또는 클러스터가 과부하되어 제 시간에 들어오는 요청을 처리할 수 없습니다.
-
메모리 사용량이 많은 문제를 해결하려면 이 팜의
pmlogger
프로세스 수를 줄이고 다른 pmloggerarm을 추가합니다. 페더레이션 - 여러 pmloggerarms 설정을 사용합니다.Redis 노드가 장기간에 100% CPU를 사용하는 경우 더 나은 성능을 갖춘 호스트로 이동하거나 클러스터형 Redis 설정을 대신 사용하십시오.
pmproxy.redis.*
메트릭을 보려면 다음 명령을 사용합니다.$ pminfo -ftd pmproxy.redis pmproxy.redis.responses.wait [wait time for responses] Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff Semantics: counter Units: microsec value 546028367374 pmproxy.redis.responses.error [number of error responses] Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff Semantics: counter Units: count value 1164 [...] pmproxy.redis.requests.inflight.bytes [bytes allocated for inflight requests] Data Type: 64-bit int InDom: PM_INDOM_NULL 0xffffffff Semantics: discrete Units: byte value 0 pmproxy.redis.requests.inflight.total [inflight requests] Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff Semantics: discrete Units: count value 0 [...]
진행 중인 Redis 요청 수를 보려면
pmproxy.redis.requests.inflight.total
지표 및pmproxy.redis.requests.inflight.bytes
지표를 참조하여 현재의 모든 inflight Redis 요청에 의해 사용되는 바이트 수를 확인합니다.일반적으로 redis 요청 대기열은 0이지만 대규모 pmloggerarms를 사용하여 빌드할 수 있으므로 확장성은 제한되고
pmproxy
클라이언트에 대한 높은 대기 시간이 발생할 수 있습니다.pminfo
명령을 사용하여 성능 지표에 대한 정보를 확인합니다. 예를 들어redis.*
메트릭을 보려면 다음 명령을 사용합니다.$ pminfo -ftd redis redis.redis_build_id [Build ID] Data Type: string InDom: 24.0 0x6000000 Semantics: discrete Units: count inst [0 or "localhost:6379"] value "87e335e57cffa755" redis.total_commands_processed [Total number of commands processed by the server] Data Type: 64-bit unsigned int InDom: 24.0 0x6000000 Semantics: counter Units: count inst [0 or "localhost:6379"] value 595627069 [...] redis.used_memory_peak [Peak memory consumed by Redis (in bytes)] Data Type: 32-bit unsigned int InDom: 24.0 0x6000000 Semantics: instant Units: count inst [0 or "localhost:6379"] value 572234920 [...]
최대 메모리 사용량을 보려면
redis.used_memory_peak
지표를 참조하십시오.
추가 리소스
-
pmdaredis(1)
,pmproxy(1)
,pminfo(1)
매뉴얼 페이지 - PCP 배포 아키텍처