【问题标题】:Why does my carbon-cache process occupies ever increasing amount of memory?为什么我的 carbon-cache 进程占用越来越多的内存?
【发布时间】:2017-06-04 02:16:32
【问题描述】:

我正在使用石墨+钻石来监控我的数百台服务器。我发现 carbon-cache 每隔 20 小时就会被 oom-killer 杀死。起初,我认为这可能是由于我的磁盘相对较慢,因为它是 SATA 磁盘,而不是 SSD。但是,当我使用 iostat 检查磁盘的 util 时,它只有大约 70%:

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
xvdap1            2.00     0.00  313.00    0.00  2484.00     0.00    15.87     0.84    2.67    2.67    0.00   2.43  76.05

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
xvdap1            1.50   144.50  261.50  306.50  2136.00  1804.00    13.87     1.13    2.00    3.03    1.11   1.27  72.30

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
xvdap1            0.50    97.00  137.00  332.50  1120.00  1718.00    12.09     1.98    4.23    6.69    3.21   1.70  79.90

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
xvdap1            2.50     0.00  163.50    0.00  1334.00     0.00    16.32     0.63    3.86    3.86    0.00   3.58  58.50

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
xvdap1            1.00   102.00  131.50  167.00  1048.00  1076.00    14.23     0.71    2.39    4.32    0.87   1.80  53.65

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
xvdap1            0.00     0.00   83.00    0.50   642.00     4.00    15.47     0.20    2.46    2.47    0.00   2.33  19.45

而且我的CPU使用率也不是很高:

%Cpu0  : 34.8 us,  5.2 sy,  0.0 ni, 58.2 id,  0.0 wa,  0.0 hi,  1.0 si,  0.7 st
%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.3 st
%Cpu3  :  6.5 us,  1.7 sy,  0.0 ni,  5.4 id, 85.7 wa,  0.0 hi,  0.0 si,  0.7 st

我应该如何处理这个问题?

PS:我们的console.log如下:

07/06/2017 19:41:57 :: Sorted 16 cache queues in 0.000308 seconds
07/06/2017 19:41:57 :: Sorted 2 cache queues in 0.000200 seconds
07/06/2017 19:41:58 :: Sorted 564 cache queues in 0.000762 seconds
07/06/2017 19:41:58 :: Sorted 116 cache queues in 0.000388 seconds
07/06/2017 19:41:59 :: Sorted 820 cache queues in 0.001008 seconds
07/06/2017 19:42:00 :: Sorted 52 cache queues in 0.000354 seconds
07/06/2017 19:42:00 :: Sorted 1 cache queues in 0.000175 seconds
07/06/2017 19:42:01 :: Sorted 491 cache queues in 0.000530 seconds
07/06/2017 19:42:01 :: Sorted 101 cache queues in 0.000431 seconds
07/06/2017 19:42:01 :: Sorted 21 cache queues in 0.000283 seconds
07/06/2017 19:42:02 :: Sorted 1342 cache queues in 0.001589 seconds
07/06/2017 19:42:02 :: Sorted 224 cache queues in 0.000525 seconds
07/06/2017 19:42:02 :: Sorted 67 cache queues in 0.000299 seconds
07/06/2017 19:42:03 :: Sorted 1812 cache queues in 0.002230 seconds
07/06/2017 19:42:03 :: Sorted 360 cache queues in 0.000583 seconds
07/06/2017 19:42:03 :: Sorted 109 cache queues in 0.000430 seconds
07/06/2017 19:42:03 :: Sorted 27 cache queues in 0.000269 seconds
07/06/2017 19:42:04 :: Sorted 1570 cache queues in 0.001632 seconds
07/06/2017 19:42:05 :: Sorted 348 cache queues in 0.000656 seconds

【问题讨论】:

  • 请提供 carbon 的 console.log 样本。您正在运行多少个碳缓存?有多少更新,创建它处理?您执行了多少次指标读取(来自石墨网络)?什么是留存率?
  • 感谢您的回复。现在,我的集群配置是这样的:负载均衡器在顶部运行,它将更新分发到在两台机器上运行的两个 carbon-relay 实例,另外 4 台机器上运行 8 个 carbon-cache 实例,每台机器运行两个碳缓存实例。
  • 目前我有两个问题。首先是每台carbon-cache机器的disk util是100%,write iops在1000左右,write through put在5MB/s左右,也就是说每次write只有4KB左右,怎么这么小。第二个是我配置了 4 个石墨 web 实例分别在这 4 个碳缓存机器上运行,另一个石墨 web 实例在单台机器上运行作为 master,但我无法让 master 石墨 web 实例查询即使我配置了 CLUSTER_SERVERS 那 4 个从站,为什么?
  • 我已经用我们的 console.log 示例更新了问题
  • 我已经用我们的 console.log 示例更新了这个问题。我们每 15 秒收集一次所有指标。顺便问一下,carbon-cache的机器的网络入站流量只有500KB/s左右,为什么写入磁盘时转换成5MB/s?

标签: graphite grafana


【解决方案1】:

Carbon 对每秒写入的次数有一个速率限制。如果您的磁盘尚未饱和,则可以增加此值。请注意,如果您将其设置得太高,如果您在共享存储 (SAN/NAS) 上,您可能会饿死该系统或其他主机上的其他应用程序。

您可以在 carbon.conf 文件中找到此速率限制。设置为:

MAX_UPDATES_PER_SECOND =

为了防止系统杀死碳,您可以考虑配置最大缓存大小。这将防止碳被杀死,但如果达到限制,则会降低指标。限制是缓存中的点数,请参阅指标 carbon.agents.$instance.cache.size 以确定合适的值。同样在 carbon.conf 中:

MAX_CACHE_SIZE =

另外请记住,由于 Python 的全局解释器锁 (GIL),carbon 只能同时在一个内核上运行。您当前的 CPU 使用率似乎还不错,但如果您的负载增加更多,您可以考虑运行 4 个碳缓存(因为您有 4 个核心),前面有一个碳中继,以充分利用您的系统资源。

【讨论】:

  • 感谢您的回复。我已经将 MAX_UPDATES_PER_SECOND 更改为 inf,并将 MAX_CACHE_SIZE 更改为 1GB,但是,它仍然继续占用我所有的 16GB 内存并被 oom-killer 杀死。这些配置似乎不起作用。为什么?
  • 同时,磁盘和cpu使用率也没有太大变化
  • MAX_CACHE_SIZE 是数据点的缓存大小,而不是 GB。检查 metrics->carbon->cache->size 中的指标以确定正确的大小。我不明白为什么这些设置的磁盘利用率不是 100%。我能给你的唯一建议是尝试运行多个缓存,这样会有更多的并行磁盘写入。
  • 感谢您的回复。现在,我的集群配置是这样的:负载均衡器在顶部运行,它将更新分发到在两台机器上运行的两个 carbon-relay 实例,另外 4 台机器上运行 8 个 carbon-cache 实例,每台机器运行两个碳缓存实例。
  • 目前我有两个问题。首先是每台carbon-cache机器的disk util是100%,write iops在1000左右,write through put在5MB/s左右,也就是说每次write只有4KB左右,怎么这么小。第二个是我配置了 4 个石墨 web 实例分别在这 4 个碳缓存机器上运行,另一个石墨 web 实例在单台机器上运行作为 master,但我无法让 master 石墨 web 实例查询即使我配置了 CLUSTER_SERVERS 那 4 个从站,为什么?
猜你喜欢
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多