Как определить лимит памяти процесса в Linux? - PullRequest
10 голосов
/ 10 января 2011

Я искал в интернете, чтобы узнать, сколько памяти может занять процесс Java на машине с Linux (Red Hat). (Я не говорю о куче; скорее всего весь объем памяти, занятый Java Процесс )

У меня нет разрешения на выполнение чего-либо на этом компьютере. Поэтому я не могу просто выполнить программу, которая потребляет память до состояния Out-Of-Memory.

Однако у меня есть разрешение на проверку файлов конфигурации и т. Д. (Например: я пытался выполнить cat / proc / meminfo, но не могу этого понять; похоже, ни один из его результатов не соответствует параметру I хочу знать о).

Я опробовал Java-программу на отдельной машине Red Hat - на которой у меня есть разрешение на выполнение программ - и я смог увидеть, как java-программа выросла до 3 ГБ.

Есть ли какой-нибудь способ узнать, сколько памяти может получить процесс?

Ответы [ 3 ]

10 голосов
/ 10 января 2011

ulimit - твой друг.Процессы Java ничем не отличаются от других.Но если вы даже не можете запустить ulimit -a, трудно ответить на ваш вопрос.

6 голосов
/ 30 ноября 2011

Вот полезное прочтение: Ограничение времени и памяти для программы в Linux , что приводит к инструменту timeout , который позволяет управлять процессом (и его вилками) с помощью время или потребление памяти.

2 голосов
/ 24 апреля 2013

Я имел дело с этой точной проблемой и нашел лучшее решение, если вы используете 2.6.24 или выше, это использовать cgroup / cgroups .Пример может быть таким: вот файл по умолчанию /etc/cgconfig.conf с добавленной группой управления внизу.Эта контрольная группа ограничивает объем физической памяти до 100 МБ, а общий объем виртуальной памяти - до 200 МБ.

mount {
    cpuset  = /cgroup/cpuset;
    cpu = /cgroup/cpu;
    cpuacct = /cgroup/cpuacct;
    memory  = /cgroup/memory;
    devices = /cgroup/devices;
    freezer = /cgroup/freezer;
    net_cls = /cgroup/net_cls;
    blkio   = /cgroup/blkio;
}

group daemons/java_limited_process {
    memory {
        memory.limit_in_bytes = "104857600";
        memory.memsw.limit_in_bytes = "209715200";
    }
}

Как только я настрою это, я могу добавить процесс в группу следующим образом:

cgexec -g memory:daemons/java_limited_process /usr/local/tomcat/bin/startup.sh

Это ограничит память основного процесса и всех потомков, которые он порождает.Он также имеет средства для запроса использования памяти в контроллерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...