print "Slice %s is being killed." % self.name
vserver = VServer(self.name)
vserver.stop()
+ # ignore initscripts. Don't run anything at start.
+ vserver.INITSCRIPTS = []
+ vserver.start()
os._exit(0)
else:
os.waitpid(pid,0)
print "Resetting slice " + self.name
vserver = VServer(self.name)
vserver.stop()
- vserver.start(wait = False)
+ vserver.start()
os._exit(0)
else:
os.waitpid(pid,0)
"""
Get status of specified slices (if names is None or empty, all
slices). vsize, sz, and rss are in KiB. Returns
-
+ PID CONTEXT VSZ SZ RSS %MEM CMD
{xid: {'xid': slice_id,
'name': slice_name,
- 'procs': [{'pid': pid, 'xid': slice_id, 'user', username, 'cmd': command,
+ 'procs': [{'pid': pid, 'xid': slice_id, 'cmd': command,
'vsize': virtual_kib, 'sz': potential_kib, 'rss': physical_kib,
'pcpu': cpu_percent, 'pmem': mem_percent}]
'vsize': total_virtual_kib,
# Mandatory fields. xid is a virtual field inserted by vps. Make
# sure cmd is last so that it does not get truncated
# automatically.
- fields = ['pid', 'xid', 'user', 'vsize', 'sz', 'rss', 'pcpu', 'pmem', 'cmd']
+ fields = ['pid', 'xid', 'vsize', 'sz', 'rss', 'pmem', 'cmd']
# vps inserts xid after pid in the output, but ps doesn't know
# what the field means.
# Eat the header line. vps depends on the header to figure out
# which column is the PID column, so we can't just tell ps not to
# print it.
- for line in bwlimit.run("/usr/sbin/vps -e -o " + ",".join(ps_fields))[1:]:
+ for line in bwlimit.run("/usr/sbin/vps -e -o " + ":16,".join(ps_fields))[1:]:
# Chomp newline
line = line.strip()
except ValueError:
pass
- # vps sometimes prints ERR instead of a context ID if it
+ # vps sometimes prints ERR or the name of the slice
+ # instead of a context ID if it
# cannot identify the context of an orphaned (usually dying)
# process. Skip these processes.
- if type(proc['xid']) != int:
+ if (type(proc['xid']) != int) or (type(proc['vsize']) !=int):
continue
# Assign (pl_)sshd processes to slice instead of root
m = re.search(r"sshd: ([a-zA-Z_]+)", proc['cmd'])
+
if m is not None:
xid = bwlimit.get_xid(m.group(1))
if xid is not None:
slice['rss'] += proc['rss']
slices[proc['xid']] = slice
-
+
return slices
def memtotal():
table = "%5s %10s %10s %10s %4s %4s %s\n\n" % \
("PID", "VIRT", "SZ", "RES", '%CPU', '%MEM', 'COMMAND')
for proc in slice['procs']:
- table += "%5s %10s %10s %10s %4.1f %4.1f %s\n" % \
+ table += "%5s %10s %10s %10s %4.1f %s\n" % \
(proc['pid'],
format_bytes(proc['vsize'] * 1024, si = False),
format_bytes(proc['sz'] * 1024, si = False),
format_bytes(proc['rss'] * 1024, si = False),
- proc['pcpu'],
proc['pmem'],
proc['cmd'])
if resetlist[resetslice].killtimeleft == 0 and \
resetlist[resetslice].resettimeleft == 0:
del resetlist[resetslice]
-
- if verbose: print "%d%% swap consumed" % used
if used >= reboot_thresh:
# Dump slice state before rebooting