Puncte:1

Lucrătorii Apache MPM blocați în G (terminând cu grație) în creștere - „tabloul de bord este plin”

drapel us

Rulează MPM worker, Apache 2.4.46, Debian 9

Lucrătorii de finisare cu grație cresc în timp, nu par să termine vreodată. În cele din urmă, am rămas fără capacitate și primesc eroarea „tabloul de bord este plin”. Dacă repornesc apache, se eliberează.

Nu cred că are vreo legătură cu codul site-ului meu (php), deoarece multe dintre cererile suspendate sunt doar imagini pure GET, fără php implicat.

introduceți descrierea imaginii aici

<IfModule mpm_worker_module>
ServerLimit 500
StartServers       10
MinSpareThreads    50
MaxSpareThreads    100
    ThreadLimit          64
    ThreadsPerChild      64
    MaxRequestWorkers     500
    MaxConnectionsPerChild   0
</IfModule>

tablou de bord introduceți descrierea imaginii aici

exemplu g muncitori introduceți descrierea imaginii aici

apache peste săptămână, sloturile gratuite în scădere introduceți descrierea imaginii aici

introduceți descrierea imaginii aici

încercat cu menținerea în viață intermitent și oprit

introduceți descrierea imaginii aici

drapel us
Unde sunt acum este că mi-am dat seama că PID-ul blocat G afișat în starea Apache nici măcar nu rulează? > kill 21734 sh: 1: kill: Nu există un astfel de proces
Puncte:1
drapel jo

Când utilizați MPM worker, cererile sunt gestionate de firele de execuție care există în procese.

Din https://httpd.apache.org/docs/2.4/mod/worker.html

Un singur proces de control (părinte) este responsabil pentru lansarea proceselor copil. Fiecare proces copil creează un număr fix de fire de execuție de server, așa cum este specificat în directiva ThreadsPerChild, precum și un fir de execuție care ascultă conexiunile și le transmite unui fir de execuție de server pentru procesare atunci când ajung.

Pe Linux, un proces „conține” fire de execuție, adică un PID poate avea mai multe fire de execuție care partajează memoria (printre alte resurse) cu alte fire de execuție din acel PID.

De fapt, Linux îi pasă doar de „sarcini”, un proces fără mai multe fire este un PID cu un container de unu sarcină.

Când reîncărcați Apache cu grație, încheiați procesul de conținut. Ceea ce se întâmplă aici este că Apache face ca fiecare fir să aștepte până când toate firele din procesul care le conține, înainte de a reporni PID-ul containerului.

Deci, în cazul dvs., aveți un singur fir conținut în toate procesele din acea listă care este încă ocupat sau blocat cumva.

Ai câteva opțiuni.

  1. Renunță oricum să mai aștepți și repornește.
  2. Găsiți firul cu probleme (ar putea fi o eroare în aplicație) și remediați-l.

1, este ușor. Adăugați opțiunea de configurare GracefulShutdownTimeout cu o valoare mare dar nu stupidă. Spune 900 de secunde. În mod implicit, acesta este infinit, ceea ce înseamnă că firele dvs. așteaptă pentru totdeauna până când firul cu probleme să se termine.

Principalul dezavantaj al acestui lucru este că întâmpinați șansa de a lovi un proces în mijlocul unei activități critice -- care terminarea ar putea, la rândul său, să corupă un fișier sau să rupă subtil aplicația. Aveți, de asemenea, o șansă (disparabil de mică) de a rezilia un client la jumătatea procesării.

2, vă va implica să identificați firul care este blocat în lista de lucrători și apoi să diagnosticați ceea ce face conexiunea, dar veți găsi ceea ce ar putea fi un defect de design și puteți explica comportamentul cu mai multă încredere înainte de a sufla. îndepărtați un fir cu probleme.

drapel us
În primul rând, vă mulțumesc pentru răspuns, unele (mai multe sarcini pe pid) din ceea ce spuneți sunt legate și au sens și mi-au dat câteva indicii, dar ceea ce spuneți despre repornirea cu grație a apache, nu cred că are legătură, deoarece GracefulShutdownTimeout afaik este legat doar de comportamentul apache. când lansați o repornire. Nu emit o repornire, problema mea se întâmplă doar în timp, nu se repornește. Totuși, ceea ce investighez sunt toate sarcinile cu același PID, poate că există un proces PHP în acea listă care este suspendat.
drapel us
Încă se întâmplă, m-am uitat peste PID-ul meu și nu există sarcini PHP în firele G blocate...deci nu sunt sigur ce se întâmplă, doar solicitări statice de imagini/de active care nu ies niciodată din finisare grațioasă
drapel us
Așa că mi-a venit ideea că apache server-status arată doar fișiere statice, nu activitatea php-fpm, ceea ce s-a dovedit a fi cazul, așa că am configurat starea php-fpm, astfel încât să pot vedea ce se întâmplă, așa cum se pare cel mai mult probabil că este ceea ce atârnă și, de asemenea, am configurat un jurnal lent pentru a-l prinde. https://gist.github.com/Jiab77/a9428050ab9bb3f17c5e33343da94fd8
drapel us
Deci, tot nu am avut noroc, am configurat monitorizarea procesului php și pid-ul nu este acolo, care este blocat în G și îmi dau seama că nici nu era nevoie să fac asta, deoarece aș fi putut doar să mă uit la lista proceselor care rulează pentru PID-ul blocat. ! Deci se pare că pid-ul fie nu rulează, dar apache crede că este, fie este într-o stare care îl face să nu apară în afișarea normală a procesului ???

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.