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