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](https://i.stack.imgur.com/Kmbzs.png)
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](https://i.stack.imgur.com/bBQCr.png)
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](https://i.stack.imgur.com/LmRxc.png)
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](https://i.stack.imgur.com/UpY5E.png)
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?