Optimize Apache pentru utilizarea cu WordPress

5 apr. 2011, 03:34:32
Vizualizări: 6.19K
Voturi: 10

Salutări,

Am un site WordPress cu peste 150.000 de vizualizări pe zi.

Rulează pe un procesor Intel Core i5 760 @ 2.80GHz, cu CentOS și 4 GB de RAM.

Problema este că WordPress consumă prea multă memorie RAM și după un timp serverul se supraîncarcă și memoria se epuizează. Am încercat multe ajustări în Apache dar nimic nu pare să funcționeze. După ce repornesc Apache, site-ul rulează fără probleme, dar după una sau două ore se supraîncarcă din nou.

Aveți vreo sugestie care m-ar putea ajuta?

Apropo, folosesc WP-Super Cache.

ACTUALIZARE: Informații suplimentare

Iată lista mea de plugin-uri:

  • Akismet
  • Contact Form 7
  • Domain Mirror
  • Faster Image Insert
  • IntenseDebate
  • Role Manager
  • SexyBookmarks
  • Smart Youtube
  • Star Rating for Reviews
  • Thumbnail For Excerpts
  • WP-Polls
  • WP-SWFObject
  • WP Super Cache

În ceea ce privește ajustările, am încercat câteva sfaturi de aici

Setările mele sunt:

<IfModule prefork.c>
  StartServers       8
  MinSpareServers    5
  MaxSpareServers   20
  ServerLimit      256
  MaxClients       200
  MaxRequestsPerChild  1000
</IfModule>

<IfModule worker.c>
  StartServers       2
  MaxClients         150
  MinSpareThreads     25
  MaxSpareThreads    75
  ThreadsPerChild     25
  MaxRequestsPerChild  1000
</IfModule>

Timeout 120
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 2

De asemenea, iată fișierul meu my.cnf

[mysqld]
set-variable=local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Implicit se folosește formatul vechi de parolă pentru compatibilitate cu clienții mysql 3.x
# (cei care folosesc pachetul de compatibilitate mysqlclient10).
old_passwords=1

# Dezactivarea link-urilor simbolice este recomandată pentru a preveni diverse riscuri de securitate;
# pentru a face acest lucru, decomentați această linie:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

ACTUALIZARE

Iată utilizarea curentă a memoriei:

ps -ylC httpd --sort:rss

S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S   504  8446  8444  0  78   0  7884 59507 554050 ?        00:00:00 httpd
[... cod continuă ...]
S   504 22354  8444  0  75   0 62124 93962 -      ?        00:00:00 httpd

Aceasta schimbă ceea ce mi-ați recomanda?

4
Comentarii

Întotdeauna bine să menționezi ce alte plugin-uri rulezi, precum hărți site XML, chestii SEO, scanare malware, postări înrudite etc., pot să-ți omoare serverul.

Wyck Wyck
5 apr. 2011 03:38:15

+1 la ce a spus @Wyck. Aproape toate problemele de performanță și memorie pe care le văd sunt rezultatul unui plugin care nu se comportă corespunzător.

MikeSchinkel MikeSchinkel
5 apr. 2011 03:47:33

Poți să enumere și ajustările Apache pe care le-ai încercat și conținutul fișierului tău my.cnf și httpd.conf. O problemă comună cu Apache este setarea cererilor maxime și a cererilor maxime per copil prea mare, iar acestea nu se închid niciodată și doar consumă RAM.

Chris_O Chris_O
5 apr. 2011 03:53:33

După cum a spus @Anu mai jos, Max Clients și MaxRequestPerChild sunt probabil setate prea mari. Încearcă să reduci Max Clients la 125 și MaxRequestPerChild la aproximativ 500. De asemenea, schimbă MaxKeepAlive requests la aproximativ 50 și reduce Timeout la 15 sau 20.

Chris_O Chris_O
6 apr. 2011 08:29:59
Toate răspunsurile la întrebare 4
3

Souljacker,

Aș începe prin a analiza pluginurile tale. Star Ratings for Reviews nu a fost actualizat de peste 3 ani și pare să fie foarte solicitant pentru baza de date. Am observat câteva interogări SQL brute cu INNER JOINS care par problematice.

Pe partea de server, ar trebui să implementezi caching la nivel de obiecte. APC este standardul de facto și va oferi cele mai bune rezultate.

Odată ce ai instalat APC, treci la W3 Total Cache sau Mark Jaquith's APC Object Cache Backend pentru a profita la maxim de el.

Setările tale din httpd.conf par în regulă. Însă, din câte se vede în my.cnf, nu exploatezi caching-ul pentru interogări MySQL, caching-ul pentru fire de execuție sau controlul dimensiunilor bufferelor.

Poți folosi un script de optimizare pentru a te ajuta cu configurația my.cnf. Eu prefer să folosesc mysqltuner, iar tuning primer este de asemenea foarte bun.

Mysqltuner va oferi sugestii și câteva indicații despre ce să ajustezi în funcție de utilizarea bazei tale de date.

Pe serverul meu cu 12G RAM, setările arată astfel. (Doar un exemplu, nu folosi aceste setări!!!)

key_buffer              = 512M
max_allowed_packet      = 32M
thread_stack            = 1M
thread_cache_size       = 128M

myisam-recover         = BACKUP
max_connections        = 60
table_cache            = 5000
table_definition_cache = 1024
thread_concurrency     = 16

# * Configurare Cache pentru Interogări

query_cache_type        = 1
query_cache_limit       = 4M
query_cache_size        = 48M
max_heap_table_size     = 512M
tmp_table_size          = 512M
join_buffer_size        = 3M
sort_buffer_size        = 8M
read_buffer_size        = 8M
read_rnd_buffer_size    = 8M
myisam_sort_buffer_size =16M


log_slow_queries        = /var/log/mysql/mysql-slow.log
long_query_time = 1

După cum au menționat și alții, rularea Nginx va reduce drastic încărcarea serverului tău, dacă ești dispus să te ocupi de configurații etc. Am scris un tutorial despre cum să instalezi și să configurezi Apache cu Nginx ca reverse proxy.

Sper că acest lucru te ajută.

5 apr. 2011 12:13:09
Comentarii

wp-supercache suportă acum și utilizarea APC ca cache de obiecte - totuși, atât pentru w3 total cache cât și pentru wp-supercache am observat un comportament ciudat în ceea ce privește caching-ul de obiecte, mai ales în contextul utilizatorilor autentificați. Nu sunt sigur dacă este ceva specific site-ului meu, dar fiți atenți la acest aspect și testați în detaliu!

anu anu
5 apr. 2011 12:15:24

de asemenea, deși mysqltuner (și instalarea mtop) sunt utile, cea mai mare îmbunătățire a performanței am obținut-o prin activarea logării interogărilor lente și apoi folosind EXPLAIN pentru a înțelege de ce anumite interogări erau lente.

anu anu
5 apr. 2011 12:17:28

Puncte foarte bune. Am uitat să menționez logurile pentru interogările lente. Tuning primer vă va spune să le activați dacă nu le folosiți deja.

Chris_O Chris_O
5 apr. 2011 12:21:03
7

Aruncă o privire aici: Sfaturi de performanță pentru o bază mare de utilizatori - este un set util de lucruri de analizat care merg dincolo de doar Apache.

Când încerci să optimizezi performanța, este destul de important să analizezi întreaga infrastructură pentru a vedea unde ai probleme - de exemplu, pentru unul dintre site-urile mele am urmărit în cele din urmă o problemă care inițial părea a fi una legată de Apache (Apache rămânea fără memorie sub o sarcină medie) până când am descoperit un query SQL lent care a fost rezolvat prin adăugarea unui index suplimentar la tabela de comentarii.

De asemenea, instalează APC sau alt cache de op-code pentru PHP.

[Actualizare]

Este foarte probabil ca setarea ta MaxClients să fie prea mare - dacă toate cele 200 de procese sunt active și dacă ele utilizează în medie aproximativ 20MB per proces, asta înseamnă cei 4GB epuizați, fără a lua în calcul MySQL și toate celelalte procese. Reduce setarea MaxClients și continuă să investighezi unde este problema ta reală.

Poți verifica câtă memorie utilizează fiecare proces Apache cu această comandă:

ps -ylC httpd --sort:rss

(înlocuiește httpd cu apache2 dacă folosești Ubuntu)

5 apr. 2011 10:27:34
Comentarii

votează pentru xcache în loc de APC, dar strict versiunea 1.3.x+

petermolnar petermolnar
5 apr. 2011 10:44:40

APC este cea mai bună alegere. Întrece xcache în toate testele mele și, în plus, va fi inclus în PHP.

Chris_O Chris_O
5 apr. 2011 11:47:15

da, din benchmark-urile pe care le-am văzut, diferența dintre APC și alți acceleratori de op-code este destul de mică, așa că ușurința de instalare și faptul că APC este pe cale să devină parte din distribuția PHP (cu PHP6) contează mai mult pentru mine, dar lucrul important este să instalați unul dintre ele!

anu anu
5 apr. 2011 11:57:06

Privind în Plesk, văd DOAR Apache care folosește excesiv memoria. Restul sistemului utilizează memorie destul de redusă.

Souljacker Souljacker
5 apr. 2011 17:18:10

@souljacker nimeni nu sugerează că MySQL în sine folosește prea multă memorie (este foarte probabil că va trebui chiar să crești memoria disponibilă pentru acesta). Dar, dacă ai citit ce am scris, interogările SQL lente pot fi o cauză a problemelor OOM ale Apache, deoarece procesele Apache se adună în așteptare pentru răspunsul MySQL, astfel încât sunt lansate mai multe procese. Asta nu înseamnă că aceasta este problema ta - va trebui să faci o investigație pentru a afla unde este problema.

anu anu
5 apr. 2011 18:08:08

Am instalat APC. Asta e tot? Doar instalez sau trebuie să configurez ceva? Nimic nu pare să se fi schimbat

Souljacker Souljacker
5 apr. 2011 20:10:37

Poți accesa apc_display.php? Ai citit documentația APC? De asemenea, nu este doar vorba despre instalarea APC - ai citit răspunsul meu și celelalte răspunsuri? Probabil nu vei primi un singur răspuns care să rezolve problemele tale - va trebui să investighezi mai departe.

anu anu
6 apr. 2011 08:04:49
Arată celelalte 2 comentarii
5

Comparați Nginx și Apache și faceți o alegere:

Tocmai am trecut de la Apache la Nginx și a durat aproximativ 10 minute:

  1. descărcați/instalați Nginx (wget / yum install / apt-get / ...)
  2. modificați fișierul de configurare al nginx pentru a indica către directorul web (vezi exemple http://kbeezie.com/view/nginx-configuration-examples/ )
  3. porniți nginx

gata.

Am trecut și la php-fpm în același timp, lucru care a durat aproximativ 20 de minute:

  1. descărcați php
  2. configurați cu librăriile necesare (de ex. suhosin) (sau modificați codul c cu propriile mesaje personalizate) (nu uitați să eliminați extensiile specifice Apache și să includeți zlib pentru instalarea/despachetarea plugin-urilor wp din interiorul wp)
  3. configurați/compilați php
  4. modificați fișierul de configurare nginx pentru a include apelurile php-fpm
  5. porniți php-fpm și reporniți nginx

gata

(adăugând fișierele de pornire /etc/init.d unde este necesar)

Nu am efectuat teste de performanță personal, doar am urmat orbește "restul lumii"

În afara domeniului acestui răspuns: De asemenea, plănuiesc să renunț la MySQL și să folosesc MariaDB (GPL) în loc.

5 apr. 2011 08:43:03
Comentarii

Ai putea obține un Apache ușor doar prin configurarea corespunzătoare. Nu mă înțelege greșit, Nginx sau orice alt server web ușor ca lighthttpd sunt grozavi. Sfatul meu este să folosești Apache pentru conținut dinamic și Nginx/lighthttpd pentru conținut static.

Roman Roman
5 apr. 2011 10:14:59

cel mai bine ar fi dacă WordPress ar fi rescris în servlete C 😊 În privința conținutului dinamic/static: sunt uluit de cele 1000 de postări de blog pe zi despre diferențe și vreau doar să mențin un singur server web, mai ușor.

edelwater edelwater
5 apr. 2011 10:25:04

Sunt de acord cu tine aici. Menținerea unui singur server web este încă mai ușoară decât a două. Dar în loc să arunci Apache și să instalezi un nou server web doar pentru că este "mai rapid" în configurația implicită, nu este chiar soluția.

Roman Roman
5 apr. 2011 10:48:26

@Roman Wünsche poate ai putea să împărtășești câteva sfaturi despre cum să obții o configurație ușoară pentru Apache care să depășească performanța nginx?

anu anu
5 apr. 2011 12:10:23

@Roman Wünsche Exact asta încerc să fac, dar nu a funcționat încă

Souljacker Souljacker
5 apr. 2011 20:03:22
2

Lucrul cu configurațiile prefork și Worker poate fi complicat, modificarea unor valori poate contribui cu siguranță la creșterea performanței și reducerea utilizării RAM, de asemenea, rețineți că Apache rezervă o anumită cantitate de memorie RAM, ceea ce nu înseamnă că memoria RAM este pe terminate. Consultați acest articol pentru cele mai bune sfaturi de optimizare.

15 ian. 2014 13:14:29
Comentarii

Răspunsurile care conțin doar link-uri sunt considerate de calitate scăzută. Te rugăm să le folosești doar pentru a demonstra că afirmațiile tale sunt susținute de altcineva. Include-le în răspunsul tău.

kaiser kaiser
15 ian. 2014 14:04:35

Link-ul este stricat, poți să îl actualizezi, te rog?

JorgeM JorgeM
5 apr. 2023 14:18:15