Возможный дубликат:
Общие сведения об использовании виртуальной памяти> подкачка + физическая в 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 ГБ + ОЗУ? На диске ли они?
Сколько виртуальной памяти подходит для конкретного процесса? Какая связь между виртуальной памятью и ОЗУ.
ВИРТ
отражает количество виртуальной памяти , выделенной процессом, а не реальным. Адресное пространство процесса может содержать определенные области , сопоставленные с соответствующими файлами, которые не находятся в ОЗУ.
По крайней мере, исполняемые программы и разделяемые библиотеки отображаются в виртуальное адресное пространство процесса. Во время выполнения программы процесс может сопоставлять другие файлы со своим адресным пространством, и иногда его размер может быть большим (изображения, фильмы, базы данных) - даже больше, чем доступный объем ОЗУ - он ограничен общим объемом адресуемой памяти в текущем архитектура процессора.
Также Linux использует оптимистичную стратегию распределения памяти. Это означает, что даже если процесс вызывает malloc ()
, выделение физической памяти может быть отложено до тех пор, пока страница не будет использована. Это означает, что процесс может выделить больше RAM, чем доступно.
Также Linux может разрежать идентичные страницы в памяти. Если два процесса используют одни и те же страницы в памяти, ядро может отобразить обе виртуальные страницы в одну реальную (и освободить вторую).
Итак, да, это нормально, когда процесс выделяет больше виртуальной памяти, чем объем доступной физической памяти.