Example #1
0
 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))
Example #2
0
 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)))
Example #3
0
    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))
Example #4
0
    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))
Example #5
0
    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)
Example #6
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)
Example #7
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)