Apache-2.2
當我看到高 CPU,但記憶體使用率低時,我應該如何調整 apache?
我的 CentOS Web 節點(LAMP 堆棧)正在經歷高 CPU 使用率但低記憶體使用率。幾乎所有的程序都是apache。我知道我可以添加額外的 web 節點,直到我的 cpu 使用變得合理,但我想這裡有一些快速調整技巧可能會有很長的路要走。
CPU 在 90-100% 之間反彈。Mysql 在 5% 到 45% 之間反彈。Apache 彌補了其餘部分。
最佳:
top - 21:15:49 up 46 days, 20:39, 4 users, load average: 34.17, 44.62, 51.03 Tasks: 133 total, 32 running, 101 sleeping, 0 stopped, 0 zombie Cpu(s): 90.4%us, 9.6%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.1%st Mem: 8388608k total, 6116448k used, 2272160k free, 84160k buffers Swap: 16777208k total, 68k used, 16777140k free, 3488044k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15775 mysql 15 0 827m 153m 3712 S 43.7 1.9 0:55.04 mysqld 15911 apache 16 0 275m 10m 3872 S 24.1 0.1 0:03.15 httpd 15816 apache 16 0 288m 23m 4116 R 23.5 0.3 0:11.88 httpd 15807 apache 15 0 281m 17m 5028 S 21.5 0.2 0:11.71 httpd 15897 apache 16 0 277m 13m 4104 S 21.2 0.2 0:02.68 httpd 15834 apache 16 0 276m 11m 3916 S 20.6 0.1 0:05.22 httpd 15842 apache 16 0 275m 11m 4116 S 19.3 0.1 0:07.86 httpd 15870 apache 16 0 294m 30m 5044 R 17.4 0.4 0:06.36 httpd 15782 apache 15 0 278m 13m 4124 R 12.2 0.2 0:08.54 httpd 15819 apache 15 0 280m 17m 5016 S 11.6 0.2 0:07.01 httpd 15683 apache 16 0 288m 23m 4128 R 10.9 0.3 0:09.90 httpd 15876 apache 16 0 284m 19m 3880 R 10.6 0.2 0:04.35 httpd 15878 apache 15 0 276m 11m 4104 S 10.6 0.1 0:06.42 httpd 15913 apache 16 0 275m 10m 3920 R 9.6 0.1 0:07.98 httpd 15898 apache 16 0 280m 16m 4104 S 9.3 0.2 0:02.85 httpd 15817 apache 16 0 277m 13m 4108 S 9.0 0.2 0:05.55 httpd 15843 apache 16 0 280m 15m 4104 R 8.7 0.2 0:10.80 httpd 15812 apache 16 0 280m 16m 5012 R 8.0 0.2 0:05.18 httpd 15844 apache 16 0 281m 16m 4116 R 7.4 0.2 0:08.63 httpd 15833 apache 16 0 281m 18m 5036 R 7.1 0.2 0:04.76 httpd 15795 apache 16 0 280m 15m 3920 R 6.8 0.2 0:08.65 httpd 15704 apache 15 0 280m 16m 4096 S 6.4 0.2 0:09.06 httpd 15849 apache 16 0 280m 15m 4124 R 6.4 0.2 0:05.59 httpd 15806 apache 16 0 276m 11m 3876 S 6.1 0.1 0:10.33 httpd 15902 apache 16 0 280m 15m 3912 R 6.1 0.2 0:03.40 httpd 15688 apache 16 0 279m 14m 4116 R 5.8 0.2 0:06.07 httpd 15904 apache 16 0 280m 15m 3860 R 5.8 0.2 0:02.74 httpd 15703 apache 16 0 281m 17m 5048 R 5.1 0.2 0:03.86 httpd 15705 apache 16 0 281m 17m 5044 R 4.5 0.2 0:13.54 httpd 15821 apache 15 0 276m 11m 4072 S 4.5 0.1 0:04.24 httpd 15830 apache 16 0 278m 13m 4112 R 4.2 0.2 0:06.37 httpd 15850 apache 16 0 277m 12m 3872 R 3.9 0.2 0:04.64 httpd 15912 apache 15 0 276m 11m 3920 S 3.9 0.1 0:05.58 httpd 15804 apache 15 0 280m 15m 3932 R 3.5 0.2 0:09.13 httpd 15805 apache 16 0 281m 15m 3932 R 3.5 0.2 0:09.00 httpd 15899 apache 16 0 277m 12m 4104 R 2.6 0.2 0:03.26 httpd 15701 apache 16 0 277m 12m 3920 R 2.3 0.2 0:08.35 httpd 15781 apache 15 0 274m 9.8m 3924 S 1.9 0.1 0:10.48 httpd 15848 apache 15 0 276m 11m 3876 S 1.9 0.1 0:06.63 httpd 15901 apache 15 0 275m 10m 3916 S 1.9 0.1 0:02.18 httpd 15879 apache 16 0 280m 16m 4104 R 1.3 0.2 0:02.03 httpd 15820 apache 16 0 281m 17m 5260 R 1.0 0.2 0:05.24 httpd
相關的httpd.conf:
Timeout 120 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule> <IfModule worker.c> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
可能是一些在 mod_php 中執行的 PHP 腳本消耗了過多的 CPU 時間。總體建議是一般性的,它們中的每一個都會有一些好處:
- 安裝 APC 記憶體並檢查它是否真的在執行(APC 捆綁了顯示 APC 狀態和記憶體命中和未命中的 apc.php 文件)
- 安裝 nginx 並將其安裝為 apache 前面的反向代理 - 這將減少提供靜態文件的成本並將更多的 CPU 資源留給伺服器動態內容
- 使用 %t %T 指令將 CustomLog 添加到 apache 並檢查日誌 - 您將看到執行時間最長的請求,從而消耗最多的 CPU
- 優化/重寫這些腳本