서버에 문제가 있습니다. 사용량이 최고조에 달하고 서버 로드가 매우 높습니다.
저는 3개의 서버를 가지고 있습니다. 하나는 프런트엔드용, 하나는 데이터베이스(mysql)용, 다른 하나는 이미지 전송용입니다(이 제품에는 문제가 없습니다).
방문자 1,500명에 대한 현재 구성 및 로드 평균은 다음과 같습니다.
서버 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
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
서버 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 서버에서는 병목 현상이 자주 발생합니다. 애플리케이션이 수행하는 작업을 알지 못하면 문제를 해결하기가 매우 어렵습니다. 일반적인 권장 사항은 다음과 같습니다.
- Apache에 대한 메트릭을 포함하는 프런트엔드 서버에 Munin을 설정합니다. 이 정보가 있으면 Apache를 조정하는 것이 훨씬 쉬울 것입니다. Munin은 또한 로드 평균 증가 빈도와 시기를 식별하는 데 도움이 됩니다.
- Apache와 애플리케이션 로그를 분석합니다. 가장 무겁고 빈번한 요청은 무엇입니까? 아마도 애플리케이션 관련 문제(예: PHP를 사용한 정적 파일 제공)가 있을 것입니다.
- Apache 대신 nginx/php-fpm으로 전환하는 것을 고려해 보세요. Apache는 매우 훌륭한 웹서버이지만 nginx는 특정 Apache 기능이 필요하지 않은 많은 최신 설정의 표준이 되었습니다.
MySQL 최적화를 고려 중입니다. MyISAM 인덱스는 96.0K에 불과하지만 키 버퍼 풀은 384.0M입니다. 이 매개변수를 안전하게 줄일 수 있습니다. Percona의 pt-query-digest를 사용하여 느린 쿼리를 확인할 수도 있습니다. 매우 편리합니다.