Управление на паметта в linux и openvz Colobridge WIKI
Продукти
Статии
Съдържание
управление на паметта в linux и openvz
Приложимост: Linux, OpenVZ Думи за търсене: памет, лимит
Статията все още не е завършена
Паметта е най-важният ресурс на сървъра. Обикновено администраторите разчитат на основните системни настройки, предоставени от разработчиците, но често това не е достатъчно.
Способността на администратора да навигира в аспектите на управлението на паметта зависи от производителността, стабилността и често от производителността на системите.
В тази статия се опитвам да опростя и накратко очертая най-важните точки за управление на паметта за системния администратор във връзка с използването на OpenVZ.
Моля, вижте съответната документация за подробности.
Разбирането на Linux Virtual Memory Manager (Mel Gorman) и Linux Kernel (Bovet, Cesati) описват подробно как работи Linux мениджърът на паметта.
Общи принципи на мениджъра на паметта
Подсистемата за виртуална памет разпределя паметта между задачи (процеси). Всяка задача (процес) счита, че й е разпределена непрекъсната част от паметта с максималния размер, поддържан на съответната архитектура (за архитектурата x86 това е 4 GB). От тях един гигабайт (само x86) е запазен за ядрото.
Основната организация на операционната система UNIX® (Linux) и единица за многозадачност епроцесът, уникално идентифицирана програма, която трябва да получи достъп до ресурсите на компютъра. Процесът е програмен код, който се манипулира от операционната система. Операционната система координира секциите с данни за процеса и определя средатаекзекуция.
Данните, свързани с даден процес, също са част от изображението на процеса. Някои от тях се съхраняват в регистри, обикновено представени от регистри на процесора. И има динамични области за съхранение на данни (купчина), разпределени на процеса в хода на работа, ако е необходимо.
Процесът също има стек в паметта, който се използва за съхраняване на локални програмни променливи и параметри за преминаване. Когато процесът извика функция или подпрограма, нов кадър се избутва в стека. Една част от всеки кадър е указател към основата на предишния кадър, което улеснява връщането от извикване на функция.
Количеството налична памет в Linux се определя от комбинираната стойност на RAM + суап (своп пространство на диска).
Всъщност програмата отнема само количеството памет, с което реално работи. По-голямата част от паметта съществува виртуално, но ще бъде предоставена на програмата в момента, в който тя осъществи достъп до тази област.
Ако няма повече свободни страници, но има суап файл, където ядрото може да премахне една от най-дълго неизползваните страници и да даде освободената физическа страница на процеса, който е поискал памет.
Ако няма нито неразпределено място във файла за виртуална памет, нито свободни RAM страници, тогава развитието на събитията може да бъде както следва: или процесът, изискващ памет, е прекъснат и „убит“ от системата, или някой друг процес (това се определя от специфични алгоритми) ще бъде „убит“ от ядрото и освободената памет ще бъде прехвърлена към процеса, изискващ памет.
Количеството памет в Linux се определя от комбинираната стойност на RAM + swap. Паметта за процеси се разпределя от този пул с помощта на езикови функции *alloc() 1)
Паметта се използва умерено, но ядрото се опитваизползва цялата памет, ако паметта не е заета от процеси, тогава ядрото я използва за буфериране на данни (кеширане). Един ценен ресурс не трябва да се мотае бездействащ.
Въпреки това, ядрото ви позволява да разпределите повече памет от RAM + swap. Това поведение на ядрото се нарича прекомерно ангажиране на паметта (прекомерно ангажиране ). Как е възможно това, без да се жертва устойчивостта? Например, изпълняват се няколко процеса на уеб сървър на apache. Приблизително 20-30% от паметта, разпределена за всеки процес на apache, е запазена, но не се използва и следователно може да бъде предоставена на други процеси. Алгоритъмът за използване на това пространство може да се контролира от параметрите на ядрото.
Можете да видите параметрите за използване на паметта във файловете: