Как демон может оставаться активным, не используя память? - PullRequest
0 голосов
/ 18 января 2019

Я задал этот вопрос при использовании команды ps aux.

ps aux

Здесь я вижу, что несколько процессов находятся на 0% CPU 0% MEM 0 VSZ 0 RSS .

Если демон не использует какую-либо память, почему и как он мог отображаться в первую очередь? Я вроде понимаю, что 0% CPU означает, что процесс в данный момент не используется, но 0% MEM означает, что процесс вообще не используется?

Я хотел проверить, является ли это каким-то образом системным демоном, поэтому я создал простую программу на C с бесконечным циклом, без каких-либо переменных.

void main()
{
        while (1){}
}

На этот раз VSZ и RSS имеют действительные значения, а MEM остается на уровне 0%. memory test

Что здесь происходит?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Несмотря на то, что ответ Жан-Батиста верен, я считаю, что в данном случае более важно, что вся 0 память во всех трех процессах поля, которые вы отмечаете, являются потоками ядра. Их память - это вся память ядра, и она не отображается сверху или пс. Вы можете сказать, что это поток ядра в linux как по команде, заключенной в квадратные скобки, так и по процессу, не занимающему память в столбце VSZ. (Это столбец, представляющий практически все, что можно считать памятью процесса. Это только 0 для потоков ядра, и это только потому, что они не сообщают должным образом свою память.

Также обратите внимание, что с учетом времени запуска в 2018 году и использования не более 1 минуты 41 секунды ни одно из этих заданий на самом деле не очень активно.

0 голосов
/ 18 января 2019

%MEM, вероятно, не полностью задокументировано в вашей системе. Руководство AIX о команде ps гласит:

%MEM

Рассчитывается как сумма номера рабочего сегмента и кода Сегмент страниц в памяти раз 4 (то есть значение RSS), разделенный на размер используемой реальной памяти, в машине, в КБ, раз 100, округляется до ближайшего полного процентного пункта. Это значение пытается передать процент реальной памяти, используемой процессом. К сожалению, как RSS, это имеет тенденцию преувеличивать стоимость процесса то есть делиться текстом программы с другими процессами. Кроме того, округление до ближайшего процентного пункта вызывает все процессы в системе, в которой значения RSS меньше 0,005 реального объема памяти иметь% MEM 0,0.

Как вы могли догадаться, изучив выходные данные, было применено некоторое округление. Поэтому, если значение слишком низкое, печатается% 0.0.

И это процентная доля реального использования памяти, что означает, что он не отражает размер процесса, а только то, какая часть процесса фактически отображается в реальную память.

В вашем первом случае% 0.0 для ЦП просто означает, что процесс существует, но на самом деле ничего не делает, и он, вероятно, находится в состоянии ожидания (или потребляет очень небольшой процент от вычислительной мощности), а не "что это не так, в настоящее время в использовании". Во втором случае ваш процесс активен, он на самом деле очень занят (это то, что отражает %97.7), но то, что он делает, глупо (бесконечный цикл ничего не делает).

Чтобы понять все это, вы можете прочитать о состоянии процесса, планировании процесса и виртуальной памяти.

...