У меня странная проблема, когда я бегу верхняя Команда показывает, что некоторые процессы используют около 1,5 ГБ пространства подкачки, но тогда общее использование подкачки системы меньше, примерно до 117 МБ, так почему? Я думал, что общее использование системного свопа - это совокупное использование всех процессов, что в данном случае не похоже на правду. Вот результат:
Tasks: 392 total, 16 running, 373 sleeping, 0 stopped, 3 zombie
Cpu0 : 95.1%us, 4.9%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 98.0%us, 2.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 91.1%us, 6.9%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 2.0%si, 0.0%st
Cpu3 : 95.0%us, 3.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 2.0%si, 0.0%st
Mem: 4148160k total, 4007820k used, 140340k free, 15968k buffers
Swap: 4096552k total, 117584k used, 3978968k free, 2909396k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
5784 apache 18 0 1567m 5772 4568 S 0.0 0.1 0:00.03 1.5g C:\windows\system32\explorer.exe /desktop
5776 apache 25 0 1558m 2564 2124 S 0.0 0.1 0:00.00 1.5g C:\windows\system32\winedevice.exe MountMgr 5774 apache 25 0 1558m 2324 1928 S 0.0 0.1 0:00.00 1.5g C:\windows\system32\services.exe
9395 apache 15 0 90536 2988 1340 S 0.0 0.1 0:00.00 85m /usr/sbin/httpd
9419 apache 18 0 90536 2988 1340 S 0.0 0.1 0:00.00 85m /usr/sbin/httpd
27016 apache 18 0 91520 4000 2964 S 0.0 0.1 0:00.04 85m /usr/sbin/httpd
7773 apache 16 0 91012 3592 1464 S 0.0 0.1 0:07.04 85m /usr/sbin/httpd
Top (по крайней мере, в некоторых версиях) вычисляет SWAP для каждого процесса как VIRT - RSS вместо того, чтобы сообщать о реальном использовании свопа. Под Linux результат - совершенно бессмысленное число.
Столбец SWAP в top
вычисление (примерно) использование процесса подкачки и любой сопоставленный файл и / или общие объекты, используемые этим процессом. Сопоставленные файлы не являются частью замена, это файлы, считываемые процессом определенным образом, а общие объекты - это динамические библиотеки (.so) или блоки памяти, совместно используемые процессами.
Поэтому, если два процесса совместно используют большой кусок памяти, он будет учитываться дважды в top
один раз для каждого процесса. Этот фрагмент памяти (если имеется достаточно свободной памяти и если он активен) может не находиться в свопе. Этот фрагмент памяти «зарезервирован» для процесса, это также не означает, что он используется полностью, поэтому он не обязательно занимает много физической памяти.
На странице руководства сказано: "SWAP рассчитывается путем вычитания физическая память из виртуальная память". На вычисленное значение не следует полагаться, если вы не разработчик (и не знаете, что делаете), для случайных пользователей это не имеет реального значения, см. Ниже, почему.
Примечание. VIRT означает виртуальную память.
Каждому процессу в Linux (и это тоже похоже на многие системы Unix) выделяется виртуальное адресное пространство. В 32-битной системе это виртуальное адресное пространство составляет до 4 ГиБ (2 ^ 32). В 64-битной системе. это виртуальное адресное пространство до 256 ТиБ (2 ^ 48 да, 64-битная базовая система с текущим расширением AMD64 или 64-битным Intel может только адрес 48 бит памяти).
Виртуальная память каждого процесса содержит пространство ядра и пространство пользователя. В 32-битной системе разбиение зависит от того, активирован PAE или нет, поэтому он может быть 3 ГБ / 1 ГБ или 2 ГБ / 2 ГБ. На 64-битной системе это всегда (AFAIK) половина / половина, поэтому первые 47 бит (128 ТиБ) предназначены для пользовательского пространства, а в конце 64-битной области 128 ТиБ зарезервировано для ядра.
Виртуальная память включает в себя код, данные и BSS запущенного процесса, а также стек и кучу, и область отображения памяти. Эта область содержит любую общую память (IPC, общие объекты), а также может содержать (AFAIK) отображаемый файл в памяти. Посмотри это хорошая графика, которую я сделал для 64-битной системы.
Можно сопоставить файлы, размер которых превышает доступную память, поэтому размер VIRT может быть больше, чем объем памяти. Ядро достаточно умен, чтобы загружать / выгружать данные из хранилища в память, чтобы ускорить ввод-вывод настолько, насколько позволяет доступная физическая свободная RAM.
Вам как пользователю не нужно заботиться о размере VIRT. Это в основном предназначено для разработчиков (жесткого ядра).
В заключение, столбец SWAP вычисляет виртуальную память минус физическая память (скорее всего, RSS), это, вероятно, будет включать в себя используемую часть подкачки и любой сопоставленный файл, который также находится на диске.