2013-01-23 17:28:19 +00:00
|
|
|
#!/usr/bin/python
|
|
|
|
|
|
|
|
import logging
|
|
|
|
from string import split
|
|
|
|
from subprocess import Popen, PIPE
|
|
|
|
import time
|
|
|
|
|
|
|
|
# grab the top five memory consuming processes, returning them in a string of
|
|
|
|
# of the format:
|
|
|
|
#
|
|
|
|
# name1:kB1,name2:kB2,...,name5:kB5
|
|
|
|
def topProcesses():
|
|
|
|
output = Popen(["ps", "-eo", "comm,rss", "--sort", "-rss", "--no-headers"], stdout=PIPE).communicate()[0]
|
|
|
|
top5 = output.split("\n")[:5]
|
|
|
|
return ",".join(map(lambda (a,b): a+":"+b, map(split, top5)))
|
|
|
|
|
|
|
|
def logit():
|
|
|
|
buffers = 0
|
|
|
|
cached = 0
|
|
|
|
memTotal = 0
|
|
|
|
memFree = 0
|
|
|
|
swapTotal = 0
|
|
|
|
swapFree = 0
|
|
|
|
|
|
|
|
with open("/proc/meminfo") as f:
|
|
|
|
for line in f.readlines():
|
|
|
|
if line.startswith("Buffers:"):
|
|
|
|
buffers = line.split()[1]
|
|
|
|
elif line.startswith("Cached:"):
|
|
|
|
cached = line.split()[1]
|
|
|
|
elif line.startswith("MemTotal:"):
|
|
|
|
memTotal = line.split()[1]
|
|
|
|
elif line.startswith("MemFree:"):
|
|
|
|
memFree = line.split()[1]
|
|
|
|
elif line.startswith("SwapTotal:"):
|
|
|
|
swapTotal = line.split()[1]
|
|
|
|
elif line.startswith("SwapFree:"):
|
|
|
|
swapFree = line.split()[1]
|
|
|
|
|
|
|
|
d = {"memUsed": int(memTotal)-int(memFree)-int(cached)-int(buffers),
|
|
|
|
"swapUsed": int(swapTotal)-int(swapFree),
|
|
|
|
"procs": topProcesses()}
|
|
|
|
|
2014-04-07 12:38:09 +00:00
|
|
|
mem_logger.debug("%(memUsed)d %(swapUsed)d %(procs)s", d)
|
2013-01-23 17:28:19 +00:00
|
|
|
|
|
|
|
mem_logger = logging.getLogger("memLog")
|
|
|
|
mem_logger.setLevel(logging.DEBUG)
|
|
|
|
|
|
|
|
handler = logging.FileHandler("/tmp/memory.dat")
|
|
|
|
handler.setLevel(logging.DEBUG)
|
|
|
|
handler.setFormatter(logging.Formatter("%(asctime)s %(message)s", "%H:%M:%S"))
|
|
|
|
mem_logger.addHandler(handler)
|
|
|
|
|
|
|
|
while True:
|
|
|
|
logit()
|
|
|
|
time.sleep(1)
|