Page MenuHomePhabricator
Paste P2910

mem_wasted.py
ActivePublic

Authored by ori on Apr 15 2016, 7:42 PM.
Tags
None
Referenced Files
F3879981: mem_wasted.py
Apr 15 2016, 7:42 PM
Subscribers
None
import collections
import contextlib
import re
import telnetlib
servers = [('mc10%02d.eqiad.wmnet' % n) for n in range(1, 19)]
GB = float(1024 ** 3)
def get_slab_stats(host, port=11211):
with contextlib.closing(telnetlib.Telnet(host, port)) as client:
client.write('stats slabs\n')
data = client.read_until('END')
slabs = {}
for line in data.split('\n'):
try:
slab, key, value = re.search(
'STAT (\d+):(\w+) (\d+)', line).groups()
except AttributeError:
break
else:
slabs.setdefault(int(slab), {})[key] = int(value)
return slabs
total_wasted = 0
for server in servers:
wasted = 0
for s in get_slab_stats(server).values():
wasted += ((s['total_chunks'] * s['chunk_size']) - s['mem_requested'])
total_wasted += wasted
print('| {:<20s} | {:>6.2f} gB |'.format(server, wasted / GB))
print('| {:<20s} | {:>6.2f} gB |'.format('Total', total_wasted / GB))
print('| {:<20s} | {:>6.2f} gB |'.format('Avg', total_wasted / (GB * len(servers))))