Dov'è la mia memory ?! Il server web front-end Nginx + PHP-FPM rallenta in una striscia di ricerca

Non sono sicuro se ho un problema con una perdita di memory (come suggerisce la mia società di hosting), o se entrambi abbiamo bisogno di leggere http://linuxatemyram.com . Forse gente intelligente può aiutarci?

Questo è un front-end webserver VM che funziona essenzialmente solo nginx & php-fpm su RHEL 5.5. Questo server sta alimentando Magento, una cosa eCommerce PHP. Il server è in esecuzione in un ambiente condiviso, ma lo stiamo cambiando presto.

  • Come utilizzare lo spazio di unità di workstation di riserva per l'archiviazione / il backup del server
  • override nginx access_log directive - duplica le voci di registro
  • Cosa consuma memory nel process java?
  • Richieste al secondo più lente quando si utilizza nginx per il bilanciamento del carico
  • Hai bisogno di separare ipv4 e ipv6 per ascoltare le direttive in nginx?
  • Imansible installare il module php-mysql
  • Ad each modo .. dopo un riavvio il server funziona bene, ma entro un giorno si sgretola nel nulla. Le pagine richiederanno letteralmente 2 minuti per caricare, spie CPU come pazzi, ecc. La console è persino lento quando ho SSH. È come il mio integer server viene portto in ginocchio.

    Ho anche monitorato il server DB tramite il traffico in entrata superiore e tcpdumping. Il DB rimane inattivo per una buona parte di quel tempo di "lento" carico. Quando inizio a vedere le query provenienti dal server front-end, la pagina viene caricata subito dopo.

    Ecco alcune statistiche dopo che mi accede a un rallentamento, dopo aver riavviato php-fpm:

    [mike@front01 ~]$ free -m total used free shared buffers cached Mem: 5963 5217 745 0 192 314 -/+ buffers/cache: 4711 1252 Swap: 4047 4 4042 [mike@front01 ~]$ top top - 11:38:55 up 2 days, 1:01, 3 users, load average: 0.06, 0.17, 0.21 Tasks: 131 total, 1 running, 130 sleeping, 0 stopped, 0 zombie Cpu0 : 0.0%us, 0.3%sy, 0.0%ni, 99.3%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 6106800k total, 5361288k used, 745512k free, 199960k buffers Swap: 4144728k total, 4976k used, 4139752k free, 328480k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 31806 apache 15 0 601m 120m 37m S 0.0 2.0 0:22.23 php-fpm 31805 apache 15 0 549m 66m 31m S 0.0 1.1 0:14.54 php-fpm 31809 apache 16 0 547m 65m 32m S 0.0 1.1 0:12.84 php-fpm 32285 apache 15 0 546m 63m 33m S 0.0 1.1 0:09.22 php-fpm 32373 apache 15 0 546m 62m 32m S 0.0 1.1 0:09.66 php-fpm 31808 apache 16 0 543m 60m 35m S 0.0 1.0 0:18.93 php-fpm 31807 apache 16 0 533m 49m 30m S 0.0 0.8 0:08.93 php-fpm 32092 apache 15 0 535m 48m 27m S 0.0 0.8 0:06.67 php-fpm 4392 root 18 0 194m 10m 7184 S 0.0 0.2 0:06.96 cvd 4064 root 15 0 154m 8304 4220 S 0.0 0.1 3:55.57 snmpd 4394 root 15 0 119m 5660 2944 S 0.0 0.1 0:02.84 EvMgrC 31804 root 15 0 519m 5180 932 S 0.0 0.1 0:00.46 php-fpm 4138 ntp 15 0 23396 5032 3904 S 0.0 0.1 0:02.38 ntpd 643 nginx 15 0 95276 4408 1524 S 0.0 0.1 0:01.15 nginx 5131 root 16 0 90128 3340 2600 S 0.0 0.1 0:01.41 sshd 28467 root 15 0 90128 3340 2600 S 0.0 0.1 0:00.35 sshd 32602 root 16 0 90128 3332 2600 S 0.0 0.1 0:00.36 sshd 1614 root 16 0 90128 3308 2588 S 0.0 0.1 0:00.02 sshd 2817 root 5 -10 7216 3140 1724 S 0.0 0.1 0:03.80 iscsid 4161 root 15 0 66948 2340 800 S 0.0 0.0 0:10.35 sendmail 1617 nicole 17 0 53876 2000 1516 S 0.0 0.0 0:00.02 sftp-server ... 

    C'è qualcos'altro che dovrei guardare, o altre informazioni che potrebbero essere utili? Sono solo uno sviluppatore, ma i rallentamenti su questo sistema mi preoccupano e rendono difficile fare il mio lavoro.

    Aiuto me, ServerFault!

    5 Solutions collect form web for “Dov'è la mia memory ?! Il server web front-end Nginx + PHP-FPM rallenta in una striscia di ricerca”

    Se qualcuno soffre di questo.

    Abbiamo appena sperimentato la stessa questione. Una perdita di memory in php5-fpm. La RAM è esaurita con each richiesta di pagine e alla fine esaurita. Poi la CPU entra in overdrive con il process KSWAP in esecuzione del disco di swap.

    l'unica cosa che ha fissato, anche se non l'installazione ideale è stato quello di cambiare il nostro file pool di http://www.conf

    pm = dinamico

    a

    pm = ondemand

    la memory ora sembra stabile.

    La prossima volta che il server rallenta, eseguire 'vmstat 1' e 'iostat 1', quindi riportre i risultati a noi.

    La mia ipotesi è che php5 sia appena aggiornato con il limite di memory predefinito di 128Mb e ci sono troppe istanze php5 in esecuzione (controlla pm.max_children nella tua configuration php-fpm).

    Quanto sopra è accaduto a mee, e ho tirato i capelli cercando di capirlo. Ho registrato un bugreport con ubuntu, ma suppongo che deve essere fissato upstream con php-fpm – i valori predefiniti avrei mangiare fino a 6 GB di RAM se fosse ansible. E sicuramente come l'inferno ha reso il mio server 1Gb inutile …

    Probabilmente non si dispone di una cache opcode installata sul server che causa la lentezza.

    Inoltre, come ha detto Marco, potrebbe essere in esecuzione un gran numero di istanze php-fpm sul sistema.

    Nel caso in cui si sospetta un problema di perdita di memory, installare estensione suhosin per php, che impedirà perdite di memory.

    In realtà se è una perdita di memory deve essere registrato nel registro degli errori di php, php.ini ha un'opzione per segnalare memleaks, report_memleaks = On

    Ecco due cose da controllare:

    1. Molto probabilmente hai una perdita di memory. pm.max_requests ucciderà / riavvia il process php-fpm child dopo aver gestito queste molte richieste. Poiché richiede circa un giorno per la tua casella di rallentare una ricerca per indexing, provare a impostare questo numero su un numero che provoca each sessanta minuti di resawn each process figlio. Quindi, se ottenete 200 richieste al minuto e avete 5 processi, impostate pm.max_requests a 800. Se non si desidera eseguire la math, un'impostazione tra 500 e 1000 potrebbe funzionare. Gioca in giro con esso per trovare un equilibrio tra il tempo perdere i processi di respawning vs perdere RAM sulla perdita di memory.

    2. Php-FPM potrebbe creare troppi processi figlio quando si verifica un picco di traffico, causando che esso esaurisca dalla RAM e inizia a scambiarsi su disco. Decidere quanto RAM totale assegnare a php-fpm, quindi dividere quella per quanto memory each process figlio prende. Per i forum basati su WordPress e PHP, vedo spesso each process di figlio che richiede 30-45 MB. Se utilizzi solo un pool php-fpm, impostare pm.max_children su quel numero.

    Se hai solo un pool di php-fpm, vedrai un aumento di velocità dall'impostazione di pm.type = static .

    Se hai più pool di php-fpm, forse perché stai ospitando più applicazioni e desideri isolarle per motivi di sicurezza, vuoi impostare pm.type = dynamic e giocare con start_servers , min_spare_servers e max_spare_servers . Basta essere sicuri che i cumulati max_children in tutte le piscine non è più che la tua casella può gestire.

    Se hai un elevato numero di applicazioni a basso traffico, ognuna con un proprio pool php-fpm, è meglio impostare pm.type=ondemand modo che each applicazione pm.type=ondemand solo le risorse quando viene effettivamente utilizzata. Impostare anche i pm.max_children ragionevolmente bassi in modo che nessuna applicazione possa superare completamente la scatola.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.