Я ожидал, что вся оперативная память будет использоваться до обмена, но у меня есть странный результат в htop:

Скриншот htop, работающего на сервере.

Это означает, что на моем сервере с 24 ГБ ОЗУ мое программное обеспечение переставило 1 ГБ памяти на диск, когда они использовали всего 23 ГБ памяти.

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

2 ответа2

1

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

Для настольных систем некоторые операционные системы (например, Windows) даже предварительно загружают программное обеспечение, которое вы часто используете, в память и помещают данные, которые в настоящее время не используются, на жесткий диск. Это не очень хорошо работает, когда система только что установлена, но будет становиться все лучше и лучше по мере ее использования.

0

Это поведение контролируется с помощью параметра ядра, называемого vm.swappiness, который может быть установлен в диапазоне от 0 до 100. Значение по умолчанию, равное 60, приведет к некоторой перестановке системы до того, как физическая память будет полностью заполнена, что поможет поддерживать производительность под давлением памяти, при этом не сильно меняя местами, что приведет к снижению производительности из-за сбоя.

Это можно отключить, установив swappiness на 0, и в этом случае система не будет менять местами без крайней необходимости. Это может иметь смысл, если у вас обычно много свободной оперативной памяти. Тем не менее, производительность упадет с обрыва в тот момент, когда физическая память вашей системы будет полностью заполнена, так как система внезапно будет вынуждена поменяться в неподходящее время, когда приложению требуется память, а не заранее, и это не рекомендуется в вашем случае в качестве вашего сервера бежит близко к полному.

Вероятно, для вас лучше установить значение swappiness на низкое (но ненулевое) значение, например 10, что уменьшит ненужную подкачку, не дожидаясь последнего момента, чтобы освободить ОЗУ, когда программе это необходимо. Наилучшая настройка зависит от вашей среды, поэтому экспериментируйте с различными настройками, пока не получите наилучшие результаты.

Чтобы изменить настройку swappiness, запишите желаемое значение в /proc/sys/vm/swappiness используя echo качестве пользователя root. Чтобы внести постоянные изменения, добавьте строку vm.swappiness в /etc/sysctl.conf (замените 10 нужным значением при необходимости):

vm.swappiness = 10

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .