PHP-FPM тохиргоо: хамгийн их гүйцэтгэлтэй байхын тулд pm static ашиглана уу

PHP-FPM тохиргоо: хамгийн их гүйцэтгэлтэй байхын тулд pm static ашиглана уу

Энэ нийтлэлийн засварлаагүй хувилбарыг анх нийтэлсэн haydenjames.io мөн түүний зөвшөөрөлтэйгээр энд нийтэлсэн зохиогч нь.

Дамжуулах чадварыг нэмэгдүүлэх, хоцролтыг багасгах, CPU болон санах ойг илүү тогтвортой ашиглахын тулд PHP-FPM-ийг хэрхэн тохируулах талаар товчхон хэлье. Анхдагч байдлаар, PHP-FPM дахь PM (процессын менежер) мөр нь байна динамик, хэрэв танд хангалттай санах ой байхгүй бол суулгах нь дээр эрэлт. php.net баримт бичигт суурилсан хяналтын 2 сонголтыг харьцуулж үзээд миний дуртай сонголт тэднээс юугаараа ялгаатай болохыг харцгаая. статик их ачаалалтай бол pm:

pm = динамик - хүүхэд процессуудын тоог дараах зааврын дагуу динамикаар тохируулна. pm.max_children, pm.start_servers,pm.min_spare_servers, pm.max_spare_servers.
pm = эрэлт - процессууд нь эрэлт хэрэгцээний дагуу үүсдэг (үйлчилгээ эхлэх үед pm.start_servers ажиллаж байх үед динамик үүсгэхээс ялгаатай).
pm = статик - хүүхдийн процессуудын тоо тогтмол бөгөөд параметрээр тодорхойлогддог pm.max_children.

Дэлгэрэнгүйг үзнэ үү php-fpm.conf дэлхийн удирдамжийн бүрэн жагсаалт.

PHP-FPM процессийн менежер болон CPU давтамж хянагч хоёрын ижил төстэй байдал

Энэ нь сэдвээс гадуур мэт санагдаж болох ч би үүнийг PHP-FPM тохиргооны сэдэвтэй холбох гэж байна. Зөөврийн компьютер, виртуал машин эсвэл тусгай сервер дээр ядаж нэг удаа процессор удааширч байгаагүй хүн. CPU давтамжийн масштабыг санаж байна уу? Эдгээр сонголтуудыг ашиглах боломжтой nix болон Windows нь процессорын тохируулагчийн тохиргоог өөрчилснөөр системийн гүйцэтгэл болон хариу үйлдлийг сайжруулж чадна эрэлт тухай гүйцэтгэл*. Энэ удаад тайлбаруудыг харьцуулж, ижил төстэй байдлыг харцгаая.

захирагч=хүсэлт - одоогийн ачааллаас хамааран процессорын давтамжийн динамик масштаб. Хамгийн их давтамж руу хурдан үсэрч, дараа нь идэвхгүй байх үе нэмэгдэх тусам үүнийг багасгадаг.
захирагч=консерватив= одоогийн ачааллаас хамааран динамик давтамжийн хуваарь. Давтамжийг эрэлт хэрэгцээнээс илүү жигд нэмэгдүүлж, бууруулдаг.
Засаг дарга = гүйцэтгэл - давтамж нь үргэлж хамгийн их байдаг.

Дэлгэрэнгүйг үзнэ үү процессорын давтамж зохицуулагчийн параметрүүдийн бүрэн жагсаалт.

Ижил төстэй байдлыг харж байна уу? Үүнийг ашиглах нь хамгийн зөв гэдэгт итгүүлэхийн тулд би энэ харьцуулалтыг харуулахыг хүссэн pm статик PHP-FPM-д зориулсан.

Процессорын зохицуулагчийн параметрийн хувьд гүйцэтгэл Энэ нь серверийн CPU хязгаараас бараг бүхэлдээ хамааралтай тул гүйцэтгэлийг аюулгүйгээр нэмэгдүүлэхэд тусалдаг. Үүнээс гадна мэдээжийн хэрэг температур, батерейны цэнэг (зөөврийн компьютерт) болон процессорыг 100% байнга ажиллуулах зэрэг сөрөг нөлөөллүүд бас бий. Гүйцэтгэлийн тохиргоо нь процессорын хамгийн хурдан ажиллагааг баталгаажуулдаг. Жишээ нь, тухай уншина уу Raspberry Pi дээрх force_turbo параметр, үүний тусламжтайгаар RPi самбар нь зохицуулагчийг ашиглах болно гүйцэтгэл, CPU-ийн цагийн хурд бага байгаагаас гүйцэтгэлийн сайжруулалт илүү мэдэгдэхүйц байх болно.

Хамгийн их серверийн гүйцэтгэлд хүрэхийн тулд pm static ашиглана уу

PHP-FPM сонголт pm статик сервер дээрх сул санах ойноос ихээхэн хамаардаг. Хэрэв санах ой бага бол сонгох нь дээр эрэлт буюу динамик. Нөгөөтэйгүүр, хэрэв танд санах ой байгаа бол pm-г тохируулснаар PHP процессын менежерийн ачааллаас зайлсхийх боломжтой статик серверийн багтаамжийг дээд зэргээр нэмэгдүүлэх. Өөрөөр хэлбэл, бүх зүйл сайн тооцоолсон бол та тогтоох хэрэгтэй pm.static гүйцэтгэж болох PHP-FPM процессуудын хамгийн их хэмжээгээр, санах ой багатай эсвэл кэштэй холбоотой асуудал үүсгэхгүй. Гэхдээ тийм ч өндөр биш бөгөөд энэ нь процессоруудыг дарж, гүйцэтгэхийг хүлээж буй олон тооны PHP-FPM үйлдлүүдийг хуримтлуулдаг..

PHP-FPM тохиргоо: хамгийн их гүйцэтгэлтэй байхын тулд pm static ашиглана уу

Дээрх дэлгэцийн агшинд сервер байна pm = статик ба pm.max_children = 100, мөн энэ нь боломжтой 10-аас ойролцоогоор 32 ГБ эзэлнэ. Тодруулсан баганууд дээр анхаарлаа хандуулаарай, энд бүх зүйл тодорхой байна. Энэ дэлгэцийн агшинд Google Analytics дээр ойролцоогоор 200 идэвхтэй хэрэглэгч (60 секундээс дээш) байсан. Энэ түвшинд PHP-FPM хүүхдийн процессуудын ойролцоогоор 70% нь идэвхгүй хэвээр байна. Энэ нь одоогийн траффикаас үл хамааран PHP-FPM нь серверийн нөөцийн дээд хэмжээг үргэлж тохируулдаг гэсэн үг юм. Сул зогсолт нь хөдөлгөөний оргил үеийг хүлээж, шууд хариу үйлдэл үзүүлдэг. Та хүлээх хэрэггүй pm нь хүүхдийн процессуудыг үүсгэж, хугацаа дуусахад тэдгээрийг зогсоох болно pm.process_idle_timeout. Би утгыг маш өндөр болгосон pm.max_requestsУчир нь энэ нь PHP дээр санах ой алдагдаагүй ажиллаж байгаа сервер юм. Та суулгаж болно pm.max_requests = 0 Хэрэв та одоо байгаа болон ирээдүйн PHP скриптүүдэд бүрэн итгэлтэй байгаа бол статик. Гэхдээ цаг хугацааны явцад скриптүүдийг дахин эхлүүлэх нь дээр. Олон тооны хүсэлт тавь, учир нь бид шаардлагагүй pm зардлаас зайлсхийхийг хүсч байна. Жишээлбэл, наад зах нь pm.max_requests = 1000 - тоо хэмжээнээс хамаарна pm.max_children болон секундэд ирэх хүсэлтийн тоо.

Дэлгэцийн зураг нь тушаалыг харуулж байна Линукс дээд, u (хэрэглэгч) болон PHP-FPM хэрэглэгчийн нэрээр шүүсэн. Зөвхөн эхний 50 орчим процессыг харуулсан (би яг тооцоолоогүй), гэхдээ үндсэндээ дээд тал нь терминалын цонхонд тохирох шилдэг статистикийг харуулдаг. Энэ тохиолдолд %CPU-ээр эрэмбэлнэ. Бүх 100 PHP-FPM процессыг харахын тулд дараах тушаалыг ажиллуулна уу:

top -bn1 | grep php-fpm

Хэзээ pm ашиглах нь эрэлт хэрэгцээ болон динамик

Хэрэв та pm ашигладаг бол динамик, иймэрхүү алдаа гардаг:

WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children

Параметрийг өөрчилж үзээрэй, алдаа арилахгүй, гэх мэт Serverfault дээрх энэ нийтлэлд тайлбарласан. Энэ тохиолдолд pm.min утга нь хэтэрхий бага байсан бөгөөд вэб траффик нь маш их ялгаатай, өндөр оргил, гүн хөндийтэй байдаг тул pm-ийг зохих ёсоор тохируулахад хэцүү байдаг. динамик. Ихэвчлэн pm ашигладаг эрэлт, ижил нийтлэлд зөвлөсний дагуу. Гэхдээ энэ нь бүр ч дор юм, учир нь эрэлт ачаалал бага эсвэл огт байхгүй үед сул зогсолтын процессыг тэг болгож дуусгах ба та замын хөдөлгөөнийг өөрчлөх нэмэлт зардалтай хэвээр байх болно. Мэдээжийн хэрэг та асар их хүлээх хугацааг тогтоогоогүй бол. Тэгээд ашиглах нь дээр pm.static + өндөр тоо pm.max_requests.

PM динамик ялангуяа эрэлт Хэрэв танд олон PHP-FPM сан байгаа бол хэрэг болно. Жишээлбэл, та олон cPanel данс эсвэл өөр өөр бассейнд олон вэбсайт байршуулдаг. Надад 100 гаруй cpanel данс, 200 орчим домэйн бүхий сервер байгаа бөгөөд pm.static эсвэл бүр динамик нь намайг аврахгүй. Танд хэрэгтэй зүйл бол энд эрэлт, Эцсийн эцэст, вэбсайтуудын гуравны хоёроос илүү нь маш бага эсвэл огт урсгалгүй хүлээн авдаг эрэлт Хүүхдийн бүх процессууд унах бөгөөд энэ нь бидэнд маш их санах ойг хэмнэх болно! Аз болоход, cPanel хөгжүүлэгчид үүнийг анзаарч, утгыг анхдагч болгож тохируулсан эрэлт. Өмнө нь, анхдагч үед динамик, PHP-FPM нь завгүй хуваалцсан серверүүдэд огт тохиромжгүй байсан. Олонх нь ашигласан suPHP, учир нь pm динамик сул зогсолттой сан болон cPanel PHP-FPM данстай байсан ч санах ойг ашигладаг. Траффик сайн байвал та олон тооны PHP-FPM сан бүхий сервер дээр (хуваалцсан хостинг) байршуулахгүй байх магадлалтай.

дүгнэлт

Хэрэв та PHP-FPM ашиглаж байгаа бөгөөд таны ачаалал их байгаа бол менежерүүдийг боловсруулаарай эрэлт и динамик PHP-FPM-д зориулсан нэмэлт зардлын улмаас дамжуулах чадвар хязгаарлагдмал байх болно. Өөрийн системийг ойлгож, PHP-FPM процессуудыг серверийн хамгийн дээд хүчин чадлын дагуу тохируулаарай. Эхний багц pm.max_children хамгийн их pm хэрэглээнээс хамаарна динамик буюу эрэлт, дараа нь энэ утгыг санах ой болон процессор хэт ачаалалгүй ажиллах түвшинд хүртэл нэмэгдүүлнэ. Та үүнийг анзаарах болно pm статик, таны санах ойд бүх зүйл байгаа тул замын хөдөлгөөний огцом өсөлт нь цаг хугацааны явцад CPU-ийн огцом өсөлтийг үүсгэж, сервер болон CPU-ийн ачааллын дундаж түвшин буурах болно. PHP-FPM процессын дундаж хэмжээ нь вэб серверээс хамаардаг бөгөөд гараар тохируулах шаардлагатай байдаг тул процессын менежерүүд илүү автоматжсан байдаг. динамик и эрэлт - илүү алдартай. Нийтлэл хэрэгтэй байсан гэж найдаж байна.

DUP Жишиг график нэмсэн ab. Хэрэв PHP-FPM процессууд санах ойд байгаа бол тэдний сууж, хүлээж байгаа газарт санах ойн зарцуулалтаас болж гүйцэтгэл нэмэгддэг. Өөртөө хамгийн сайн сонголтыг олоорой.

PHP-FPM тохиргоо: хамгийн их гүйцэтгэлтэй байхын тулд pm static ашиглана уу

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх