2013-12-19 39 views
1

我有一個Ubuntu的服務器和10個網站不同框架/ CMS。Apache的CPU 100%時,查詢數據庫

我的問題是,當我打開一個網站與一個大的CMS與MySQL DB集成,使用100%CPU的Apache2,在這些網站我有一個頁面速度10-20秒(呈現HTML頁面),我真的不知道爲什麼。 (但是沒有MySQL連接的所有PHP框架都可以正常工作)。

我的服務器支持經理,我們看到在我的服務器運行良好(無I/O問題或其他),我們認爲這是在阿帕奇/ MySQL的配置問題。

我沒有應聲數據庫表和優化所有InnoDB表。

這是當我從我的瀏覽器加載這個緩慢的CMS一個top快照:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
13307 www-data 20 0 90116 42m 22m R 100 4.2 0:15.23 apache2 
2224 root  20 0 37932 8148 1724 S 8 0.8 212:21.99 newrelic-daemon 
13422 mysql  20 0 186m 47m 6280 S 0 4.7 0:11.20 mysqld 
13889 root  20 0 2640 1132 860 R 0 0.1 0:00.03 top 
1 root  20 0 2796 1124 792 S 0 0.1 0:06.28 init 

NewRelic的截圖問題(不僅與WordPress的,但所有CMS):Newrelic screenshot

我的CPU信息:

$ head /proc/cpuinfo 
processor  : 0 
vendor_id  : GenuineIntel 
cpu family  : 6 
model   : 45 
model name  : Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz 
stepping  : 7 
cpu MHz   : 2600.086 
cache size  : 20480 KB 
fdiv_bug  : no 
hlt_bug   : no 

我的記憶信息:

$ head /proc/meminfo 
MemTotal:  1028476 kB 
MemFree:   571424 kB 
Buffers:   17920 kB 
Cached:   273312 kB 
SwapCached:   824 kB 
Active:   232768 kB 
Inactive:   180264 kB 
Active(anon):  147336 kB 
Inactive(anon):  5292 kB 
Active(file):  85432 kB 

我的Apache配置:

LockFile ${APACHE_LOCK_DIR}/accept.lock 
PidFile ${APACHE_PID_FILE} 
Timeout 300 
KeepAlive On 
MaxKeepAliveRequests 100 
KeepAliveTimeout 15 
<IfModule mpm_prefork_module> 
    StartServers   2 
    MinSpareServers  5 
    MaxSpareServers  10 
    MaxClients   50 
    MaxRequestsPerChild 0 
    </IfModule> 
<IfModule mpm_worker_module> 
    StartServers   2 
    MinSpareThreads  25 
    MaxSpareThreads  75 
    ThreadLimit   64 
    ThreadsPerChild  25 
    MaxClients   150 
    MaxRequestsPerChild 0 
    </IfModule> 
<IfModule mpm_event_module> 
    StartServers   2 
    MinSpareThreads  5 
    MaxSpareThreads  10 
    ThreadLimit   64 
    ThreadsPerChild  25 
    MaxClients   50 
    MaxRequestsPerChild 0 
    </IfModule> 
User ${APACHE_RUN_USER} 
Group ${APACHE_RUN_GROUP} 
AccessFileName .htaccess 
<Files ~ "^\.ht"> 
    Order allow,deny 
    Deny from all 
    Satisfy all 
    </Files> 
DefaultType text/plain 
HostnameLookups Off 
ErrorLog ${APACHE_LOG_DIR}/error.log 
LogLevel warn 
Include mods-enabled/*.load 
Include mods-enabled/*.conf 
Include httpd.conf 
Include ports.conf 
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined 
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined 
LogFormat "%h %l %u %t \"%r\" %>s %O" common 
LogFormat "%{Referer}i -> %U" referer 
LogFormat "%{User-agent}i" agent 
Include conf.d/ 
Include sites-enabled/ 

MySQL的配置:

[client] 
port  = 3306 
socket  = /var/run/mysqld/mysqld.sock 

[mysqld_safe] 
socket  = /var/run/mysqld/mysqld.sock 
nice  = 0 

[mysqld] 
user  = mysql 
socket  = /var/run/mysqld/mysqld.sock 
port  = 3306 
basedir  = /usr 
datadir  = /var/lib/mysql 
tmpdir  = /tmp 
skip-external-locking 
key_buffer  = 32M 
max_allowed_packet = 16M 
thread_stack  = 192K 
thread_cache_size  = 286 
interactive_timeout = 25 
wait_timeout = 1000 
myisam-recover   = BACKUP 
myisam_sort_buffer_size = 32MB 
max_connections  = 400 
read_buffer_size = 1M 
sort_buffer_size = 2M 
table_cache   = 400 
thread_concurrency  = 10 
query_cache_limit = 64M 
query_cache_size  = 32M 
general_log_file  = /var/log/mysql/mysql.log 

log_error    = /var/log/mysql/error.log 

log_slow_queries = /var/log/mysql/mysql-slow.log 
long_query_time = 4 
log-queries-not-using-indexes 
log_bin   = /var/log/mysql/mysql-bin.log 
expire_logs_days = 10 
max_binlog_size   = 100M 
bind-address  = 127.0.0.1 

[mysqldump] 
quick 
quote-names 
max_allowed_packet = 16M 

[mysql] 

[isamchk] 
key_buffer  = 32M 

!includedir /etc/mysql/conf.d/ 

如何解決這個問題?

+1

首先嚐試在你的sql引擎上找到問題。調試或記錄運行緩慢的查詢。 – devanand

回答

0

你的Apache配置有很多錯誤 - 但這可能與你當前的問題無關,就像你的DBMS的狀態一樣 - 根據你提供的信息來看它是出錯的地方。

你沒有告訴我們這MPM Apache是​​使用(這是認識問題的關鍵),也不該CMS。

我剛纔說你已經省略的信息只是冰山一角 - 調查和解決性能問題確實非常複雜 - 可能需要數月時間(其中大部分花費在收集信息上) - 你這裏很難得到明確的答案。

0

您需要將更多的信息。例如,如果您嘗試在wordpress 1000000的帖子中顯示,並且特別是如果您在單獨的查詢中獲得該帖子的屬性,則可以在很長一段時間內獲得100%的CPU使用率。

試圖找到在高使用率的時刻,其他的腳本,導致此問題,montor你的MySQL(SHOW PROCESSLIST)。