2016-01-22 4 views
2

Возможно ли иметь проблемы с производительностью в Docker?Как измерить производительность в Docker?

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

Но я не знаю, что в докер. Это просто работает. Будет ли он автоматически использовать ОЗУ, что ему нужно или как это работает?

ответ

1

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

По умолчанию он будет использовать минимальную требуемую память, до предела.

Вы можете использовать docker stats, чтобы увидеть его против бегущего контейнера:

$ docker stats redis1 redis2 
CONTAINER   CPU %    MEM USAGE/LIMIT  MEM %    NET I/O    BLOCK I/O 
redis1    0.07%    796 KB/64 MB  1.21%    788 B/648 B  3.568 MB/512 KB 
redis2    0.07%    2.746 MB/64 MB  4.29%    1.266 KB/648 B 12.4 MB/0 B 

При использовании docker run, вы можете указать эти ограничения с Runtime constraints on resources.
Это включает в себя RAM:

-m, --memory=""  

предел памяти (формат: <number>[<unit>], где единица = Ь, к, м или ж)

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

По умолчанию, ядро ​​убивает процессы в контейнере, если возникает ошибка вне памяти (OOM).
Чтобы изменить это поведение, используйте опцию --oom-kill-disable. Только отключите убийцу OOM в контейнерах, где вы также установили опцию -m/--memory.

Примечание: предстоящая (1,10) docker update command может включать в себя динамические изменения памяти. См. docker update.

+0

Фактически, по умолчанию на контейнере нет ограничений; это самая лучшая практика для этого – thaJeztah

+0

@thaJeztah Да, я добавил соответствующую часть документа к ответу. – VonC

0

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

Вы должны всегда установить ограничения на контейнер, например, максимальный объем памяти, которую может использовать контейнер, объем пространства подкачки и объем процессора. Не устанавливать такие ограничения потенциально могут привести к тому, что у хозяина закончится память, а ядро, убивающее случайных процессов (OOM kill), освобождает память. «Случайный» в этом случае также может означать, что ядро ​​убивает ваш ssh-сервер или сам демон докеров.

Подробнее об ограничении ресурсов на контейнере в Runtime constraints on resources в руководстве.