Skip to content

Commit c616eb9

Browse files
authored
Poll gauge values less frequently (Netflix#447)
Servo gauges were sampled by default once a minute, and the default spectator polling frequency is 5s. That could cause a noticeable increase in CPU usage attributed to monitoring. This change makes spectator sample the values every 59s.
1 parent a4bb89c commit c616eb9

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ subprojects {
7676
dependencies {
7777
compile 'org.slf4j:slf4j-api'
7878
compile 'com.google.guava:guava'
79-
compile 'com.netflix.spectator:spectator-api:0.66.0'
79+
compile 'com.netflix.spectator:spectator-api:0.67.0'
8080
testCompile 'org.testng:testng:6.1.1'
8181
testRuntime 'org.slf4j:slf4j-log4j12'
8282
testRuntime 'log4j:log4j:1.2.17'

servo-core/src/main/java/com/netflix/servo/SpectatorContext.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.netflix.servo.monitor.CompositeMonitor;
1919
import com.netflix.servo.monitor.Monitor;
2020
import com.netflix.servo.monitor.MonitorConfig;
21+
import com.netflix.servo.monitor.Pollers;
2122
import com.netflix.servo.monitor.SpectatorMonitor;
2223
import com.netflix.spectator.api.Counter;
2324
import com.netflix.spectator.api.DistributionSummary;
@@ -32,6 +33,7 @@
3233
import org.slf4j.Logger;
3334
import org.slf4j.LoggerFactory;
3435

36+
import java.time.Duration;
3537
import java.util.ArrayList;
3638
import java.util.List;
3739
import java.util.concurrent.Executors;
@@ -113,9 +115,11 @@ public static ScheduledExecutorService gaugePool() {
113115

114116
/** Create builder for a polled gauge based on the config. */
115117
public static PolledMeter.Builder polledGauge(MonitorConfig config) {
118+
long delayMillis = Math.max(Pollers.getPollingIntervals().get(0) - 1000, 5000);
116119
return PolledMeter.using(registry)
117120
.withId(createId(config))
118-
.scheduleOn(GAUGE_POOL);
121+
.withDelay(Duration.ofMillis(delayMillis))
122+
.scheduleOn(gaugePool());
119123
}
120124

121125
/** Register a custom monitor. */

0 commit comments

Comments
 (0)