def _show_memory_usage(self, title, _cgroup): stats = _cgroup.get_stats() usage = stats["usage_in_bytes"] print "%s: %d (%s)" % (title, usage, formatter.byte(usage)) if "memsw.usage_in_bytes" in stats: usage = stats["memsw.usage_in_bytes"] print "%s(memsw): %d (%s)" % (title, usage, formatter(usage))
def _show_memory_usage(self, title, _cgroup): stats = _cgroup.get_stats() usage = stats['usage_in_bytes'] print("%s: %d (%s)" % (title, usage, formatter.byte(usage))) if 'memsw.usage_in_bytes' in stats: usage = stats['memsw.usage_in_bytes'] print("%s(memsw): %d (%s)" % (title, usage, formatter(usage)))
def _print_configs(self, configs, defaults): for name, val in configs.iteritems(): if 'in_bytes' in name: if val == defaults[name]: valstr = '' else: valstr = formatter.byte(val) else: valstr = str(val) if self.options.show_rate and name in self._support_rate: if self._support_rate[name]: rate = self._support_rate[name](val) else: rate = float(val) / defaults[name] ratestr = ' (%s)' % formatter.percent(rate) else: ratestr = '' print("\t%s=%s%s" % (name, valstr, ratestr))
def _print_configs(self, configs, defaults): for name, val in configs.items(): if 'in_bytes' in name: if val == defaults[name]: valstr = '' else: valstr = formatter.byte(val) else: valstr = str(val) if self.args.show_rate and name in self._support_rate: if self._support_rate[name]: rate = self._support_rate[name](val) else: rate = float(val) / defaults[name] ratestr = ' (%s)' % formatter.percent(rate) else: ratestr = '' print("\t%s=%s%s" % (name, valstr, ratestr))
def run(self, args): if len(args) == 0: self.parser.error("Less arguments: " + " ".join(args)) if self.options.debug: print args target_file = args[0] if not os.path.exists(target_file): print "File not found: %s" % target_file sys.exit(1) target_name = os.path.basename(target_file) arguments = [] if target_name in ["memory.usage_in_bytes", "memory.memsw.usage_in_bytes"]: self.parser.usage = "%%prog %s [options] <target_file> <threshold>" % self.NAME if len(args) < 2: self.parser.error("Less arguments: " + " ".join(args)) if len(args) > 2: self.parser.error("Too many arguments: " + " ".join(args)) threshold = args[1] if threshold[0] == "+": cur = long(fileops.read(target_file)) threshold = threshold.replace("+", "") threshold = cur + self._parse_value(threshold) elif threshold[0] == "-": cur = long(fileops.read(target_file)) threshold = threshold.replace("-", "") threshold = cur - self._parse_value(threshold) else: threshold = self._parse_value(threshold) if self.options.verbose: print "Threshold: %d (%s)" % (threshold, formatter.byte(threshold)) arguments.append(threshold) elif target_name == "memory.oom_control": self.parser.usage = "%%prog %s [options] <target_file>" % self.NAME if len(args) != 1: self.parser.error("Too many arguments: " + " ".join(args)) else: files = ", ".join(cgroup.EventListener.SUPPORTED_FILES) message = "Target file not supported: %s\n" % target_name message += "(Supported files: %s)" % files self.parser.error(message) cg = cgroup.get_cgroup(os.path.dirname(target_file)) if self.options.verbose: self._show_memory_usage("Before", cg) pid = os.fork() if pid == 0: listener = cgroup.EventListener(cg, target_name) listener.register(arguments) # ret = listener.wait() listener.wait() os._exit(0) timed_out = False if self.options.timeout_seconds: remained = self.options.timeout_seconds while remained > 0: ret = os.waitpid(pid, os.WNOHANG) if ret != (0, 0): break time.sleep(0.1) remained -= 0.1 else: timed_out = True os.kill(pid, signal.SIGTERM) else: os.waitpid(pid, 0) if not os.path.exists(cg.fullpath): print ("The cgroup seems to have been removed.") sys.exit(1) if self.options.verbose: self._show_memory_usage("After", cg) if timed_out: if self.options.verbose: print ("Timed out") sys.exit(2) else: sys.exit(0)
def run(self): if not os.path.exists(self.args.target_file): print("File not found: %s" % self.args.target_file) sys.exit(1) target_file = self.args.target_file target_name = os.path.basename(target_file) arguments = [] if target_name in [ 'memory.usage_in_bytes', 'memory.memsw.usage_in_bytes' ]: if not self.args.threshold: self.parser.error('Less arguments: ' + ' '.join(self.args)) threshold = self.args.threshold if threshold[0] == '+': cur = long(fileops.read(target_file)) threshold = threshold.replace('+', '') threshold = cur + self._parse_value(threshold) elif threshold[0] == '-': cur = long(fileops.read(target_file)) threshold = threshold.replace('-', '') threshold = cur - self._parse_value(threshold) else: threshold = self._parse_value(threshold) if self.args.verbose: print("Threshold: %d (%s)" % (threshold, formatter.byte(threshold))) arguments.append(threshold) elif target_name == 'memory.oom_control': if self.args.threshold: self.parser.error('Too many arguments: ' + ' '.join(self.args)) elif target_name == 'memory.pressure_level': SUPPORTED_TERMS = ['low', 'medium', 'critical'] if not self.args.threshold: self.parser.error('Less arguments: ' + ' '.join(self.args)) if self.args.threshold not in SUPPORTED_TERMS: self.parser.error('Use one of %p' % SUPPORTED_TERMS) arguments.append(self.args.threshold) else: files = ', '.join(cgroup.EventListener.SUPPORTED_FILES) message = "Target file not supported: %s\n" % target_name message += "(Supported files: %s)" % files self.parser.error(message) cg = cgroup.get_cgroup(os.path.dirname(target_file)) if self.args.verbose: self._show_memory_usage('Before', cg) pid = os.fork() if pid == 0: listener = cgroup.EventListener(cg, target_name) listener.register(arguments) # ret = listener.wait() listener.wait() os._exit(0) timed_out = False if self.args.timeout_seconds: remained = self.args.timeout_seconds while remained > 0: ret = os.waitpid(pid, os.WNOHANG) if ret != (0, 0): break time.sleep(0.1) remained -= 0.1 else: timed_out = True os.kill(pid, signal.SIGTERM) else: os.waitpid(pid, 0) if not os.path.exists(cg.fullpath): print('The cgroup seems to have been removed.') sys.exit(1) if self.args.verbose: self._show_memory_usage('After', cg) if timed_out: if self.args.verbose: print('Timed out') sys.exit(2) else: sys.exit(0)
def run(self): if not os.path.exists(self.args.target_file): print("File not found: %s" % self.args.target_file) sys.exit(1) target_file = self.args.target_file target_name = os.path.basename(target_file) arguments = [] if target_name in ['memory.usage_in_bytes', 'memory.memsw.usage_in_bytes']: if not self.args.threshold: self.parser.error('Less arguments: ' + ' '.join(self.args)) threshold = self.args.threshold if threshold[0] == '+': cur = long(fileops.read(target_file)) threshold = threshold.replace('+', '') threshold = cur + self._parse_value(threshold) elif threshold[0] == '-': cur = long(fileops.read(target_file)) threshold = threshold.replace('-', '') threshold = cur - self._parse_value(threshold) else: threshold = self._parse_value(threshold) if self.args.verbose: print("Threshold: %d (%s)" % (threshold, formatter.byte(threshold))) arguments.append(threshold) elif target_name == 'memory.oom_control': if self.args.threshold: self.parser.error('Too many arguments: ' + ' '.join(self.args)) elif target_name == 'memory.pressure_level': SUPPORTED_TERMS = ['low', 'medium', 'critical'] if not self.args.threshold: self.parser.error('Less arguments: ' + ' '.join(self.args)) if self.args.threshold not in SUPPORTED_TERMS: self.parser.error('Use one of %p' % SUPPORTED_TERMS) arguments.append(self.args.threshold) else: files = ', '.join(cgroup.EventListener.SUPPORTED_FILES) message = "Target file not supported: %s\n" % target_name message += "(Supported files: %s)" % files self.parser.error(message) cg = cgroup.get_cgroup(os.path.dirname(target_file)) if self.args.verbose: self._show_memory_usage('Before', cg) pid = os.fork() if pid == 0: listener = cgroup.EventListener(cg, target_name) listener.register(arguments) #ret = listener.wait() listener.wait() os._exit(0) timed_out = False if self.args.timeout_seconds: remained = self.args.timeout_seconds while remained > 0: ret = os.waitpid(pid, os.WNOHANG) if ret != (0, 0): break time.sleep(0.1) remained -= 0.1 else: timed_out = True os.kill(pid, signal.SIGTERM) else: os.waitpid(pid, 0) if not os.path.exists(cg.fullpath): print('The cgroup seems to have been removed.') sys.exit(1) if self.args.verbose: self._show_memory_usage('After', cg) if timed_out: if self.args.verbose: print('Timed out') sys.exit(2) else: sys.exit(0)