Що таке своп-пам'ять?


26

Я використовую оперативну пам’ять для зберігання деяких моїх таблиць баз даних, а інші зберігаються на жорсткому диску.

Сьогодні я дізнався, що в моїх процесах використовується своп-пам'ять. Тепер, що таке своп-пам'ять і як я можу виявити, який процес використовує своп-пам'ять, і як я можу зупинити їх використання?


хіба немає способу дізнатися, що в яких процесах використовується своп-пам'ять ???

перегляньте диспетчер завдань Windows (або подібні інструменти) щодо кількості використовуваного файлу сторінки та помилок сторінки.

Зміна - це не процес, який стосується кожного процесу, це для всієї ОС. "vmstat" покаже вам інформацію про те, який обмін ви використовуєте.
jrockway

Я працюю на Linux, а не на wimdows

Отримали причину цього заміни ..... хтось намагався проаналізувати мій сайт ось чому цілий твір стався без будь-якої причини з нашої сторони. Дякую всім за ваші відповіді, це мені дуже допомогло як завжди :-)

Відповіді:


41

Якщо у вас не вистачає фізичної пам'яті, ви використовуєте віртуальну пам'ять, яка зберігає дані в пам'яті на диску. Читання з диска на кілька порядків повільніше, ніж читання з пам'яті, тому це сповільнює все вниз. (Обмін даними між реальною пам'яттю та віртуальною пам'яттю відбувається "заміною". Простір на диску "обмінюється простором".)

Якщо ваш додаток "використовує своп", то вам або потрібно використовувати менше пам'яті або купувати більше оперативної пам'яті.

(Зміна корисна тим, що додатки, які не використовуються, можуть зберігатися на диску, поки вони не будуть використані. Потім їх можна "перезавантажити" і запустити нормально знову. Хоча це не в пам'яті, однак ОС може використовувати цю пам'ять для чогось іншого, наприклад кеш-диска. Отже, це дуже корисна функція, але якщо у вас недостатньо фізичної пам’яті для запуску програми, вам, безумовно, потрібно більше пам’яті. На щастя, пам’ять дійсно дешева в ці дні.)


1
Задля правильності: віртуальна пам'ять означає використання адрес віртуальної пам’яті (те, що завжди ввімкнено в сучасному процесорі, незалежно від того, скільки наявної оперативної пам’яті у вас є) і не має прямого відношення до заміни (хоча вони використовуються в поєднанні, вони в основному різні поняття).
фортран

@fortran, для подвійної коректності віртуальна пам'ять - це термін, який Windows використовує, коли він посилається на файл підкачки (swap) .
sleblanc

7

Комп'ютер має певну кількість фізичної пам'яті. Але більшу частину часу ми хочемо більше. Таким чином ми поміняємо деяку кількість пам'яті на диск.

Кожен раз, коли нам потрібна ця пам'ять, її потрібно повернути назад в пам'ять (поміняючи якусь іншу частину). Існують надзвичайно розумні алгоритми, щоб мінімізувати затримку, але все ж іноді доводиться чекати.

У Windows, якщо ви подивитесь на диспетчер завдань, ви можете показати помилки сторінки стовпців. Це показує кількість часу, програма запитує частину пам'яті, яка була на диску, і її потрібно поміняти. Багато помилок сторінки = повільне застосування.

Цей процес використовується на декількох рівнях. Підсумок від швидкого до повільного:

  • На рівні процесора є регістри. Це найшвидша пам'ять, але кількість обмежена.
  • Також на процесорі є невеликий кеш пам'яті. Тут невеликий фрагмент запущеної програми зберігається для швидкого доступу. Шукайте за алгоритмами прогнозування галузей, якщо хочете дізнатися більше.
  • Іноді між процесором та основною пам'яттю є кеші рівня 2.
  • Наступний рівень - це основна пам'ять (ОЗП).
  • Останній рівень і найповільніший з усіх - це диск, іноді ви можете використовувати USB-накопичувачі як додаткову пам'ять.

3
cat /proc/pid/smaps

Якщо ви не хочете використовувати swap, тоді не використовуйте розділ swap (коментуйте рядок у /etc/fstab), але це не дозволить запустити новий процес і призведе до виходу з ладу malloc, якщо у вас закінчиться фізична пам'ять. Це взагалі не дуже гарна ідея ... не дуже безпечна і навіть не дуже корисна, оскільки ОС збереже гарячі сторінки в пам’яті та замінить на диск ті, які останнім часом не використовуються.

Іншим рішенням може бути зламати вашу базу даних, щоб вона заблокувала сторінки в пам’яті (я знаю, що це можна зробити, але я не могла точно сказати тобі, як), але все одно схоже, що ваша база даних використовуватиме власну заміну і механізми кешування

Щоб знати, що таке своп і як працює віртуальна пам'ять ... Я б рекомендував вам поглянути на деякі лекції з операційної системи, можливо, MIT Open Courseware може допомогти.


Оскільки конфігурація за замовчуванням у багатьох Linux-дистрибутивах - це перезавантаження пам’яті, «найгірше», що станеться, полягає в тому, що вбивця OOM почне снайперські процеси, швидше за все, починаючи з СУБД (і з таблицями, «збереженими в оперативній пам’яті», що, мабуть, не є корисним річ).
symcbean

1

Я частково знайшов відповідь. Пам’ять Swap - це простір на жорсткому диску вашого комп'ютера, який операційні системи використовуватимуть для розміщення інформації, яка є насправді в оперативній пам'яті, для звільнення її для іншого додатка. Це слід робити, коли системі потрібна пам'ять для нового процесу, а такої немає, тому ми можемо побачити, що якщо в нашій системі багато оперативної пам’яті, можливо, їй не знадобиться пам’ять SWAP.

ОНОВЛЕННЯ

Щоб дізнатись, де розміщувати простір (або віртуальну пам’ять), ви можете перейти до програми керування завданнями (CTRL + ALT + DEL) та увімкнути з VIEW -> COLUMNS -> VIRTUAL MEMORY. Тепер просто обчисліть різницю між використанням пам'яті та віртуальною пам'яттю. Також тут є інструкція, як побачити її, якщо ви працюєте з Vista: http://www.ehow.com/how_5067693_increase-swap-space.html


-1

Swap - це місце на жорсткому диску, яке використовується як оперативна пам'ять. Це (відносно кажучи) дуже повільно, але перешкоджає збоям комп'ютерів, коли вони намагаються обробити більше даних, а потім їх оперативна пам'ять може працювати.

Щоб зупинити процеси від використання swap - встановіть більше оперативної пам'яті.


1
Якщо ви не хочете будь-якої заміни, перестаньте використовувати файл сторінки. Але очікуйте інших проблем.

1
Це не. Swapping - це переміщення блоку даних з жорсткого диска у фізичну пам'ять. Одноразове читання, яке зазвичай досить швидко.

@xtofl у відповіді не згадували своп, просто поміняли розділ, а коментар gamecat не мав нічого спільного з тим, що ви сказали? : P
RapidWebs

-1

Якщо ви не хочете, щоб ваші процеси використовували своп-пам'ять, просто відключіть своп-пам'ять. На жаль, якщо у вас колись не вистачить пам’яті, ядро ​​Linux знищить деякі ваші запущені процеси, щоб звільнити деяку кількість пам’яті для використання.

Якщо у вас є достатня кількість оперативної пам’яті для вашої системи, ви можете фактично перейти без заміни пам’яті.

У мене ноутбук із 768 Мб оперативної пам’яті, який не використовує своп-пам’ять. Це досить добре для моїх потреб. У мене є сервер з 256 Мб оперативної пам’яті і не використовує своп-пам'ять. На ньому працює 8 віртуальних серверів, що використовують і віртуалізацію OpenVZ, і без проблем.

Отже, від вас залежить, якщо вам потрібна своп-пам'ять.


ЯК ти працюєш 8 ВМ на машині з лише 256 мегабайтами оперативної пам’яті?!?
warren

З VZ це можливо, оскільки оперативна пам'ять не повністю розділена, оскільки загальні бібліотеки поділяються між VM, або щось таке, що впливає. Отже, 8 x 64M не обов'язково 512M. :)
sybreon

проте - як стабільно працює базовий пристрій?
warren

Замінюючи неактивні програми, ви маєте більше пам'яті для кешування файлів. І це прискорює справи. це одноразове читання, як правило, досить швидко і в цілому має незначний ефект. він не використовується лише, коли ви виходите за межі відповідно до наявної оперативної пам’яті. Я бачив машини з 16 ГБ оперативної пам’яті, які часом використовують SWAP.
RapidWebs

крім того, я б не рекомендував відключати SWAP на сервері баз даних. Його клієнти чи веб-додаток не будуть дуже задоволені, коли OOM вбиває бек-енд упродовж простої нічної операції з резервного копіювання чи щось подібне? було б розумніше налаштувати кеш бази даних стосовно використання програми та наявної пам'яті. якщо він вже міняється, йому або потрібно більше оперативної пам’яті, або краще налаштувати свій сервер БД. в іншому випадку, відключення SWAP примушує OOM вбивати сервер БД кожного разу, коли він переходить на заміну. що судячи з його питання, часто.
RapidWebs
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.