Skip to content

Commit 11e899d

Browse files
author
Colman Yau
committed
Restrict CPU usage checker to monitor sampleAndAggregate cpu usge only
As sampleAndAggregate happens every sampling_interval, our cpu usage checker estimate the cpu usage by taking the cpu time spent in sampleAndAggregate divided by sampling_interval. This change will not be merged until we also have a checker monitoring the cpu usage for submitProfile and refreshConfig.
1 parent 37d4be6 commit 11e899d

File tree

4 files changed

+12
-8
lines changed

4 files changed

+12
-8
lines changed

codeguru_profiler_agent/profiler_disabler.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ def __init__(self, timer):
3939
self.timer = timer
4040

4141
def is_cpu_usage_limit_reached(self, profile=None):
42-
profiler_metric = self.timer.metrics.get("runProfiler")
43-
if not profiler_metric or profiler_metric.counter < MINIMUM_MEASURES_IN_DURATION_METRICS:
42+
sample_and_aggregate_metric = self.timer.metrics.get("sampleAndAggregate")
43+
if not sample_and_aggregate_metric or sample_and_aggregate_metric.counter < MINIMUM_MEASURES_IN_DURATION_METRICS:
4444
return False
4545

4646
sampling_interval_seconds = self._get_average_sampling_interval_seconds(profile)
47-
used_time_percentage = 100 * profiler_metric.average() / sampling_interval_seconds
47+
used_time_percentage = 100 * sample_and_aggregate_metric.average() / sampling_interval_seconds
4848

4949
if used_time_percentage >= AgentConfiguration.get().cpu_limit_percentage:
5050
logger.debug(self.timer.metrics)

codeguru_profiler_agent/profiler_runner.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,14 @@ def _run_profiler(self):
8989
if self.collector.flush():
9090
self.is_profiling_in_progress = False
9191
return True
92-
sample = self.sampler.sample()
93-
self.collector.add(sample)
92+
self._sample_and_aggregate()
9493
return True
9594

95+
@with_timer("sampleAndAggregate")
96+
def _sample_and_aggregate(self):
97+
sample = self.sampler.sample()
98+
self.collector.add(sample)
99+
96100
def is_running(self):
97101
return self.scheduler.is_running()
98102

test/acceptance/test_cpu_limit.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ def test_profiler_terminates(self):
3131
# With sampling_interval to be 0.01 seconds, having runProfiler as 0.5 seconds should breach
3232
# the cpu limit. We need to sample 20 times before we check the CPU limit
3333
for i in range(20):
34-
self.timer.record('runProfiler', 0.5)
34+
self.timer.record('sampleAndAggregate', 0.5)
3535

3636
assert wait_for(lambda: not self.profiler.is_running(), timeout_seconds=5)

test/unit/test_profiler_disabler.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ def before(self):
150150
self.timer = Timer()
151151
self.profile = Mock(spec=Profile)
152152
for i in range(20):
153-
self.timer.record('runProfiler', 0.5)
153+
self.timer.record('sampleAndAggregate', 0.5)
154154
set_agent_config(sampling_interval_seconds=1, cpu_limit_percentage=10)
155155
self.process_duration_check = CpuUsageCheck(self.timer)
156156

@@ -222,7 +222,7 @@ def before(self):
222222
def test_it_returns_false(self):
223223
self.timer.reset()
224224
for i in range(4):
225-
self.timer.record('runProfiler', 0.5)
225+
self.timer.record('sampleAndAggregate', 0.5)
226226
assert not self.process_duration_check.is_cpu_usage_limit_reached()
227227

228228

0 commit comments

Comments
 (0)