аптымізацыя хуткасці працы сайта [Colobridge WIKI]

  1. задача:
  2. рашэнне:
  3. палёгку сістэмы
  4. Apache MPM
  5. Prefork MPM
  6. NGINX і Lighttpd
  7. LOGROTATE
  8. паскаральнікі інтэрнэту
  9. спасылкі:

Дастасавальнасць: Linux

Словы для пошуку:

задача:

Пры абмежаваных рэсурсах атрымаць максімальную прадукцыйнасць (даступнасць) сайта і ліквідаваць прычыну ўзнікнення памылкі «Can not allocate memory»

рашэнне:

Часам немагчыма зайсці ў кансоль сервера, у сістэмным часопісе паведамлення

Can not allocate memory: fork: Unable to fork new process

Праверце апошнюю калонку ў вывадзе каманды:

cat / proc / user_beancounters

Калі значэнне не роўна "0", то значыць ліміт перавышаны. Хутчэй за ўсё гэта будзе радок «privvmpages»

Калі ў вас фізічны сервер або выкарыстоўваецца віртуалізацыя KVM (XEN), то пры недахопе памяці працэсы пачынаюць выцясняцца ў павольную swap-памяць, гэта тармозіць працу працэсаў, запыты кліентаў становяцца ў чаргу, і так нагрузка зніжаецца сама сабой. Наяўнасць swap-памяці зніжае неабходнасць аптымізацыі сервера, хоць і не пазбаўляе ад гэтага. Але гэта не працуе на віртуалізацыі OpenVZ з ядром 2.6.18- * Больш свежае ядро ​​2.6.32 падтрымлівае псеўда swap (vswap), але яшчэ недастаткова стабільна. Мы спрабавалі яго выкарыстоўваць, але колькасць збояў у працы было занадта вялікім і мы вярнуліся да выкарыстання стабільнай версіі 2.6.18.

На OpenVZ swap-памяць гэтак жа выкарыстоўваецца пры недахопе памяці, але гэта працуе на ўзроўні майстар-машыны (Hardware Node) пры недахопе месцы для кантэйнераў.

Інтэнсіўнае выкарыстанне swap-памяці для майстар-машыны OpenVZ з'яўляецца аварыйным рэжымам які ніколі не павінен дапускацца. Пры гэтым праца кантэйнераў запавольваецца настолькі, што іх немагчыма выкарыстоўваць.

Праблема выяўляецца па паведамленнях у сістэмным часопісе са словамі Out of memory або Can not allocate memory

Часам недахоп памяці прыводзіць да немагчымасці зайсці ў кансоль сервера, няма вольнай памяці для гэтага.

Выканайце каманду vzubc і атрымаеце выснову падобны гэтаму:

vzubc

BEANS FOR UID 309 resource held maxheld barrier limit failcnt kmemsize 11.60 mb 311.37 mb 1200.00 mb 1320.00 mb 0 lockedpages 38.01 mb 40.08 mb 49.15 mb 49.15 mb 0 privvmpages 573.53 mb 3395.43 mb 3072.00 mb 3379.20 mb 463849

Калі на вашым серверы няма скрыпту vzubc можна выкарыстоўваць каманду:

cat / proc / user_beancounters

Гэты спосаб меней зручны таму што інфармацыя будзе сумессю уяўленняў з колькасці старонак памяці і байтаў.

Ёсць некалькі варыянтаў рашэння гэтай праблемы. У любым выпадку нам прыйдзецца абмежаваць спажыванне памяці вэбсервера і іншымі працэсамі.

палёгку сістэмы

Пачніце з адключэння непатрэбных сэрвісаў.

Даволі часта можна бачыць матляецца без справы дэман ftp. Ён спажывае трохі, але часам яго атакуюць і тады ён вельмі ахвотна пажырае памяць. І вырашыце навошта ён вам патрэбен у актыўным стане, можна яго ўключаць у выпадку неабходнасці, можна выкарыстоўваць sftp.

Адключыце непатрэбныя модулі apache. Толькі пераканайцеся, што яны вам не патрэбныя. Прынамсі, трэба праверыць працаздольнасць пасля змены параметраў і перазапуску сэрвісу.

Скрыпты збору статыстыкі тыпу Webalizer або AWstats - карысныя інструменты, але ці так яны патрэбныя вам? Яны здольныя вельмі моцна тармазіць сервер калі часопісы вялікія.

Apache MPM

Вэбсервер павінен адначасова апрацоўваць вялікая колькасць падлучэнняў і запытаў, што стварае асобныя патокі каманд і іншыя неабходныя элементы.

У сервера Apache2 мультипоточность рэалізаваная з дапамогай падлучальных модуляў шматструменнай апрацоўкі - MPM. Існуе дзве асноўных мадэлі MPM модуляў - гэта worker MPM і prefork MPM.

Вызначыць які модуль выкарыстоўвае ваш сервер можна камандай httpd -V або apache2 -V (у залежнасці ад аперацыйнай сістэмы).

Але можна абыйсціся і без гэтай праверкі.

У пераважнай колькасці выпадкаў выкарыстоўваецца prefork MPM

Worker MPM пры запуску стварае некалькі даччыных працэсаў, па некалькі патокаў у кожным (колькі менавіта маецца на ўвазе пад «некалькі» задаецца ў канфігурацыйным файле Apache.

У якасці перавагі дадзенага модуля ўказваецца паніжаны спажыванне памяці ў параўнанні з Prefork модулем. Гэты модуль рэкамендуецца для высока нагружаных вэб сервераў і практычна ніколі не выкарыстоўваецца на віртуальных серверах.

Prefork MPM пры запуску стварае некаторую колькасць даччыных працэсаў, але ў адрозненне ад Worker кожны працэс апрацоўвае толькі адно злучэнне. Cкорость абодвух модуляў сувымерная, Prefork спажывае больш памяці, але больш стабільны, менш крытычны да памылак вебприложений, не схільны да ўцечак памяці.

Prefork MPM рэкамендуецца выкарыстоўваць там, дзе адладка мультипоточных прыкладанняў не рэалізаваная на належным узроўні. Адладка мультипоточных прыкладанняў вельмі складаная і дарагая задача.

Prefork MPM

Вырашыць задачу можна шляхам налады лімітаў вэбсервера на колькасць злучэнняў. Гэта абмяжуе колькасць запуcкаемых копій працэсаў (форкі / fork).

Напрыклад ваша канфігурацыя (/etc/httpd/conf/httpd.conf) дазваляе адкрыццё да 1024 злучэнняў адначасова.

<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 1024 MaxClients 1024 MaxRequestsPerChild 4000 </ IfModule>

Кожнае злучэнне патрабуе асобнага працэсу вэбсервера. Кожны працэс httpd звычайна патрабуе 20-50Мб, а ў вас усяго 3072Мб і свабодных 2700Гб Таму я паставіў ліміт 100.

Гэта не значыць, што ваш сервер зможа абслугоўваць менш кліентаў. Пры недахопе памяці кліент атрымлівае абрыў сувязі і недаступнасць сервера, а пры спрацоўванні MaxClients кліент проста чакае пару секунд калі з'явіцца вольны працэс httpd.

Пры такім варыянце вы не губляеце кліентаў.

На самай справе гэта значэнне трэба старанна падбіраць дасведчаным шляхам назіраючы за лічыльнікам перавышэнняў і колькасцю вольнай памяці.

Мой варыянт канфігурацыі:

<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 2000 </ IfModule>

Я паменшыў значэнне MaxRequestsPerChild, гэта прадухіліць рост памеру працэсу ў памяці. Гэты параметр вызначае пасля якога колькасці запытаў працэс будзе адноўленая, што робіцца для выключэння уцечак памяці.

Але занадта часты перазапуск таксама патрабуе рэсурсаў.

Тут трэба шукаць кампраміс метадам падбору.

І давядзецца паназіраць за вынікам пасля кожнага змены.

Можаце выкарыстоўваць нагрузачныя тэсты тыпу apache benchmark, але яны няздольныя імітаваць рэальную працу вашага сайта.

NGINX і Lighttpd

Радыкальным метадам барацьбы з спажываннем памяці з'яўляецца выкарыстанне палегчаных сервераў NGINX або Lighttpd

Іх можна выкарыстоўваць двума спосабамі:

  1. Наогул выключыць apache2

  2. Выкарыстоўваць у якасці прамежкавага http-proxy для доступу да apache.

Першы варыянт выкарыстоўваецца калі вам не патрэбныя асаблівыя магчымасці спецыфічных магчымасцяў модуляў apache. Напрыклад аналага mod_secure для гэтых сервераў не існуе. Прыклад рэалізацыі першага спосабу вы знойдзеце па спасылцы ўнізе гэтага артыкула.

Калі без apache не абысціся, то выкарыстоўваецца 2-й варыянт. Запыты кліентаў прымае NGINX і перанакіроўвае іх дэману apache для апрацоўкі. Нягледзячы на ​​лішнюю службу гэты варыянт эканоміць памяць, бо колькасць падлучэнняў да apache абмежавана адным NGINX, а NGINX не разводзіць свае копіі.

Варта заўважыць, што не заўсёды 2-й спосаб дае чаканы эфект, але паспрабаваць варта.

LOGROTATE

На памер працэсу вэбсервера можа ўплываць памер сістэмнага часопіса. Часам часопіс вырастае да некалькіх дзесяткаў гігабайт. Працэс, спрабуючы выканаць запіс пра падзею, адкрывае гэты файл, што можа запатрабаваць вялікіх сістэмных рэсурсаў.

Праверце - як настроены ў вас дэман logrotate, ці эфектыўна ён апрацоўвае вашыя файлы логаў і апрацоўвае наогул?

Ці патрэбныя вам часопісы вэбсервера? Можа прасцей адключыць?

паскаральнікі інтэрнэту

Выкарыстоўвайце пошукавую службу для пошуку спецыялізаваных паслуг паскарэння доступу да вашага сайту. Ёсць дастаткова арганізацый спецыялізуюцца на аптымізацыі вэбсайтаў і абароне іх ад перагрузкі.

выкарыстоўвайце службы CDN (Сеткі дастаўкі (дыстрыбуцыі) кантэнту)

Прывяду некалькі прыкладаў

спасылкі:

Актуальнасць: 2011/11/03 09:39

Скрыпты збору статыстыкі тыпу Webalizer або AWstats - карысныя інструменты, але ці так яны патрэбныя вам?
Праверце - як настроены ў вас дэман logrotate, ці эфектыўна ён апрацоўвае вашыя файлы логаў і апрацоўвае наогул?
Ці патрэбныя вам часопісы вэбсервера?
Можа прасцей адключыць?