5.13. 对高内存使用量进行故障排除
以下情况可能会导致内存用量:
-
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 请求是 in-flight,这意味着它们被排队或发送,目前还没有收到回复。
数字表示以下条件之一:
-
pmproxy
进程忙于处理新的 PCP 归档,且没有处理 Redis 请求和响应的备用 CPU 周期。 - Redis 节点或集群已过载,且无法在时间处理传入的请求。
-
要对高内存使用问题进行故障排除,请减少此场的
pmlogger
进程数量,再添加另一个 pmlogger 场。使用联邦 - 多个 pmlogger farm 设置。如果 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 请求在flight 中,请参阅
pmproxy.redis.requests.inflight.total
指标和pmproxy.redis.requests.inflight.bytes
指标来查看所有当前在flight Redis 请求中消耗的字节数。通常,redis 请求队列为零,但可以根据大型 pmlogger 场的使用而构建,这限制了可扩展性,并可能导致
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)
man page - PCP 部署架构