Skip to content

Commit 70d1eb0

Browse files
committed
Allow dynamic update of agent parameters
Made the agent profilers re-entrant allowing to attach and update profiling parameters at runtime This is useful when the VM is not started with the agent but can be later attached and controlled, e.g: - update profiling interval - enabling/disabling profilers For time being only profilers parameters can be updated. Transformers, reporter not
1 parent 5c2d558 commit 70d1eb0

18 files changed

+198
-204
lines changed

src/main/java/com/uber/profiling/AgentImpl.java

Lines changed: 137 additions & 140 deletions
Large diffs are not rendered by default.

src/main/java/com/uber/profiling/Arguments.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import com.uber.profiling.util.DummyConfigProvider;
2424
import com.uber.profiling.util.JsonUtils;
2525
import com.uber.profiling.util.ReflectionUtils;
26-
2726
import java.lang.reflect.Constructor;
2827
import java.util.ArrayList;
2928
import java.util.HashMap;
@@ -59,6 +58,7 @@ public class Arguments {
5958
private boolean noop = false;
6059

6160
private Constructor<Reporter> reporterConstructor;
61+
private Reporter reporter;
6262
private Constructor<ConfigProvider> configProviderConstructor;
6363
private String configFile;
6464

@@ -260,11 +260,14 @@ public Map<String, List<String>> getRawArgValues() {
260260
}
261261

262262
public Reporter getReporter() {
263+
if (reporter != null) {
264+
return reporter;
265+
}
263266
if (reporterConstructor == null) {
264267
return new ConsoleOutputReporter();
265268
} else {
266269
try {
267-
Reporter reporter = reporterConstructor.newInstance();
270+
reporter = reporterConstructor.newInstance();
268271
reporter.updateArguments(getRawArgValues());
269272
return reporter;
270273
} catch (Throwable e) {

src/main/java/com/uber/profiling/Profiler.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,20 @@
1616

1717
package com.uber.profiling;
1818

19-
public interface Profiler {
20-
long getIntervalMillis();
19+
public abstract class Profiler {
20+
private ProfilerRunner runner;
2121

22-
void setReporter(Reporter reporter);
22+
public abstract long getIntervalMillis();
23+
public abstract void setIntervalMillis(long millis);
2324

24-
void profile();
25+
public abstract void setReporter(Reporter reporter);
26+
27+
public abstract void profile();
28+
29+
void setRunner(ProfilerRunner runner){
30+
this.runner = runner;
31+
}
32+
ProfilerRunner getRunner(){
33+
return this.runner;
34+
}
2535
}

src/main/java/com/uber/profiling/ProfilerGroup.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

src/main/java/com/uber/profiling/ProfilerRunner.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import com.uber.profiling.util.AgentLogger;
2020

21+
import java.util.concurrent.ScheduledFuture;
2122
import java.util.concurrent.atomic.AtomicLong;
2223

2324
public class ProfilerRunner implements Runnable {
@@ -27,6 +28,7 @@ public class ProfilerRunner implements Runnable {
2728

2829
private final Profiler profiler;
2930
private final AtomicLong errorCounter = new AtomicLong(0);
31+
private ScheduledFuture<?> handler;
3032

3133
public ProfilerRunner(Profiler profiler) {
3234
this.profiler = profiler;
@@ -45,4 +47,12 @@ public void run() {
4547
}
4648
}
4749
}
50+
51+
public void setHandler(ScheduledFuture<?> handler) {
52+
this.handler = handler;
53+
}
54+
55+
public ScheduledFuture<?> getHandler() {
56+
return handler;
57+
}
4858
}

src/main/java/com/uber/profiling/ShutdownHookRunner.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ public void run() {
4242

4343
for (Profiler profiler : profilers) {
4444
try {
45+
if (profiler.getIntervalMillis() <=0 ){
46+
//one time profiler, skip
47+
continue;
48+
}
4549
logShutdownMessage("Running periodic profiler (last run): " + profiler);
4650
profiler.profile();
4751
logShutdownMessage("Ran periodic profiler (last run): " + profiler);

src/main/java/com/uber/profiling/profilers/CpuAndMemoryProfiler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package com.uber.profiling.profilers;
1818

19-
import com.uber.profiling.Profiler;
2019
import com.uber.profiling.Reporter;
2120
import com.uber.profiling.util.AgentLogger;
2221
import com.uber.profiling.util.ProcFileUtils;
@@ -36,7 +35,7 @@
3635
import java.util.List;
3736
import java.util.Map;
3837

39-
public class CpuAndMemoryProfiler extends ProcessInfoBase implements Profiler {
38+
public class CpuAndMemoryProfiler extends ProcessInfoBase {
4039
public final static String PROFILER_NAME = "CpuAndMemory";
4140

4241
private static final AgentLogger logger = AgentLogger.getLogger(CpuAndMemoryProfiler.class.getName());
@@ -70,6 +69,7 @@ public long getIntervalMillis() {
7069
return intervalMillis;
7170
}
7271

72+
@Override
7373
public void setIntervalMillis(long intervalMillis) {
7474
this.intervalMillis = intervalMillis;
7575
}

src/main/java/com/uber/profiling/profilers/IOProfiler.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,14 @@
1616

1717
package com.uber.profiling.profilers;
1818

19-
import com.uber.profiling.Profiler;
2019
import com.uber.profiling.Reporter;
2120
import com.uber.profiling.util.ProcFileUtils;
2221

2322
import java.util.HashMap;
2423
import java.util.List;
2524
import java.util.Map;
2625

27-
public class IOProfiler extends ProcessInfoBase implements Profiler {
26+
public class IOProfiler extends ProcessInfoBase {
2827
public final static String PROFILER_NAME = "IO";
2928

3029
private long intervalMillis = Constants.DEFAULT_METRIC_INTERVAL;

src/main/java/com/uber/profiling/profilers/MethodArgumentCollector.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.uber.profiling.util.ClassMethodArgumentMetricBuffer;
2020

2121
public class MethodArgumentCollector {
22+
public static final String PROFILER_NAME = "MethodArgumentCollector";
2223
private ClassMethodArgumentMetricBuffer buffer;
2324

2425
public MethodArgumentCollector(ClassMethodArgumentMetricBuffer buffer) {

src/main/java/com/uber/profiling/profilers/MethodArgumentProfiler.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package com.uber.profiling.profilers;
1818

19-
import com.uber.profiling.Profiler;
2019
import com.uber.profiling.Reporter;
2120
import com.uber.profiling.reporters.ConsoleOutputReporter;
2221
import com.uber.profiling.util.ClassAndMethodMetricKey;
@@ -26,7 +25,7 @@
2625
import java.util.Map;
2726
import java.util.concurrent.atomic.AtomicLong;
2827

29-
public class MethodArgumentProfiler extends ProcessInfoBase implements Profiler {
28+
public class MethodArgumentProfiler extends ProcessInfoBase {
3029
public static final String PROFILER_NAME = "MethodArgument";
3130

3231
private ClassMethodArgumentMetricBuffer buffer;

0 commit comments

Comments
 (0)