Skip to content

Commit f7000d1

Browse files
authored
Fix case when GC is disabled; Add more safeties (#135)
1 parent e32b602 commit f7000d1

File tree

1 file changed

+48
-44
lines changed

1 file changed

+48
-44
lines changed

instana/meter.py

Lines changed: 48 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -269,47 +269,51 @@ def collect_modules(self):
269269

270270
def collect_metrics(self):
271271
""" Collect up and return various metrics """
272-
u = resource.getrusage(resource.RUSAGE_SELF)
273-
if gc_.isenabled():
274-
c = list(gc_.get_count())
275-
th = list(gc_.get_threshold())
276-
g = GC(collect0=c[0] if not self.last_collect else c[0] - self.last_collect[0],
277-
collect1=c[1] if not self.last_collect else c[
278-
1] - self.last_collect[1],
279-
collect2=c[2] if not self.last_collect else c[
280-
2] - self.last_collect[2],
281-
threshold0=th[0],
282-
threshold1=th[1],
283-
threshold2=th[2])
284-
285-
thr = threading.enumerate()
286-
daemon_threads = [tr.daemon is True for tr in thr].count(True)
287-
alive_threads = [tr.daemon is False for tr in thr].count(True)
288-
dummy_threads = [type(tr) is threading._DummyThread for tr in thr].count(True)
289-
290-
m = Metrics(ru_utime=u[0] if not self.last_usage else u[0] - self.last_usage[0],
291-
ru_stime=u[1] if not self.last_usage else u[1] - self.last_usage[1],
292-
ru_maxrss=u[2],
293-
ru_ixrss=u[3],
294-
ru_idrss=u[4],
295-
ru_isrss=u[5],
296-
ru_minflt=u[6] if not self.last_usage else u[6] - self.last_usage[6],
297-
ru_majflt=u[7] if not self.last_usage else u[7] - self.last_usage[7],
298-
ru_nswap=u[8] if not self.last_usage else u[8] - self.last_usage[8],
299-
ru_inblock=u[9] if not self.last_usage else u[9] - self.last_usage[9],
300-
ru_oublock=u[10] if not self.last_usage else u[10] - self.last_usage[10],
301-
ru_msgsnd=u[11] if not self.last_usage else u[11] - self.last_usage[11],
302-
ru_msgrcv=u[12] if not self.last_usage else u[12] - self.last_usage[12],
303-
ru_nsignals=u[13] if not self.last_usage else u[13] - self.last_usage[13],
304-
ru_nvcs=u[14] if not self.last_usage else u[14] - self.last_usage[14],
305-
ru_nivcsw=u[15] if not self.last_usage else u[15] - self.last_usage[15],
306-
alive_threads=alive_threads,
307-
dummy_threads=dummy_threads,
308-
daemon_threads=daemon_threads,
309-
gc=g)
310-
311-
self.last_usage = u
312-
if gc_.isenabled():
313-
self.last_collect = c
314-
315-
return m
272+
try:
273+
g = None
274+
u = resource.getrusage(resource.RUSAGE_SELF)
275+
if gc_.isenabled():
276+
c = list(gc_.get_count())
277+
th = list(gc_.get_threshold())
278+
g = GC(collect0=c[0] if not self.last_collect else c[0] - self.last_collect[0],
279+
collect1=c[1] if not self.last_collect else c[
280+
1] - self.last_collect[1],
281+
collect2=c[2] if not self.last_collect else c[
282+
2] - self.last_collect[2],
283+
threshold0=th[0],
284+
threshold1=th[1],
285+
threshold2=th[2])
286+
287+
thr = threading.enumerate()
288+
daemon_threads = [tr.daemon is True for tr in thr].count(True)
289+
alive_threads = [tr.daemon is False for tr in thr].count(True)
290+
dummy_threads = [type(tr) is threading._DummyThread for tr in thr].count(True)
291+
292+
m = Metrics(ru_utime=u[0] if not self.last_usage else u[0] - self.last_usage[0],
293+
ru_stime=u[1] if not self.last_usage else u[1] - self.last_usage[1],
294+
ru_maxrss=u[2],
295+
ru_ixrss=u[3],
296+
ru_idrss=u[4],
297+
ru_isrss=u[5],
298+
ru_minflt=u[6] if not self.last_usage else u[6] - self.last_usage[6],
299+
ru_majflt=u[7] if not self.last_usage else u[7] - self.last_usage[7],
300+
ru_nswap=u[8] if not self.last_usage else u[8] - self.last_usage[8],
301+
ru_inblock=u[9] if not self.last_usage else u[9] - self.last_usage[9],
302+
ru_oublock=u[10] if not self.last_usage else u[10] - self.last_usage[10],
303+
ru_msgsnd=u[11] if not self.last_usage else u[11] - self.last_usage[11],
304+
ru_msgrcv=u[12] if not self.last_usage else u[12] - self.last_usage[12],
305+
ru_nsignals=u[13] if not self.last_usage else u[13] - self.last_usage[13],
306+
ru_nvcs=u[14] if not self.last_usage else u[14] - self.last_usage[14],
307+
ru_nivcsw=u[15] if not self.last_usage else u[15] - self.last_usage[15],
308+
alive_threads=alive_threads,
309+
dummy_threads=dummy_threads,
310+
daemon_threads=daemon_threads,
311+
gc=g)
312+
313+
self.last_usage = u
314+
if gc_.isenabled():
315+
self.last_collect = c
316+
317+
return m
318+
except:
319+
logger.debug("collect_metrics", exc_info=True)

0 commit comments

Comments
 (0)