Используйте cgroup для ограничения использования памяти virtualbox

Наилучшим вариантом является vim/gvim, как определено Shadur, но если Вы хотите сценарий, можно проверить мой ответ на подобный вопрос на Переполнении стека. Я повторяю свой целый ответ здесь:

Если то, что Вы пытаетесь сделать, относится к языку общего назначения, то это - нетривиальная проблема.

Запускаться с Вас должно будет волноваться о комментариях и строках. Если Вы захотите проверить это на языке программирования, который использует регулярные выражения, то это сделает Ваши поиски тяжелее снова.

Таким образом, прежде чем я могу войти и дать Вам любой совет относительно Вашего вопроса, я должен знать пределы Вашей проблемной области. Если можно гарантировать, что нет никаких строк, никаких комментариев и никаких регулярных выражений для волнения о - или более в общем нигде в коде, что скобки могут возможно использоваться кроме для использования, на которое Вы проверяете, что они сбалансированы - это сделает жизнь намного более простой.

Знание языка, который Вы хотите проверить, было бы полезно.


Если я беру гипотезу, что нет никакого шума, т.е. что все скобки являются полезными скобками, моя стратегия была бы повторяющейся:

Я просто искал бы и удалил бы всех внутренних пар скобки: те, которые не содержат скобок внутри. Это лучше всего сделано путем сворачивания всех строк к единственной длинной линии (и найдите механизм к добавить ссылки строки, должны, необходимо получить ту информацию). В этом случае поиск и замена довольно просты:

Это требует массива:

B["("]=")"; B["["]="]"; B["{"]="}"

И цикл через те элементы:

for (b in B) {gsub("[" b "][^][(){}]*[" B[b] "]", "", $0)}

Мой тестовый файл следующие:

#!/bin/awk

($1 == "PID") {
  fo (i=1; i 0 {
  count("VIRT")
  count("RES")
  count("SHR")
  count("%MEM")
}

END {
  pintf "VIRT=\t%12d\nRES=\t%12d\nSHR=\t%12d\n%%MEM=\t%5.1f%%\n", C["VIRT"], C["RES"], C["SHR"], C["%MEM"]
}

function count(c[)
{
  f=F[c];

  if ($f ~ /m$/)
  {
    $f = ($f+0) * 1024
  }

  C[c]+=($f+0)
}

Мой полный сценарий (без ссылки строки) следующие:

cat test-file-for-brackets.txt | \
  tr -d '\r\n' | \
  awk \
  '
    BEGIN {
      B["("]=")";
      B["["]="]";
      B["{"]="}"
    }
    {
      m=1;
      while(m>0)
      {
        m=0;
        for (b in B)
        {
          m+=gsub("[" b "][^][(){}]*[" B[b] "]", "", $0)
        }
      };
      print
    }
  '

Вывод того сценария останавливается на самом внутреннем недопустимом использовании скобок. Но остерегайтесь: 1/этот сценарий не будет работать со скобками в комментариях, регулярных выражениях или строках, 2/это, не сообщает, где в исходном файле проблема расположена, 3/, хотя он удалит все симметричные пары, он останавливается в самых внутренних состояниях ошибки и сохраняет все englobbing скобки.

Точка 3/является, вероятно, годным для использования результатом, хотя я не уверен в механизме создания отчетов, Вы имели в виду.

Точку 2/относительно легко реализовать, но берет больше, чем работа нескольких минут для создания, таким образом, я оставлю ее до Вас для выяснения.

Точка 1/является хитрой, потому что Вы вводите совершенно новую область конкуренции иногда вкладываемого начала и окончаний или специальных правил заключения в кавычки для специальных символов...

9
21.08.2011, 17:56
2 ответа

Вы могли limt память usege с/etc/security/limits.conf в этом файле, который Вы помещаете:

domain type item value

где domain @groupname, type hard или soft где hard limt, который не может быть превышен ни при каких обстоятельствах.

item поле объекта, указывает, какой объект ограничивается. Примеры ​ включают ядро (размер базовых файлов), данные (размер области данных программы), fsize (размер файлов, созданных пользователем), nofile (количество открытых файлов данных), RSS (размер резидентного набора), стек (размер стека), CPU (процессорное время единственного процесса в минутах), nproc (количество параллельных процессов), maxlogins (количество одновременных логинов), и приоритет (приоритет процесса). Данные, RSS и объекты стека все касаются памяти, использованной про - грамм. Эти и другие меры информационной емкости измеряются в килобайтах.

и value касаются item поле, которое Вы имеете, выбрало, например, если Вы имеете, выбрал cpu в item поле и помещенный 2 в value затем в случае, если domain (Вы группируетесь VirtualBox), взятие больше, чем 2 из процессорного времени это будет завершено.

Можно использовать ulimit также, но это ограничило оболочкой удара только.

Надеюсь эта справка Вы в Вас цель, хотя она не сделана с методом, Вы спросили.

3
27.01.2020, 20:07

Я предполагаю, что существует что-то не так с Вашим /etc/cgconfig.conf файл. Эта установка работает на меня:

[root@localhost cgroup]# cat /etc/cgconfig.conf
mount {
    memory  = /cgroup/memory;
}

[root@localhost cgroup]# service cgconfig start
Starting cgconfig service:                                 [  OK  ]
[root@localhost cgroup]# ls
memory
[root@localhost cgroup]# ls memory/
cgroup.event_control  memory.limit_in_bytes        memory.memsw.max_usage_in_bytes  memory.soft_limit_in_bytes  memory.use_hierarchy
cgroup.procs          memory.max_usage_in_bytes    memory.memsw.usage_in_bytes      memory.stat                 notify_on_release
memory.failcnt        memory.memsw.failcnt         memory.move_charge_at_immigrate  memory.swappiness           release_agent
memory.force_empty    memory.memsw.limit_in_bytes  memory.oom_control               memory.usage_in_bytes       tasks
[root@localhost cgroup]# cgcreate -g memory:vbox
[root@localhost cgroup]# cgset -r memory.limit_in_bytes=512M vbox
[root@localhost cgroup]# cgclassify -g memory:vbox 11727
[root@localhost cgroup]# cat memory/vbox/tasks 
11727

Хотя, вместо того, чтобы использовать cgreate и cgset команды, я советовал бы Вам просто создавать a /etc/cgconfig.conf файл, который включал бы эти настройки так, чтобы Вы не повторяли процесс после каждой перезагрузки. В Вашем случае файл был бы похож на это:

[root@localhost cgroup]# cat /etc/cgconfig.conf
mount {
    memory  = /cgroup/memory;
}

group vbox {
    memory {
        memory.limit_in_bytes="536870912";
    }
}

Теперь, каждый раз Вы запускаете cgconfig сервис, у Вас будет свой vbox cgroup готовым. Все это необходимо, должно переместить PID virtualbox в /cgroups/memory/vbox/tasks файл с помощью также cgclassify или просто echo число в том файле.

1
27.01.2020, 20:07

Теги

Похожие вопросы