Puncte:0

Ce ar putea cauza solicitări blocate în IIS?

drapel gl

Folosesc IIS pe Windows Server 2016 cu MySQL și PHP pe două servere aproape identice. Am observat recent o încetinire pe unul dintre cele două servere ale mele, dar aceasta se întâmplă numai atunci când site-ul meu încearcă să execute mai multe instanțe ale unui script în același timp. Se pare că se blochează unul pe celălalt.

Un exemplu perfect este pagina mea de căutare. Când utilizatorul introduce o interogare de căutare, cu fiecare tastare (după a doua literă) o căutare este executată atâta timp cât există o întârziere de cel puțin 200 ms de la ultima apăsare de tastă. Deci, dacă tastați rapid, face o singură căutare la sfârșit, dar pentru cei care scriu mai lenți (cei care așteaptă mai mult de 200 ms între apăsări de taste), acest lucru va declanșa mai multe apeluri la rezultatele căutării. Vedeți această captură de ecran.

SERVER RĂU introduceți descrierea imaginii aici

Observați toate cererile în așteptare și în această captură de ecran prima tocmai s-a terminat la 19.08 secunde. Evident, mult prea lung. Până când s-au terminat, au trecut cu mult peste 15 secunde pentru a returna un set de rezultate simplu.

SERVER RĂU introduceți descrierea imaginii aici

Rețineți că aceste interogări durează doar o fracțiune de secundă atunci când sunt executate în MySQL Workbench și, de asemenea, atunci când sunt executate pe celălalt server al meu, care nu suferă de această problemă. Vedeți în această captură de ecran (de la serverul bun) exact aceeași căutare se întoarce într-un sfert de secundă.

SERVER BUN introduceți descrierea imaginii aici

Mi se pare că (pe serverul prost) nu sunt capabili să se execute simultan din anumite motive, deoarece dacă execut doar o singură căutare (prin tastând suficient de repede pentru a declanșa o singură căutare), aceasta revine rapid, dar dacă am executa multipli ca asta, toti se blocheaza ca intr-un ambuteiaj. Ce ar putea cauza asta?

Această captură de ecran următoare arată rezultatul dacă declanșez o singură căutare pe serverul prost. După cum puteți vedea, revine foarte repede. Deci problema este doar atunci când se execută simultan multipli ai aceluiași script.

SERVER RĂU introduceți descrierea imaginii aici

Am făcut câteva modificări la serverul prost recent, dar din câte îmi amintesc, singurele modificări pe care le-am făcut au fost să permită încărcările de fișiere mai mari.

  • În PHP am crescut post_max_size = 500M
  • În PHP am crescut upload_max_filesize = 500M
  • În IIS am crescut UploadReadAheadSize la 49152000
  • În IIS am crescut lungimea maximă permisă a conținutului la 300000000

Este posibil să fi făcut și alte modificări la acest server pe care nu le amintesc.

REPARAT TEMPORAR

Pot atenua această problemă permițând o întârziere mai mare între apăsarea tastelor în timpul căutării și am făcut acest lucru, crescând-o la 800 ms, astfel încât chiar și cei care tastează încet să nu vadă această problemă, dar aceasta este doar o soluție de bandă și nu o face. abordează problema de bază care afectează și alte zone ale site-ului meu.

CE AM ÎNCERCAT

Până acum am confirmat că configurația mea IIS, configurația MySQL (my.ini) și configurația mea PHP (php.ini) sunt toate identice în toate privințele care contează pe ambele servere (cel puțin în măsura în care mi se pare evident) . De asemenea, am confirmat că instrucțiunile select pe care le rulez în această căutare funcționează la fel de bine pe ambele servere dacă le execut în MySQL Workbench. Numai în aplicația mea web am această problemă.

Am anulat temporar cele două modificări pe care le-am făcut la IIS pentru încărcările de fișiere mai mari pentru orice eventualitate, dar asta părea să nu facă nicio diferență.

De asemenea, am descărcat și instalat LeanSentry, care mă avertizează o dată sau de două ori pe zi că site-ul meu a văzut solicitări blocate, ceea ce presupun că este exact ceea ce văd aici, dar, din păcate, LeanSentry poate identifica doar sursa problemei cu ASP. pagini, nu PHP. Deci, în esență, îmi confirmă doar că există o problemă, dar nu mă poate ajuta dincolo de asta.

ALTE SIMPTOME

Văd probleme similare dacă deschid mai multe rapoarte simultan. Dacă permit unui raport să se termine încărcarea înainte de a-l deschide pe următorul, toate se încarcă rapid, dar dacă forțez aplicația mea să deschidă mai multe rapoarte simultan, toate se blochează.

Ce ar putea cauza această problemă de blocaj?

Wilson Hauck avatar
drapel jp
Postare de pe serverul FAST și SLOW, Cerere de informații suplimentare. Dimensiunea RAM, # nuclee, orice dispozitiv SSD sau NVME pe serverele MySQL? Postați pe pastebin.com și distribuiți linkurile. Din rădăcina dvs. de conectare SSH, rezultă text de: B) AFIȚI STARE GLOBALĂ; după minim 24 de ore UPTIME C) AFIȘAȚI VARIABILELE GLOBALE; D) AFIȚI LISTA COMPLETĂ DE PROCES; E) STARE; nu AFIȚI STARE, doar STARE; F) completați raportul www.MySQLTuner.pl (perl) sau similar. G) ARAȚI STARE INNODB MOTOR; pentru analiza de reglare a sarcinii de lucru a serverului pentru a oferi sugestii.
Wilson Hauck avatar
drapel jp
Este implicat motorul FEDERATED?
drapel gl
@WilsonHauck Nu, nu în acest caz. De fapt, m-am îndepărtat complet de mesele federate. Au cauzat prea multe probleme, după cum știți. :-)
Wilson Hauck avatar
drapel jp
Grozav. Un week-end bun să aveţi.
Puncte:0
drapel us

Cred că nu este serverul IIS, există probleme aici, fiecare lucru pe care îl căutați, solicitați un nou apel în codul dvs. și arată ca ceva din scriptul dvs. PHP durează mult timp.

De fiecare dată când trimiteți o nouă solicitare, blocați un nou PHP instant, iar când PHP rămâne fără instantanee, acesta se blochează.

Este greu să știi ce faci în fișierul PHP de căutare, dar cred că apelezi la un server SQL sau ceva pentru a căuta. Puteți încerca să comentați interogarea de căutare în interiorul codului și să faceți același test?

În momentul de față, cred că tot ce pot, sună ca și cum ai folosi ca o expresie regex sau o funcție similară în baza ta de date SQL și, când ai multe rânduri, este extrem de lent să faci un apel, de aceea se blochează mult.

Dar din nou, cred că atât de târziu știu rezultatul testului pe care ți-l spun.

drapel gl
Voi încerca să comentez un cod pentru a vedea dacă îl pot izola mai mult, dar așa cum am spus în OP-ul meu, apelurile de selectare sunt rapide dacă le rulez în MySQL Workbench sau dacă rulez doar o singură căutare.
Puncte:0
drapel gl

Se pare că randarea HTML a cauzat blocarea. Când rezultatele căutării mele erau lungi, browserul avea nevoie de mult timp pentru a reda toate codurile HTML și, în timp ce făcea asta, nu putea procesa următoarea solicitare.

Am rezolvat problema limitând rezultatele căutării la 50 de rânduri, așa că acum HTML-ul se redă aproape instantaneu și următoarea solicitare poate fi executată. Deci nu IIS a fost cel care a blocat solicitările, ci browserul.

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.