【问题标题】:What does redis cache in the Gitlab?Gitlab中redis缓存了什么?
【发布时间】:2023-03-28 06:56:01
【问题描述】:

我已经生成了一个键空间列表以及它们的大小和 ttl(715 个键空间),并试图分析哪个键空间正在消耗大量内存。 我可以看到键空间占用的总内存为 1.2 MB,但我的 Redis PVC 已填充到 13 GB。那么,是什么在 Redis 容器中占用了这么多内存呢?

Redis 版本:6.0.9 图片:bitnami/redis:6.0.9-debian-10-r0

我用来生成列表的脚本:

#!/bin/bash

NAMESPACE=$1
SECRET=$2
POD=$3
CONTAINER=$4

PASSWORD_REDIS=$(kubectl get secrets -n $NAMESPACE $SECRET -o jsonpath='{.data.secret'} | base64 -d )
kubectl exec -it -n $NAMESPACE $POD -c $CONTAINER -- redis-cli -a ${PASSWORD_REDIS} KEYS '*' | tail -n +2 > keylist.csv
    keylist.csv

declare -a KEYS;
arraylen=0;
i=0;
j=0;

test2(){
    arraylen=${#KEYS[@]}
    echo "kubectl exec -i -n ${NAMESPACE} ${POD} -c ${CONTAINER} -- redis-cli -h 127.0.0.1 -a ${PASSWORD_REDIS} MEMORY USAGE ${KEYS[j]}" > keys.sh
    chmod +x keys.sh
    ./keys.sh > size.txt 2> /dev/null

    echo "kubectl exec -i -n ${NAMESPACE} ${POD} -c ${CONTAINER} -- redis-cli -h 127.0.0.1 -a ${PASSWORD_REDIS} TTL ${KEYS[j]}" > ttl.sh
    chmod +x ttl.sh
    ./ttl.sh > ttl.txt 2> /dev/null

    SIZE=$(cat size.txt)
    TTL=$(cat ttl.txt)
    ((j=$j+1))
    echo "$j,${KEYS[j]},${SIZE},${TTL}" >> output.csv
    if [ $j -ge $arraylen ]; then exit
    fi
    test2
}

while IFS=') '  read -r slno line; do
  LINE=${line};
  KEYS+=([i]=$LINE)
  i=$[$i+1]
done < keylist.csv

test2

输出如下所示(第 3 列是以字节为单位的大小,第 4 列是以毫秒为单位的 TTL):

【问题讨论】:

    标签: bash kubernetes redis gitlab kubernetes-pvc


    【解决方案1】:

    可以在 herehere 找到存储在 GitLab 的 redis 缓存中的文档。

    它会随着时间而变化,并取决于您使用的 GitLab 版本。

    还值得一提的是,GitLab 已经构建了一个工具,redis-keyspace-analyzer 用于分析 GitLab redis 实例的键空间。您可以使用它来查找占用最多空间的键。 (另见redis-bigkeys 及其infra notes)。这些工具由 gitlab.com 工程师构建,用于与 gitlab.com 一起使用,但应该适用于自托管的 gitlab 实例。

    【讨论】:

      猜你喜欢
      • 2016-01-14
      • 1970-01-01
      • 2020-03-12
      • 2021-06-06
      • 2016-10-02
      • 2019-03-27
      • 2016-11-24
      • 2011-05-03
      • 1970-01-01
      相关资源
      最近更新 更多