Beste Apache- und MySQL-Konfiguration für 16 GB und 8 Kerne

Beste Apache- und MySQL-Konfiguration für 16 GB und 8 Kerne

Ich habe Probleme mit meinen Servern. Ich habe eine Spitzenlast und die Serverlast ist sehr hoch.

Ich habe 3 Server, einen für das Frontend, einen für die Datenbank (MySQL) und einen für die Bereitstellung von Bildern (mit diesem kein Problem).

Hier sind meine aktuellen Konfigurationen und die durchschnittliche Auslastung für 1500 Besucher:

Server 1 (Frontend):

load average: 143.08, 120.50, 66.99
CentOS 6.3
Apache/2.2.15
8 x Intel(R) Xeon(R) CPU E5645  @ 2.40GHz
16GB RAM

httpd.conf

PidFile run/httpd.pid
Timeout 60
KeepAlive Off
MaxKeepAliveRequests 1000
KeepAliveTimeout 15

<IfModule prefork.c>
  ServerLimit       520

  StartServers           16
  MinSpareServers         5
  MaxSpareServers        20
  MaxClients            500
  MaxRequestsPerChild  1000
</IfModule>

<IfModule worker.c>
  ServerLimit           520

  StartServers           16 
  MaxClients            500
  MinSpareThreads        25
  MaxSpareThreads        75 
  ThreadsPerChild        25
  MaxRequestsPerChild     0
</IfModule>

ExtendedStatus On
UseCanonicalName Off
HostnameLookups Off

ErrorLog logs/error_log
LogLevel warn

ServerSignature On


IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully

Server 2 (MySQL my.cnf)

load average: 12.84, 23.39, 22.85
CentOS 6.4
MYSQL 5.5.34
8 x Intel(R) Xeon(R) CPU E5645  @ 2.40GHz
16GB RAM

meine.cnf

[mysqld]
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

max_connections = 2000

key_buffer = 384M
query_cache_type=1
query_cache_size=512M
query_cache_limit=4M

innodb_buffer_pool_size = 8G
slow_query_log=1
slow_query_log_file=log-slow-queries.log
thread_cache_size=8
table_cache=128k
tmp_table_size=256M
max_heap_table_size=256M

init_connect='SET collation_connection = latin1_swedish_ci'
init_connect='SET NAMES latin1'
character-set-server=latin1
collation-server=latin1_swedish_ci
skip-character-set-client-handshake

log-error=/var/log/mysqld.error.log

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

mysqltuner-Ausgabe

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.5.34-log
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------
[--] Status: +Archive -BDB -Federated +InnoDB -ISAM -NDBCluster 
[--] Data in InnoDB tables: 3G (Tables: 57)
[--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17)
[!!] Total fragmented tables: 57

-------- Security Recommendations  -------------------------------------------
[OK] All database users have passwords assigned

-------- Performance Metrics -------------------------------------------------
[--] Up for: 5h 11m 15s (4M q [241.514 qps], 537K conn, TX: 11B, RX: 2B)
[--] Reads / Writes: 87% / 13%
[--] Total buffers: 9.1G global + 2.8M per thread (2000 max threads)
[OK] Maximum possible memory usage: 14.5G (46% of installed RAM)
[OK] Slow queries: 1% (55K/4M)
[OK] Highest usage of available connections: 37% (756/2000)
[OK] Key buffer size / total MyISAM indexes: 384.0M/96.0K
[OK] Key buffer hit rate: 100.0% (46K cached / 0 reads)
[!!] Query cache efficiency: 0.0% (0 cached / 2M selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 480K sorts)
[OK] Temporary tables created on disk: 16% (112K on disk / 684K total)
[OK] Thread cache hit rate: 83% (87K created / 537K connections)
[OK] Table cache hit rate: 99% (2K open / 2K opened)
[OK] Open file limit used: 0% (19/264K)
[OK] Table locks acquired immediately: 100% (7M immediate / 7M locks)
[OK] InnoDB data size / buffer pool: 3.6G/8.0G

Anwendungsdetails

php 5.4 Symfony 1.2 Datenbankgröße: 6 GB

Kannst du mir helfen?

Antwort1

Das Hauptproblem, das ich hier sehe, ist die hohe durchschnittliche Auslastung des Frontend-Servers. MySQL-Server könnten besser sein, aber so schlimm ist es nicht. Apache-Server werden häufig zum Engpass. Ohne zu wissen, was Ihre Anwendung tut, ist es ziemlich schwierig, das Problem zu lösen. Allgemeine Empfehlungen könnten die folgenden sein:

  1. Richten Sie Munin auf dem Frontend-Server ein, der Metriken für Apache enthält. Mit diesen Informationen fällt es Ihnen viel leichter, Apache zu optimieren. Munin hilft Ihnen auch dabei, zu erkennen, wie oft und wann die durchschnittliche Auslastung steigt.
  2. Analysieren Sie Apache und Ihre Anwendungsprotokolle. Welche sind die schwersten und häufigsten Anfragen? Wahrscheinlich gibt es ein anwendungsbezogenes Problem (wie das Bereitstellen statischer Dateien mit PHP).
  3. Erwägen Sie, von Apache auf nginx/php-fpm umzusteigen. Apache ist ein sehr guter Webserver, aber nginx ist für viele moderne Setups, die einige spezifische Apache-Funktionen nicht benötigen, zu einer Art Standard geworden.

MySQL-Optimierung in Betracht ziehen. Sie haben nur 96,0 K MyISAM-Indizes, aber 384,0 M Schlüsselpufferpool. Sie könnten diesen Parameter bedenkenlos verringern. Sie könnten Ihre langsamen Abfragen auch mit Perconas pt-query-digest überprüfen, das ist sehr praktisch.

verwandte Informationen