최근에 클라이언트 웹 사이트 (concrete5 CMS 사용)를 Gentoo, Apache 2.2, PHP5 및 MySQL 5를 실행하는 VPS로 옮겼으며 Apache 응답 시간이 꽤 나쁘다는 것을 알았습니다 (이전 서버에서 동일 함) , 때로는 최대 8-9 초이지만 더 자주 300ms와 3 초 사이입니다 (300ms를 향하여 마음에 들지 않습니다). 서버에 약 30ms의 핑이 있기 때문에 네트워크 대기 시간이 아니라는 것을 알고 있습니다.
시간의 예는 다음과 같습니다 (처음 대기 한 후 시간이 지남을 알 수 있습니다).
나는 APC ( 잘 작동하는지 잘 모르겠지만 )와 SuExec을 실행하고 있습니다. 아파치 모듈은 :
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)
PHP 모듈은 다음과 같습니다.
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
모든 관련 파일에서 gzip을 사용하도록 설정했습니다.
Apache는 prefork를 사용하여 실행 중이며 httpd.conf의 설정은 다음과 같습니다.
<IfModule prefork.c>
StartServers 10
MinSpareServers 10
MaxSpareServers 20
MaxClients 250
MaxRequestsPerChild 4000
</IfModule>
HostnameLookups Off
CMS의 대시 보드와 같이 데이터베이스가 많은 페이지는 일반적으로 느리다는 것을 알았습니다. 이것이 MySQL을 최적화 할 수 있음을 의미한다고 생각했습니다. 나는 또한 mod_php5, mod_cgi, mod_fastcgi 등과 같은 아파치 모듈에 대해 궁금해했다. 사용하기 가장 좋은 것에 관해서는 상충되는 충고가있다.
다음은 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)
DB가 많은 페이지가로드되었을 때 CPU 사용량이 57 % (상단 사용)로 급증했습니다. 나에게 나쁘게 최적화 된 MySQL 항목이 있거나이 설정 속도를 높이기 위해 캐싱이 필요하다는 것을 알았습니다.
어떤 도움이라도 대단히 감사하겠습니다!
HostnameLookup
로그 구성이 활성화되어 있습니까? 그렇다면 액세스 로그에 추가 할 요청 클라이언트의 DNS 조회가 매우 느리거나 첫 번째 DNS 서버가 시간 초과되어 전체 요청이 느려질 수 있습니다.