Gần đây tôi đã chuyển trang web của khách hàng (sử dụng CMS cụ thể5) sang VPS chạy Gentoo, Apache 2.2, PHP5 và MySQL 5 và tôi nhận thấy rằng thời gian phản hồi của Apache khá tệ (tương tự trên máy chủ cũ) , đôi khi lên tới 8-9 giây, nhưng thường xuyên hơn trong khoảng từ 300ms đến 3 giây (đối với 300ms tôi không bận tâm). Tôi biết đó không phải là độ trễ mạng, vì máy chủ có ping (từ vị trí của tôi) khoảng 30ms.
Đây là một ví dụ về thời gian (bạn có thể thấy nó linh hoạt sau khi chờ đợi ban đầu):
Tôi đang chạy APC (mặc dù tôi không chắc là nó hoạt động tốt ...) và SuExec. Các mô-đun Apache là:
core_module (static)
authn_file_module (static)
authn_default_module (static)
authz_host_module (static)
authz_groupfile_module (static)
authz_user_module (static)
authz_default_module (static)
auth_basic_module (static)
include_module (static)
filter_module (static)
deflate_module (static)
log_config_module (static)
env_module (static)
expires_module (static)
headers_module (static)
setenvif_module (static)
version_module (static)
ssl_module (static)
mpm_prefork_module (static)
http_module (static)
mime_module (static)
status_module (static)
autoindex_module (static)
asis_module (static)
info_module (static)
suexec_module (static)
cgi_module (static)
negotiation_module (static)
dir_module (static)
actions_module (static)
userdir_module (static)
alias_module (static)
rewrite_module (static)
so_module (static)
suphp_module (shared)
và các mô-đun PHP là:
bcmath
calendar
ctype
curl
db
dbase
domxml
exif
ftp
gd
gettext
iconv
imap
mbstring
mcrypt
mime_magic
mysql
openssl
overload
pcre
posix
session
standard
sysvsem
sysvshm
tokenizer
xml
xslt
zlib
Tôi đã kích hoạt gzip trên tất cả các tệp có liên quan.
Apache đang chạy bằng prefork và các cài đặt trong httpd.conf là:
<IfModule prefork.c>
StartServers 10
MinSpareServers 10
MaxSpareServers 20
MaxClients 250
MaxRequestsPerChild 4000
</IfModule>
HostnameLookups Off
Tôi đã nhận thấy rằng các trang (tôi nghĩ) nặng về cơ sở dữ liệu, chẳng hạn như Bảng điều khiển của CMS, thường chậm hơn. Tôi nghĩ điều này có nghĩa là MySQL có thể được tối ưu hóa. Tôi cũng băn khoăn về các mô-đun Apache - Tôi bị nhầm lẫn giữa mod_php5, mod_cgi, mod_fastcgi, v.v. - có một lời khuyên mâu thuẫn trên mạng về cách tốt nhất để sử dụng.
Đây là đầu ra của MySQLTuner :
-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.44-log
[OK] Operating on 64-bit architecture
-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive -BDB -Federated -InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 35M (Tables: 161)
[!!] Total fragmented tables: 15
-------- Security Recommendations -------------------------------------------
[OK] All database users have passwords assigned
-------- Performance Metrics -------------------------------------------------
[--] Up for: 3d 21h 44m 16s (293K q [0.868 qps], 1K conn, TX: 135M, RX: 90M)
[--] Reads / Writes: 99% / 1%
[--] Total buffers: 58.0M global + 1.6M per thread (100 max threads)
[!!] Maximum possible memory usage: 219.7M (93% of installed RAM)
[OK] Slow queries: 0% (0/293K)
[OK] Highest usage of available connections: 2% (2/100)
[OK] Key buffer size / total MyISAM indexes: 16.0M/20.9M
[OK] Key buffer hit rate: 99.6% (5M cached / 21K reads)
[!!] Query cache is disabled
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 3K sorts)
[!!] Temporary tables created on disk: 47% (2K on disk / 5K total)
[!!] Thread cache is disabled
[!!] Table cache hit rate: 6% (64 open / 1K opened)
[OK] Open file limit used: 12% (128/1K)
[OK] Table locks acquired immediately: 100% (356K immediate / 356K locks)
-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
Reduce your overall MySQL memory footprint for system stability
Enable the slow query log to troubleshoot bad queries
When making adjustments, make tmp_table_size/max_heap_table_size equal
Reduce your SELECT DISTINCT queries without LIMIT clauses
Set thread_cache_size to 4 as a starting value
Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
*** MySQL's maximum memory usage is dangerously high ***
*** Add RAM before increasing MySQL buffer variables ***
query_cache_size (>= 8M)
tmp_table_size (> 32M)
max_heap_table_size (> 16M)
thread_cache_size (start at 4)
table_cache (> 64)
Tôi nhận thấy khi một trang nặng DB được tải, mức sử dụng CPU tăng vọt ở mức 57% (sử dụng hàng đầu) - với tôi điều đó cho thấy có một số nội dung MySQL được tối ưu hóa kém hoặc bộ nhớ đệm là hoàn toàn cần thiết để tăng tốc thiết lập này.
Bất kì sự trợ giúp nào đều được đánh giá cao!
HostnameLookup
trong cấu hình nhật ký được kích hoạt? Nếu vậy, việc tra cứu DNS của ứng dụng khách yêu cầu được thêm vào nhật ký truy cập có thể rất chậm (hoặc máy chủ DNS đầu tiên thậm chí hết thời gian) có thể làm chậm yêu cầu hoàn chỉnh.