OSDN Git Service

Fix statsd dropping metrics data.
authorDavid Chen <dwchen@google.com>
Thu, 22 Mar 2018 23:31:40 +0000 (16:31 -0700)
committerDavid Chen <dwchen@google.com>
Thu, 22 Mar 2018 23:46:54 +0000 (16:46 -0700)
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
cmds/statsd/src/guardrail/StatsdStats.h

index 82274a6..a35570b 100644 (file)
@@ -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()) {
index c42514a..a4f64dd 100644 (file)
@@ -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.