Виртуальная память 100 ГБ на сервере 64 ГБ без подкачки

Возможный дубликат:
Понимание использования виртуальной памяти> подкачка + физическая в Linux

У нас есть следующий процесс:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                         
10684 root       8 -15 89.6g  13g 1.1g S 406.9 21.8 316:34.89 java 

Является ли это количество виртуальной памяти в порядке, принимая во внимание тот факт, что у нас есть только 64 ГБ оперативной памяти. Также вот информация о физической памяти:

Mem:  65995412k total, 64967388k used,  1028024k free,  3976288k buffers
Swap: 32764556k total,     1236k used, 32763320k free, 19534812k cached

Как видите, только 1236k поменялись местами.

Нам интересно, где недостающие 30 ГБ + ОЗУ? Они на диске?

Сколько виртуальной памяти в порядке для конкретного процесса? Какая связь между виртуальной памятью и оперативной памятью.

1 ответ

Решение

VIRT отражает количество виртуальной памяти, выделенной процессом, а не реальной. Адресное пространство процесса может содержать определенные области, сопоставленные с соответствующими файлами, которые не находятся в ОЗУ.

По крайней мере, исполняемый файл программы и разделяемые библиотеки отображаются в виртуальное адресное пространство процесса. Во время выполнения программы процесс может отображать другие файлы в свое адресное пространство, и иногда его размер может быть большим (изображения, фильмы, базы данных) - даже больше, чем доступный объем ОЗУ - он ограничен общим объемом адресуемой памяти на текущем Архитектура процессора.

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

Также Linux может разбрасывать идентичные страницы в памяти. Если два процесса используют одни и те же страницы в памяти, ядро ​​может отобразить обе виртуальные страницы в одну реальную (и выпустить вторую).

Так что, да, это нормально, когда процесс выделяет больше виртуальной памяти, чем объем доступной физической памяти.

Другие вопросы по тегам