OpenVZ Forum


Home » International » Russian » swap/mem
swap/mem [message #39283] Sat, 03 April 2010 13:05 Go to next message
bindto is currently offline  bindto
Messages: 6
Registered: April 2010
Junior Member
имеется контейнер, который в некоторый момент напоролся на лимит.

resource held maxheld barrier limit failcnt
kmemsize 9138939 20530451 40480000 2147483647 6146
privvmpages 38883 79332 524288 549888 0
physpages 9890 36648 2147483647 2147483647 0
vmguarpages 0 0 262144 2147483647 0
oomguarpages 9890 36649 2147483647 2147483647 0

kmemsize был увеличен. однако вопрос тут, почему контейнер не ушел в свап? при этом процесс, жрущий память (httpd), тоже не кильнул.

в результате, даже на vzctl stop завис.

Linux 2.6.18-164.11.1.el5.028stab068.3ent RHEL5

[Updated on: Sat, 03 April 2010 13:09]

Report message to a moderator

Re: swap/mem [message #39293 is a reply to message #39283] Sat, 03 April 2010 18:40 Go to previous messageGo to next message
RXL_ is currently offline  RXL_
Messages: 147
Registered: July 2009
Location: Moscow/Russia
Senior Member
Quote:

--kmemsize bytes[:bytes]
Maximum amount of kernel memory used. This parameter is related to --numproc. Each process consumes certain amount of kernel memory - 16 KB at leas, 30-50 KB typically. Very large processes may consume a bit more. It is important to have a certain safety gap between the barrier and the limit of this parameter: equal barrier and limit may lead to the situation where the kernel will need to kill container's applications to keep the kmemsize usage under the limit.



Тут ни слова о свопировании.
Кстати, почему не устанавливаете лимит, а только барьер?

http://wiki.openvz.org/UBC_secondary_parameters#kmemsize



... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

[Updated on: Sat, 03 April 2010 18:56]

Report message to a moderator

Re: swap/mem [message #39294 is a reply to message #39293] Sat, 03 April 2010 19:40 Go to previous messageGo to next message
bindto is currently offline  bindto
Messages: 6
Registered: April 2010
Junior Member
да, kmemsize к свапу не имеет никакого отношения, но я специально привел другие параметры. вопрос тот же, почему контейнер не ушел в свап?

по поводу kmemsize limit, возможно я не понял документацию,
но посчитал что

KMEMSIZE="40480000:2147483647"

второе значение это макс возможный лимит для х86, и если его указать - это означает вся доступная память, что меня вполне устраивает, поскольку идея не в ферме, а изоляции сервиса.
я здесь сделал что-то не так?

и здесь наверно связанный вопрос, почему контейнер не пошел за барьер с этим лимитом?

[Updated on: Sat, 03 April 2010 19:42]

Report message to a moderator

Re: swap/mem [message #39299 is a reply to message #39294] Sat, 03 April 2010 20:47 Go to previous messageGo to next message
RXL_ is currently offline  RXL_
Messages: 147
Registered: July 2009
Location: Moscow/Russia
Senior Member
Для kmemsize надо указать лимит. Это на вопрос, почему процесс не был убит.

Свопироваться структуры ядра не должны.

Контейнер не свопировался потому, что в системе было достаточно памяти.


... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

[Updated on: Sat, 03 April 2010 20:49]

Report message to a moderator

Re: swap/mem [message #39303 is a reply to message #39283] Sun, 04 April 2010 06:34 Go to previous messageGo to next message
gralex is currently offline  gralex
Messages: 62
Registered: December 2008
Location: Russia, Novosibirsk
Member
OpenVZ не поддерживает свап. И контейнеры не умеют уходить в свап.

А когда апач в контейнере съедает всю память, только ребут VE помогает.



------------------
P.s. поправьте меня если ошибаюсь Wink


P.s. поправьте меня если ошибаюсь Wink
Re: swap/mem [message #39305 is a reply to message #39303] Sun, 04 April 2010 07:41 Go to previous messageGo to next message
RXL_ is currently offline  RXL_
Messages: 147
Registered: July 2009
Location: Moscow/Russia
Senior Member
Почему же не поддерживает? Страницы контейнера могут свопироваться. Вопрос в лимите - сколько задано в privvmpages.

Скажем, тут privvmpages составляет 2 ГБ - значит можно условно считать, что размер RAM + SWAP = 2 ГБ.

Несвопируемая часть - lockedpages. Если я понял из доки, kmemsize, буфера сокетов и прочие ядерные структуры в зачет не идут: privvmpages относится к user space. Также кеш файлов в зачет не идет - он общий для всей системы.


... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Re: swap/mem [message #39309 is a reply to message #39299] Sun, 04 April 2010 08:53 Go to previous messageGo to next message
bindto is currently offline  bindto
Messages: 6
Registered: April 2010
Junior Member
RXL_ wrote on Sat, 03 April 2010 15:47
Для kmemsize надо указать лимит. Это на вопрос, почему процесс не был убит.

Свопироваться структуры ядра не должны.

Контейнер не свопировался потому, что в системе было достаточно памяти.



проясните этот момент - "kmemsize надо указать лимит." я считал, что задал его максимально возможным значением, это не так?
или максимально возможный параметр значит "нет значения"?
тогда почему в других параметрах, тот же oomguarpages , это
работает?

по поводу двух других ответов, свап юзался, если я правильно
понял этот параметр

oomguarpages 9890 36649 2147483647 2147483647 0

и вот здесь возникает другой интересный вопрос, почему
apache+php уляглись в kernel. поскольку без openvz это все
использует свап.
Re: swap/mem [message #39310 is a reply to message #39309] Sun, 04 April 2010 14:02 Go to previous messageGo to next message
RXL_ is currently offline  RXL_
Messages: 147
Registered: July 2009
Location: Moscow/Russia
Senior Member
Надо следовать документации: в одних параметрах действителен только барьер, а других - и барьер, и лимит. Когда лимит не используется, он должен быть установлен в максимальное значение для целого на данной платформе.

Если перевести терминологию OpenVZ на привычные лимиты Unix, то:

  • барьер - мягкий лимит (soft limit);
  • лимит - жесткий лимит (hard limit).

Не поручусь за точность объяснения, но логика примерно такая: контейнер приблизился к барьеру и приложение в нем запрашивает блок памяти. Если уже израсходованная память + новый блок укладываются в диапазон "soft:hard", то память выделяется, если происходит превышение "hard", то приложение получает ошибку выделения "out of memory". Если на момент запроса приложением блока памяти контейнер уже вошел в диапазон "soft:hard", то приложение получит "out of memory". Это такой защитный диапазон.

По этому, если установлен барьер kmempages, но не установлен лимит, то приложение может запросить очень большой блок памяти - много больше, чем указано в барьере. По этому лимит надо тоже ставить (если в доке не сказано обратное).

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

Еще раз: виртуальная память и физическая память - разные вещи. Физической памятью может оперировать только ядро. Все остальные системы (и user space особенно) оперируют вирутальной памятью.

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


... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

[Updated on: Sun, 04 April 2010 14:22]

Report message to a moderator

Re: swap/mem [message #39325 is a reply to message #39303] Mon, 05 April 2010 11:03 Go to previous messageGo to next message
kir is currently offline  kir
Messages: 1645
Registered: August 2005
Location: Moscow, Russia
Senior Member

gralex wrote on Sun, 04 April 2010 10:34
OpenVZ не поддерживает свап. И контейнеры не умеют уходить в свап.


Поддерживает. Умеют.

Читайте внимательно документацию -- http://wiki.openvz.org/UBC


Kir Kolyshkin
http://static.openvz.org/userbars/openvz-developer.png
Re: swap/mem [message #39326 is a reply to message #39325] Mon, 05 April 2010 11:14 Go to previous messageGo to next message
gralex is currently offline  gralex
Messages: 62
Registered: December 2008
Location: Russia, Novosibirsk
Member
Имел в виду swap, доступный внутри VE

Хм, и правда... но не в 2.6.18-164.10.1.el5.028stab067.4

http://wiki.openvz.org/Swappages#swappages

Quote:
swappages is only available in RHEL5-based kernel since version 028stab060.2, in 2.6.27 since kiprensky.


Документацию по свапу на wiki.openvz.org не читал. Поверил HyperVM, который выставляет swap только для xen-based VE.


P.s. поправьте меня если ошибаюсь Wink
Re: swap/mem [message #39328 is a reply to message #39326] Mon, 05 April 2010 12:54 Go to previous messageGo to next message
kir is currently offline  kir
Messages: 1645
Registered: August 2005
Location: Moscow, Russia
Senior Member

Этот параметр ничего особенного не означает -- если его барьер выставить, то free и прочие будут показывать, что как будто бы вот столько свопа есть в VE. Если не выставить, то free и прочие будут показывать, сколько свопа есть на ноде. Никакого отношения к тому, как на самом деле будет использоваться своп, это не имеет. Но вот значение held для swappages представляет некоторый интерес -- там вы можете увидеть, сколько страничек из этого контейнера упали в своп.

Не знаю, зачем я тут это пишу, потому что про это написано в документации по ссылке, которую вы дали.


Kir Kolyshkin
http://static.openvz.org/userbars/openvz-developer.png
Re: swap/mem [message #39330 is a reply to message #39328] Mon, 05 April 2010 13:00 Go to previous messageGo to next message
kir is currently offline  kir
Messages: 1645
Registered: August 2005
Location: Moscow, Russia
Senior Member

kir wrote on Mon, 05 April 2010 16:54
Но вот значение held для swappages представляет некоторый интерес -- там вы можете увидеть, сколько страничек из этого контейнера упали в своп.


О, про это не было написано. Исправляюсь, добавил Smile


Kir Kolyshkin
http://static.openvz.org/userbars/openvz-developer.png
Re: swap/mem [message #39332 is a reply to message #39310] Mon, 05 April 2010 18:56 Go to previous messageGo to next message
bindto is currently offline  bindto
Messages: 6
Registered: April 2010
Junior Member
RXL_ wrote on Sun, 04 April 2010 10:02
Надо следовать документации:

в одних параметрах действителен только барьер, а других - и барьер, и лимит. Когда лимит не используется, он должен быть установлен в максимальное значение для целого на данной платформе.




не могли бы вы показать, где написано
"Когда лимит не используется, он должен быть установлен в максимальное значение для целого на данной платформе."

http://wiki.openvz.org/UBC_parameters
вроде вот здесь полное описание и только одно упоминание о максимальном значении.





RXL_ wrote on Sun, 04 April 2010 10:02


По этому, если установлен барьер kmempages, но не установлен лимит, то приложение может запросить очень большой блок памяти - много больше, чем указано в барьере. По этому лимит надо тоже ставить (если в доке не сказано обратное).



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

вопрос перешел в разряд теретических, я установил реальный лимит.


RXL_ wrote on Sun, 04 April 2010 10:02

Еще раз: виртуальная память и физическая память - разные вещи. Физической памятью может оперировать только ядро. Все остальные системы (и user space особенно) оперируют вирутальной памятью.

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



вы не совсем точно определили проблему, вопрос не в моем знании работы с памятью, хотя я считаю его впольне правильными и достаточными, а в том, что не так в кофигурации, которая заставила контейнер отказаться свапиться.
или мне стоит начать думать, что http и php исконные жители кернел спейс? Wink
Re: swap/mem [message #39333 is a reply to message #39328] Mon, 05 April 2010 19:19 Go to previous messageGo to next message
bindto is currently offline  bindto
Messages: 6
Registered: April 2010
Junior Member
kir wrote on Mon, 05 April 2010 08:54
Этот параметр ничего особенного не означает -- если его барьер выставить, то free и прочие будут показывать, что как будто бы вот столько свопа есть в VE. Если не выставить, то free и прочие будут показывать, сколько свопа есть на ноде. Никакого отношения к тому, как на самом деле будет использоваться своп, это не имеет. Но вот значение held для swappages представляет некоторый интерес -- там вы можете увидеть, сколько страничек из этого контейнера упали в своп.

Не знаю, зачем я тут это пишу, потому что про это написано в документации по ссылке, которую вы дали.



надо сюда же добваить, что параметр доступен в версии vzctl >=3.0.24 и не виден в /proc/user_beancounters, а только в /proc/bc/resources.

и вопрос тут
"Если не выставить, то free и прочие будут показывать, сколько свопа есть на ноде."

доступного свапа или используемого на текущий момент?

free
Swap: 0 0 0

получается свапа нет?

swappages 0 1 2147483647 147483647 0

хотя одна страница таки упала.

[Updated on: Mon, 05 April 2010 19:28]

Report message to a moderator

Re: swap/mem [message #39550 is a reply to message #39333] Sun, 09 May 2010 12:49 Go to previous message
andreyb is currently offline  andreyb
Messages: 25
Registered: February 2008
Junior Member
Quote:
не виден в /proc/user_beancounters, а только в /proc/bc/resources

А не является ли это небольшим багом?
Quote:
free
Swap: 0 0 0

получается свапа нет?


В документации:
If the limit is set to MAX_ULONG (which is the in-kernel default for this parameter), all the swap space values parameters (total, used, free) are reported as 0.

[Updated on: Sun, 09 May 2010 12:51]

Report message to a moderator

Previous Topic: sysenter status
Next Topic: Чем мерить нагрузочную способность
Goto Forum:
  


Current Time: Sat Nov 09 00:12:05 GMT 2024

Total time taken to generate the page: 0.03218 seconds