ALT Linux Community general discussions
 help / color / mirror / Atom feed
From: Sergey Vlasov <vsu@altlinux.ru>
To: community@lists.altlinux.org
Subject: Re: [Comm] oom-killer preferences? :)
Date: Tue, 18 Mar 2008 14:34:54 +0300
Message-ID: <20080318113454.GA3835@newmaster.mivlgu.local> (raw)
In-Reply-To: <20080317201059.GD23204@cryo.net.ru>

[-- Attachment #1: Type: text/plain, Size: 3159 bytes --]

On Mon, Mar 17, 2008 at 11:10:59PM +0300, Pavlov Konstantin wrote:
> Ну как сказать, у меня на ноутбуке за ночь кушает все полтора гига и
> система практически умирает, причем oom-killer почему-то отстреливает все
> подряд, а не kopete.
> 
> Может, есть какие-нибудь методы сказать oom-killer'у убивать в первую
> очередь определенные приложения?

OOM killer выбирает среди всех процессов, кроме init, процесс с наибольшим
значением badness, которое считается следующим образом:

 1. Берётся размер виртуальной памяти процесса в страницах (total_vm).

 2. К этому размеру прибавляется total_vm/2 + 1 для всех порождённых
    процессов, имеющих собственный VM (т.е., полноценных процессов, а не
    потоков, использующих тот же VM).  Таким образом, если процесс
    порождает большое количество дочерних процессов, которые в сумме
    потребляют много памяти, он с большой вероятностью будет выбран для
    OOM kill, однако благодаря делению на 2, если на самом деле активным
    потребителем памяти является только один из дочерних процессов,
    вероятнее всего, будет выбран только этот процесс.

 3. Полученное значение делится на int_sqrt(cpu_time), где cpu_time -
    процессорное время (user+system), использованное к этому моменту,
    приблизительно в 10-секундных единицах (на самом деле там вместо
    деления используется сдвиг, так что, например, при HZ=1000 получится
    8.192 с); если int_sqrt(cpu_time) == 0, значение не изменяется.

 4. Полученное значение делится на int_sqrt(int_sqrt(run_time/1024)), где
    run_time - реальное время, прошедшее с момента запуска процесса, в
    секундах; если int_sqrt(int_sqrt(run_time/1024)) == 0, значение не
    изменяется.

 5. Если для процесса было установлено значение nice > 0, значение badness
    умножается на 2 (предполагается, что такие процессы менее важны, чем
    обычные).

 6. Если процесс имеет привилегию CAP_SYS_ADMIN, либо uid == 0, либо euid
    == 0, значение badness делится на 4 (процессы root считаются более
    важными, чем прочие).

 7. Если процесс имеет привилегию CAP_SYS_RAWIO, значение badness делится
    на 4 (принудительное завершение процесса, осуществлявшего прямой
    доступ к устройствам, может привести к нежелательным последствиям,
    поэтому такие процессы получают дополнительную защиту).

 8. Наконец, используется значение, установленное в /proc/$PID/oom_adj:
    если oom_adj находится в диапазоне от -16 до 15, значение badness
    умножается на 2^{oom_adj} (т.е., положительные значения увеличивают
    badness, отрицательные - уменьшают).  Значение -17 безусловно
    запрещает OOM killer выбирать этот процесс.

Текущее значение badness для процесса можно найти в /proc/$PID/oom_score
(уже с учётом установленного для этого процесса oom_adj).

В ядрах <= 2.6.19 запись в /proc/$PID/oom_adj, несмотря на видимые права
доступа 0644, можно выполнять только при наличии CAP_SYS_RESOURCE; начиная
с 2.6.20, пользователь имеет право увеличить значение oom_adj для своих
процессов (это значение наследуется порождёнными процессами), а привилегия
CAP_SYS_RESOURCE требуется только для уменьшения.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

  reply	other threads:[~2008-03-18 11:34 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-17 15:55 [Comm] Kopete течет Анатолий Акатьев
2008-03-17 16:03 ` Андрей Черепанов
2008-03-17 16:05   ` Andrey Chichak
2008-03-17 16:08     ` Pavlov Konstantin
2008-03-17 16:11       ` Andrey Chichak
2008-03-17 17:12         ` Владимир Гусев
2008-03-17 20:10           ` [Comm] oom-killer preferences? :) Pavlov Konstantin
2008-03-18 11:34             ` Sergey Vlasov [this message]
2008-03-20 15:00               ` Alexey I. Froloff
2008-03-17 16:22 ` [Comm] Kopete течет Ilis
2008-03-17 18:01   ` Анатолий Акатьев
2008-03-20 13:07     ` Genix

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080318113454.GA3835@newmaster.mivlgu.local \
    --to=vsu@altlinux.ru \
    --cc=community@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git