如何优化 Apache 以便在我的网站上使用 1GB RAM?

如何优化 Apache 以便在我的网站上使用 1GB RAM?

我的 VPS 套餐提供 1GB RAM,可扩展至 2GB。当然,我不可能每天都使用 2GB,也不可能每天使用超过 1GB,所以我计划优化我的网络服务器的性能。

每小时的平均点击量约为 8,000-10,000。这意味着每秒大约有 2 个连接。到目前为止,每小时的最大点击量约为 60,000。这意味着每秒大约有 16 个连接。

不幸的是,我当前的 apache 配置使用了太多内存(当没有连接的客户端时 - 通常在夜间 - 它使用大约 1GB)所以我尝试定制 apache 安装以满足我的需求。

我使用的是 Ubuntu,内核 2.6.18,带有 apache2-mpm-worker,因为我读到它需要较少的内存,以及 fcgid (+ PHP)。这是我的 /etc/apache2/apache2.conf:

Timeout 45
KeepAlive on
MaxKeepAliveRequests 100
KeepAliveTimeout 10
<IfModule mpm_worker_module>
    StartServer 2
    MinSpareThreads 25
    MaxSpareThreads 75
    MaxClients 100
    MaxRequestsPerChild 0
</IfModule>

这是 ps aux 的输出:

www-data  9547  0.0  0.3 423828  7268 ?        Sl   20:09   0:00 /usr/sbin/apache2 -k start
root     17714  0.0  0.1  76496  3712 ?        Ss   Feb05   0:00 /usr/sbin/apache2 -k start
www-data 17716  0.0  0.0  75560  2048 ?        S    Feb05   0:00 /usr/sbin/apache2 -k start
www-data 17746  0.0  0.1  76228  2384 ?        S    Feb05   0:00 /usr/sbin/apache2 -k start
www-data 20126  0.0  0.3 424852  7588 ?        Sl   19:24   0:02 /usr/sbin/apache2 -k start
www-data 24260  0.0  0.3 424852  7580 ?        Sl   19:42   0:01 /usr/sbin/apache2 -k start

这是 php5 的 ps aux:

www-data  7461  2.9  2.2 142172 47048 ?        S    19:39   1:39 /usr/lib/cgi-bin/php5
www-data 23845  1.3  1.7 135744 35948 ?        S    20:17   0:15 /usr/lib/cgi-bin/php5
www-data 23900  2.0  1.7 136692 36760 ?        S    20:17   0:22 /usr/lib/cgi-bin/php5
www-data 27907  2.0  2.0 142272 43432 ?        S    20:00   0:43 /usr/lib/cgi-bin/php5
www-data 27909  2.5  1.9 138092 40036 ?        S    20:00   0:53 /usr/lib/cgi-bin/php5
www-data 27993  2.4  2.2 142336 47192 ?        S    20:01   0:50 /usr/lib/cgi-bin/php5
www-data 27999  1.8  1.4 135932 31100 ?        S    20:01   0:38 /usr/lib/cgi-bin/php5
www-data 28230  2.6  1.9 143436 39956 ?        S    20:01   0:54 /usr/lib/cgi-bin/php5
www-data 30708  3.1  2.2 142508 46528 ?        S    19:44   1:38 /usr/lib/cgi-bin/php5

如您所见,它占用了大量内存。我该如何将其减少到仅适合 1GB RAM?

PS:如果 Apache 不能满足我的需求,我也考虑切换到 nginx...

UPDATE1:我刚刚写了一些关于 fcgid 配置的内容,因为我之前没有写过:

FcgidMaxRequestsPerProcess 1000
FcgidIdleTimeout 15
FcgidBusyTimeout 30
FcgidMaxProcessesPerClass 5

答案1

减少 Apache 使用的内存量相当简单...只需通过增加线程数量来减少进程数量。

另一方面,减少 CGI / PHP 使用的内存量在很大程度上取决于您的 PHP 应用程序、它们的内存效率以及您所使用的 PHP 版本。

至少,您可以尝试使用以下命令修改您的 Apache,这将为您提供 2 个 Apache 进程,每个进程有 50 个线程,并确保 Apache 进程每 10k 个连接重新加载一次(不考虑 keepalived 连接)以释放 Apache 内存:

<IfModule mpm_worker_module>
    KeepAlive On
    MaxKeepAliveRequests    100
    KeepAliveTimeout        15
    StartServers            2
    ServerLimit             2
    MinSpareThreads         50
    MaxSpareThreads         100 
    ThreadLimit             100
    ThreadsPerChild         50
    MaxClients              100
    MaxRequestsPerChild     10000
</IfModule>

然后,您可能需要查看 fcgid 配置,以确保限制活动 php 进程的数量,并确保重新加载进程以释放未使用的内存。然而,这在很大程度上取决于您的 Web 应用程序和使用模式:

FcgidMaxRequestsPerProcess
FcgidIdleTimeout
FcgidBusyTimeout
FcgidMaxProcesses
FcgidMaxProcessesPerClass

答案2

我通过在我的 VPS 上编译 apache(使用 prefork!)+ PHP5 解决了这个问题。现在它以 50 个子进程启动,消耗大约 6-700 MB。

我认为这是我能做的最好的事情 :P

相关内容