Я пытаюсь провести несколько тестов с Azul ZingVM, которому необходимо предварительно выделить большое количество оперативной памяти.
Проблема в том, что на моем сервере (под управлением Cent OS 5.8) с оперативной памятью 16 ГБ сразу после перезагрузки будет использовано более 8 ГБ ... вот так (я перезагружаю сервер, вхожу в систему по ssh и запускаю free -m
однажды):
total used free shared buffers cached
Mem: 16048 8281 7767 0 1 19
-/+ buffers/cache: 8260 7788
Swap: 18047 0 18047
Очевидно, что буферы и кеширование не влияют на используемую оперативную память 8 ГБ. Это сервер приложений, который запускает Apache Tomcat каждый день (для тестов), и я уверен, что Tomcat не будет запускаться автоматически.
Я попытался выяснить, какой процесс использует такой большой объем памяти с top
, но только для того, чтобы обнаружить, что процесс с верхним использованием ВИЭ использует только 4460k ...
Однако у меня есть другой сервер (с Cent OS 5.8), на котором запущен mysql. Этот сервер базы данных использует память в нормальном режиме. Теперь я тестирую ZVM на сервере базы данных, и когда Zing выделяет 65% оперативной памяти при запуске, после новой перезагрузки free -m
показывает:
total used free shared buffers cached
Mem: 16048 10942 5105 0 3 55
-/+ buffers/cache: 10883 5165
Swap: 18047 0 18047
Итак ... Если мы проигнорируем 65% от 16 ГБ - около 10 ГБ - используемых Zing, используемая память после перезагрузки должна составить всего несколько МБ.
Сейчас я просто проверяю, смогу ли я заставить Tomcat работать под ZingVM. Затем мне нужно провести настоящие тесты на еще двух серверах Cent OS, и, к сожалению, у этих двух серверов такая же проблема. То есть у нас есть 4 сервера, и у 3 серверов есть эта проблема.
В чем может быть причина этой проблемы? Могу ли я решить эту проблему без повторной установки ОС на этих машинах?
Обновить:
вот что сообщает zing-system-tool, когда я пытаюсь настроить его на использование 75%(это значение по умолчанию) памяти. Точно такая же картина вывода, когда я указываю 85%.
Fatal error: Not enough free memory (memoryForAzulBytes (12620660736) > MemFree (8142327808)).
zing-memory: ERROR: Configure pmem failed
Fatal error: os::safeSystem: command '/sbin/service zing-memory restart' failed.
А вот успешное выделение памяти на сервере базы данных (на этот раз я указал 68%, а старое значение - 65%; ZST освободит зарезервированную память самостоятельно):
Info: azulPmemPages: 5456.
INFO: az_pmem_reserve_pages (num2mPages 5456) succeeded
INFO: az_pmem_fund_transfer (to 7, from 0, bytes 11442061312) succeeded
INFO: az_pmem_fund_transfer (to 1, from 7, bytes 570425344) succeeded
INFO: az_pmem_fund_transfer (to 3, from 7, bytes 570425344) succeeded
INFO: az_pmem_fund_transfer (to 0, from 7, bytes 10301210624) succeeded
Info: You can now start Java processes up to -Xmx9824m or -Xmx9g.
Info: Azul pmem initialized successfully.
zing-memory: INFO: start successful
zing-memory: INFO: restart successful
Обновление 2:
Я видел это в / proc / meminfo на проблемном сервере:
HugePages_Total: 4096
HugePages_Free: 4096
HugePages_Rsvd: 0
Hugepagesize: 2048 kB
а на сервере базы данных все 0. Может ли это быть причиной использованной памяти?
ОК, разобрался:
См. Мое обновление 2 в вопросе. Это причина.
Огромная страница зарезервирована; если не указано иное, приложения не будут его использовать. Итак, ZST не может выделить память.
Когда я устанавливаю Hugepage на ноль, память сразу освобождается, и ZST успешно выделяет память.
Пытаться slabtop
на проблемном сервере и посмотрите, выделяет ли ядро по какой-то причине огромное количество оперативной памяти. Например, XFS может выделять много памяти для своего кеша, не будучи видимым в буферах / кешированных столбцах (хотя XFS освобождает память при необходимости).