[svn] r5920 - trunk/tools/dstat/plugins
packagers at lists.rpmforge.net
packagers at lists.rpmforge.net
Mon Oct 15 02:06:46 CEST 2007
Author: dag
Date: 2007-10-15 02:06:45 +0200 (Mon, 15 Oct 2007)
New Revision: 5920
Modified:
trunk/tools/dstat/plugins/dstat_topbio.py
trunk/tools/dstat/plugins/dstat_topcpu.py
trunk/tools/dstat/plugins/dstat_topio.py
trunk/tools/dstat/plugins/dstat_topmem.py
trunk/tools/dstat/plugins/dstat_topoom.py
Log:
Updates
Modified: trunk/tools/dstat/plugins/dstat_topbio.py
===================================================================
--- trunk/tools/dstat/plugins/dstat_topbio.py 2007-10-14 21:10:54 UTC (rev 5919)
+++ trunk/tools/dstat/plugins/dstat_topbio.py 2007-10-15 00:06:45 UTC (rev 5920)
@@ -16,9 +16,7 @@
self.cn1 = {}; self.cn2 = {}; self.val = {}
def check(self):
- try:
- open('/proc/self/io')
- except:
+ if not os.access('/proc/self/io', os.R_OK):
raise Exception, 'Kernel has no I/O accounting, use at least 2.6.20.'
return True
Modified: trunk/tools/dstat/plugins/dstat_topcpu.py
===================================================================
--- trunk/tools/dstat/plugins/dstat_topcpu.py 2007-10-14 21:10:54 UTC (rev 5919)
+++ trunk/tools/dstat/plugins/dstat_topcpu.py 2007-10-15 00:06:45 UTC (rev 5920)
@@ -16,7 +16,7 @@
self.cn1 = {}; self.cn2 = {}; self.val = {}
def extract(self):
- self.val['usage'] = 0.0
+ self.val['max'] = 0.0
for pid in os.listdir('/proc/'):
try:
### Is it a pid ?
@@ -26,16 +26,9 @@
if pid == self.pid: continue
### Using dopen() will cause too many open files
-# l = string.split(dopen('/proc/%s/stat' % pid).read())
l = string.split(open('/proc/%s/stat' % pid).read())
-
if len(l) < 15: continue
- ### Get commandline
- m = string.split(open('/proc/%s/cmdline' % pid).read(), '\0')
- if len(m) > 1:
- cmd = os.path.basename(m[1])
-
### Reset previous value if it doesn't exist
if not self.cn1.has_key(pid):
self.cn1[pid] = 0
@@ -43,28 +36,35 @@
self.cn2[pid] = int(l[13]) + int(l[14])
usage = (self.cn2[pid] - self.cn1[pid]) * 1.0 / tick
+ ### Is it a new topper ?
+ if usage < self.val['max']: continue
+
+ ### Get commandline
+ m = string.split(open('/proc/%s/cmdline' % pid).read(), '\0')
+ if len(m) > 1:
+ cmd = os.path.basename(m[1])
+
except ValueError:
continue
except IOError:
continue
### Get the process that spends the most jiffies
- if usage >= self.val['usage']:
- self.val['usage'] = usage
- self.val['name'] = l[1][1:-1]
- self.val['pid'] = pid
- self.val['cmd'] = cmd
-# st = os.stat("/proc/%s" % pid)
-# if st:
-# pw = pwd.getpwuid(st.st_uid)
-# if pw:
-# self.val['user'] = pw[0]
-# else:
-# self.val['user'] = stat.st_uid
+ self.val['max'] = usage
+ self.val['name'] = l[1][1:-1]
+ self.val['pid'] = pid
+ self.val['cmd'] = cmd
+# st = os.stat("/proc/%s" % pid)
+# if st:
+# pw = pwd.getpwuid(st.st_uid)
+# if pw:
+# self.val['user'] = pw[0]
# else:
-# self.val['user'] = 'none'
+# self.val['user'] = stat.st_uid
+# else:
+# self.val['user'] = 'none'
- if self.val['usage'] == 0.0:
+ if self.val['max'] == 0.0:
self.val['process'] = ''
else:
### If the name is a known interpreter, take the second argument from the cmdline
@@ -87,12 +87,12 @@
self.cn1.update(self.cn2)
def show(self):
- if self.val['usage'] == 0.0:
+ if self.val['max'] == 0.0:
return '%-*s' % (self.format[1], '')
else:
- return '%s%-*s%s' % (ansi['default'], self.format[1]-3, self.val['process'][0:self.format[1]-3], cprint(self.val['usage'], ('p', 3, 34)))
+ return '%s%-*s%s' % (ansi['default'], self.format[1]-3, self.val['process'][0:self.format[1]-3], cprint(self.val['max'], ('p', 3, 34)))
def showcsv(self):
- return '%s / %d%%' % (self.val['name'], self.val['usage'])
+ return '%s / %d%%' % (self.val['name'], self.val['max'])
# vim:ts=4:sw=4:et
Modified: trunk/tools/dstat/plugins/dstat_topio.py
===================================================================
--- trunk/tools/dstat/plugins/dstat_topio.py 2007-10-14 21:10:54 UTC (rev 5919)
+++ trunk/tools/dstat/plugins/dstat_topio.py 2007-10-15 00:06:45 UTC (rev 5920)
@@ -16,9 +16,7 @@
self.cn1 = {}; self.cn2 = {}; self.val = {}
def check(self):
- try:
- open('/proc/self/io')
- except:
+ if not os.access('/proc/self/io', os.R_OK):
raise Exception, 'Kernel has no I/O accounting, use at least 2.6.20.'
return True
Modified: trunk/tools/dstat/plugins/dstat_topmem.py
===================================================================
--- trunk/tools/dstat/plugins/dstat_topmem.py 2007-10-14 21:10:54 UTC (rev 5919)
+++ trunk/tools/dstat/plugins/dstat_topmem.py 2007-10-15 00:06:45 UTC (rev 5920)
@@ -16,7 +16,7 @@
self.cn1 = {}; self.cn2 = {}; self.val = {}
def extract(self):
- self.val['usage'] = 0.0
+ self.val['max'] = 0.0
for pid in os.listdir('/proc/'):
try:
### Is it a pid ?
@@ -26,33 +26,37 @@
if pid == self.pid: continue
### Using dopen() will cause too many open files
-# l = string.split(dopen('/proc/%s/stat' % pid).read())
l = string.split(open('/proc/%s/stat' % pid).read())
-
if len(l) < 23: continue
usage = int(l[23]) * pagesize
+ ### Is it a new topper ?
+ if usage < self.val['max']: continue
+
+ ### Extract name
+ name = l[1][1:-1]
+
+ ### Get commandline
+ m = string.split(open('/proc/%s/cmdline' % pid).read(),'\0')
+ if len(m) > 1:
+ cmd = os.path.basename(m[1])
+
except ValueError:
continue
except IOError:
continue
### Get the process that uses the most memory
- if usage >= self.val['usage']:
- self.val['usage'] = usage
- self.val['name'] = l[1][1:-1]
- self.val['pid'] = pid
+ self.val['max'] = usage
+ self.val['name'] = name
+ self.val['pid'] = pid
- if self.val['usage'] == 0.0:
+ if self.val['max'] == 0.0:
self.val['process'] = ''
else:
### If the name is a known interpreter, take the second argument from the cmdline
if self.val['name'] in ('bash', 'csh', 'ksh', 'perl', 'python', 'sh'):
- ### Using dopen() will cause too many open files
-# l = string.split(dopen('/proc/%s/cmdline' % self.val['pid']).read(), '\0')
- l = string.split(open('/proc/%s/cmdline' % self.val['pid']).read(), '\0')
- if len(l) > 2:
- self.val['process'] = os.path.basename(l[1])
+ self.val['process'] = os.path.basename(cmd)
else:
self.val['process'] = self.val['name']
@@ -67,9 +71,9 @@
# self.val['process'] = '%*s %-*s' % (5, self.val['pid'], self.format[1]-6, self.val['name'])
def show(self):
- return '%s%-*s%s' % (ansi['default'], self.format[1]-5, self.val['process'][0:self.format[1]-5], cprint(self.val['usage'], ('f', 5, 1024)))
+ return '%s%-*s%s' % (ansi['default'], self.format[1]-5, self.val['process'][0:self.format[1]-5], cprint(self.val['max'], ('f', 5, 1024)))
def showcsv(self):
- return '%s / %d%%' % (self.val['name'], self.val['usage'])
+ return '%s / %d%%' % (self.val['name'], self.val['max'])
# vim:ts=4:sw=4:et
Modified: trunk/tools/dstat/plugins/dstat_topoom.py
===================================================================
--- trunk/tools/dstat/plugins/dstat_topoom.py 2007-10-14 21:10:54 UTC (rev 5919)
+++ trunk/tools/dstat/plugins/dstat_topoom.py 2007-10-15 00:06:45 UTC (rev 5920)
@@ -9,14 +9,14 @@
class dstat_topoom(dstat):
def __init__(self):
self.name = 'out of memory'
- self.format = ('s', 20, 34)
+ self.format = ('s', 18, 1000)
self.nick = ('kill score',)
self.vars = self.nick
self.pid = str(os.getpid())
self.cn1 = {}; self.cn2 = {}; self.val = {}
def check(self):
- if not os.access('/proc/1/oom_score', os.R_OK):
+ if not os.access('/proc/self/oom_score', os.R_OK):
raise Exception, 'Kernel does not support /proc/pid/oom_score, use at least 2.6.20.'
return True
@@ -31,11 +31,11 @@
if pid == self.pid: continue
### Using dopen() will cause too many open files
-# l = string.split(dopen('/proc/%s/stat' % pid).read())
l = string.split(open('/proc/%s/oom_score' % pid).read())
if len(l) < 1: continue
oom_score = int(l[0])
+ ### Is it a new topper ?
if oom_score < self.val['max']: continue
### Extract name
@@ -53,22 +53,11 @@
continue
### Get the process that spends the most jiffies
- if oom_score >= self.val['max']:
+ self.val['max'] = oom_score
+ self.val['name'] = name
+ self.val['pid'] = pid
+ self.val['cmd'] = cmd
- self.val['max'] = oom_score
- self.val['name'] = name
- self.val['pid'] = pid
- self.val['cmd'] = cmd
-# st = os.stat("/proc/%s" % pid)
-# if st:
-# pw = pwd.getpwuid(st.st_uid)
-# if pw:
-# self.val['user'] = pw[0]
-# else:
-# self.val['user'] = stat.st_uid
-# else:
-# self.val['user'] = 'none'
-
if self.val['max'] == 0.0:
self.val['process'] = ''
else:
@@ -78,15 +67,8 @@
else:
self.val['process'] = self.val['name']
-# l = l.reverse()
-# for x in l:
-# print x
-# if x[0] != '-':
-# self.val['name'] = os.path.basename(x)
-# break
-
### Debug (show PID)
-# self.val['process'] = '%*s %-*s' % (5, self.val['pid'], self.format[1]-6, self.val['name'])
+# self.val['process'] = '%*s %-*s' % (5, self.val['pid'], self.format[1]-6, self.val['name'])
def show(self):
if self.val['max'] == 0.0:
More information about the svn-commits
mailing list