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:
- 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.
- 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).
- 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.