From 4c6d97a1e4e3f758d8725a980af0679f57f95ac8 Mon Sep 17 00:00:00 2001 From: David Chen Date: Thu, 22 Mar 2018 16:31:40 -0700 Subject: [PATCH] Fix statsd dropping metrics data. We can increase the buffer of metrics we store in statsd memory, but we still request the clients to call getData when the metrics memory exceeds 128 KB (previously was 90% of 128 KB). Bug: 76171061 Test: Test that unit-tests still pass. Change-Id: I901545b364ed313af8c033ce9b40d3cfadb93213 --- cmds/statsd/src/StatsLogProcessor.cpp | 2 +- cmds/statsd/src/guardrail/StatsdStats.h | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp index 82274a6e4c597..a35570bd7bba7 100644 --- a/cmds/statsd/src/StatsLogProcessor.cpp +++ b/cmds/statsd/src/StatsLogProcessor.cpp @@ -360,7 +360,7 @@ void StatsLogProcessor::flushIfNecessaryLocked( metricsManager.dropData(timestampNs); StatsdStats::getInstance().noteDataDropped(key); VLOG("StatsD had to toss out metrics for %s", key.ToString().c_str()); - } else if (totalBytes > .9 * StatsdStats::kMaxMetricsBytesPerConfig) { + } else if (totalBytes > StatsdStats::kBytesPerConfigTriggerGetData) { // Send broadcast so that receivers can pull data. auto lastBroadcastTime = mLastBroadcastTimes.find(key); if (lastBroadcastTime != mLastBroadcastTimes.end()) { diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h index c42514a049258..a4f64ddfd3a5e 100644 --- a/cmds/statsd/src/guardrail/StatsdStats.h +++ b/cmds/statsd/src/guardrail/StatsdStats.h @@ -96,9 +96,13 @@ public: const static int kMaxLogSourceCount = 50; - // Max memory allowed for storing metrics per configuration. When this limit is approached, - // statsd will send a broadcast so that the client can fetch the data and clear this memory. - static const size_t kMaxMetricsBytesPerConfig = 128 * 1024; + // Max memory allowed for storing metrics per configuration. If this limit is exceeded, statsd + // drops the metrics data in memory. + static const size_t kMaxMetricsBytesPerConfig = 256 * 1024; + + // Soft memory limit per configuration. Once this limit is exceeded, we begin notifying the + // data subscriber that it's time to call getData. + static const size_t kBytesPerConfigTriggerGetData = 128 * 1024; // Cap the UID map's memory usage to this. This should be fairly high since the UID information // is critical for understanding the metrics.