サーバーに問題があります。ピークを迎え、サーバーの負荷が非常に高くなっています。
私は 3 台のサーバーを持っています。1 台はフロントエンド用、1 台はデータベース (mysql) 用、もう 1 台は配信画像用です (このサーバーには問題はありません)
以下は、1500 人の訪問者に対する現在の構成と負荷平均です。
サーバー1(フロントエンド):
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
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
サーバー 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
マイ.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 出力
-------- 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
応募詳細
php 5.4 Symfony 1.2 データベースサイズ: 6GB
手伝ってもらえますか?
答え1
ここで私が見ている主な問題は、フロントエンド サーバーでの平均負荷が高いことです。MySQL サーバーはもっと改善できるかもしれませんが、それほど悪くはありません。Apache サーバーは頻繁にボトルネックになります。アプリケーションが何をしているかを知らなければ、問題を解決するのは非常に困難です。一般的な推奨事項は次のとおりです。
- フロントエンド サーバーに Munin をセットアップすると、Apache のメトリックが組み込まれます。この情報があれば、Apache の調整がはるかに簡単になります。Munin は、負荷平均が増加する頻度と時期を特定するのにも役立ちます。
- Apache とアプリケーションのログを分析します。最も重く、最も頻繁なリクエストは何ですか? おそらく、アプリケーション関連の問題 (PHP を使用して静的ファイルを提供するなど) があります。
- Apache の代わりに nginx/php-fpm に切り替えることを検討してください。Apache は非常に優れた Web サーバーですが、特定の Apache 機能を必要としない多くの最新のセットアップでは、nginx が一種の標準になっています。
MySQL の最適化を検討します。MyISAM インデックスは 96.0K しかありませんが、キー バッファー プールは 384.0M あります。このパラメーターを安全に減らすことができます。Percona の pt-query-digest を使用して遅いクエリをチェックすることもできます。これは非常に便利です。