Apache-2.2
緩慢的網站載入和高記憶體使用
最近幾天我的網站速度變慢了…有些圖像沒有顯示…我知道了
408 Request Time-out: Server timeout waiting for the HTTP request from the client
以前從未發生過的幾次。
我做了一些性能檢查,基本上是 ssh 中的頂級命令
這是結果
http://up.akstube.com/images/vdtebe9sr10si1eyycd.jpg
如您所見,記憶體使用率非常高……或者我認為是。
我已經重新啟動了伺服器……它下降了,但之後它又上升了……(這是重新啟動後大約一個小時)
http://up.akstube.com/images/49xjeylxy0st7vwn4ojl.png
半小時後=>
top - 16:14:22 up 1:56, 2 users, load average: 0.62, 0.90, 1.15 Tasks: 303 total, 1 running, 302 sleeping, 0 stopped, 0 zombie Cpu(s): 8.0%us, 0.2%sy, 0.0%ni, 91.4%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st Mem: 32840004k total, 21037648k used, 11802356k free, 430832k buffers Swap: 1050616k total, 0k used, 1050616k free, 16527108k cached
現在
[root@ns4008353 ~]# top top - 16:33:25 up 2:15, 2 users, load average: 0.88, 0.94, 0.98 Tasks: 303 total, 3 running, 300 sleeping, 0 stopped, 0 zombie Cpu(s): 6.8%us, 0.2%sy, 0.0%ni, 92.8%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st Mem: 32840004k total, 22388160k used, 10451844k free, 434964k buffers Swap: 1050616k total, 0k used, 1050616k free, 17324104k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 7532 mysql 20 0 3750m 492m 5556 S 18.0 1.5 49:53.58 mysqld 12903 apache 20 0 232m 40m 4864 S 16.3 0.1 0:56.74 httpd 7748 apache 20 0 235m 43m 5256 S 11.6 0.1 1:33.36 httpd 8010 apache 20 0 262m 70m 4856 R 6.7 0.2 1:32.05 httpd 7747 apache 20 0 235m 43m 5220 S 1.3 0.1 1:06.37 httpd 7749 apache 20 0 222m 30m 5164 S 1.3 0.1 1:58.53 httpd 7996 apache 20 0 250m 59m 5476 S 1.3 0.2 1:37.37 httpd 10 root 20 0 0 0 0 S 0.3 0.0 0:09.72 rcu_sched 7714 apache 20 0 265m 73m 4972 S 0.3 0.2 1:34.53 httpd 7905 named 20 0 669m 24m 3020 S 0.3 0.1 0:02.01 named 7999 apache 20 0 232m 40m 4968 S 0.3 0.1 1:17.67 httpd 20865 root 20 0 0 0 0 S 0.3 0.0 0:01.05 kworker/2:2 21491 root 20 0 15212 1308 852 S 0.3 0.0 0:01.38 top 23810 root 20 0 15212 1340 852 R 0.3 0.0 0:00.07 top 1 root 20 0 19404 1568 1268 S 0.0 0.0 0:00.58 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
免費米
[root@ns4008353 ~]# free -m total used free shared buffers cached Mem: 32070 21897 10173 0 424 16955 -/+ buffers/cache: 4516 27553 Swap: 1025 0 1025
您認為這是響應緩慢的原因嗎?是否有任何評論以獲取有關使用記憶體的更多資訊?
我有一個專用伺服器:
Processor Name Intel(R) Xeon(R) CPU E3-1245 V2 @ 3.40GHz Vendor ID GenuineIntel Processor Speed (MHz) 1600.000 Total Memory 32840004 kB Free Memory 10416752 kB Total Swap Memory 1050616 kB Free Swap Memory 1050616 kB System Uptime 0 Days, 2 Hours and 22 Minutes Apache 2.2.24 Running DirectAdmin 1.43.0 Running Exim 4.76 Running MySQL 5.5.31 Running Named 9.8.2rc1 Running ProFTPd 1.3.4d Running sshd Running dovecot 2.2.4 Running
已安裝 PHP 5.3.26
查看我的日誌文件後,我看到了很多這個錯誤
[Sat Sep 28 00:15:41 2013] [error] [client 66.249.73.162] Request exceeded the limit of 10 internal redirects due to probable co nfiguration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace
它通常是重新註入更改的請求 URI 的 .htaccess 文件,檢查一下,您也可以重置配置文件
您的問題描述是緩慢的 HTTP 請求,但正如您所展示的,CPU 和記憶體並未耗盡。所以有幾件事要檢查:
- 確保請求確實很慢。在 httpd.conf 中,找到這一行:
LogFormat “%h %l %u %t "%r" %>s %b” 常見
並在 %b 之後添加 %D (但在結束引號內)。見http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
然後重新載入/重新啟動 httpd,您的 access_log 文件現在應該在最後一列中顯示每個響應所需的時間(以微秒為單位)。確認這些很慢。也許只有某些類型的請求很慢?我注意到 MySQL 正在使用一些 CPU,所以也許一種類型的請求會遇到緩慢的數據庫查詢?
- 如果上面的響應確實很慢並且沒有明顯的模式(例如特定頁面),那麼您需要確定它們慢的地方。%D 時間包括一切,從讀取來自客戶端的請求、提供文件(包括任何應用程式碼或數據庫查詢)和寫入響應,所以它只是告訴您減速,不一定是在哪裡。所以現在你需要找出減速的地方。我會先檢查應用程序。還要檢查 MySQL 慢日誌(如果未啟用,請啟用它)。
- 檢查您的 error_log - 可能有一些應用程序超時或其他錯誤。
- 如果您沒有任何運氣,您也可以
pstack ${PID}
定期執行以嘗試了解 httpd 在做什麼。- 最後,您可以使用 tcpdump 和 Wireshark 之類的東西來隔離減速的位置,儘管這會有點乏味。我認為還有一個 httpd 模組可以分解請求中的時間,但我現在找不到它,也沒有在內置模組列表中看到它。