Apache内存使用优化

Apache使用了太多的服务器内存,导致它崩溃。 我有4GB的RAM在服务器中。

我试图微调Apache设置,以提高它的性能,但我很新。

我试图按照这篇文章的build议,但我不知道如何计算的东西,似乎我让事情变得更糟。

我的顶部是这样的:

11697 apache 15 0 322m 37m 4048 S 0.0 0.9 0:00.52 httpd 13602 apache 15 0 323m 37m 3944 S 0.0 0.9 0:00.50 httpd 11786 apache 15 0 322m 36m 4052 S 0.0 0.9 0:00.50 httpd 12525 apache 15 0 322m 36m 4040 S 0.0 0.9 0:00.63 httpd 11806 apache 15 0 322m 36m 3952 S 0.0 0.9 0:00.42 httpd 11731 apache 15 0 322m 36m 4036 S 0.0 0.9 0:00.46 httpd 11717 apache 16 0 322m 36m 3956 S 0.0 0.9 0:00.54 httpd 11659 apache 15 0 322m 36m 3980 S 0.0 0.9 0:00.49 httpd 

所以,会是的

 MaxClients = 3000/ (322-37) = 10 

是对的吗? 另外,其他参数(如MinSpareServers,MaxSpareServers,MaxRequestsPerChild,StartServers,MinSpareThreads,MaxSpareThreads,ThreadsPerChild,MaxRequestsPerChild)的值应该是多less?

请有人帮我吗?

更新

我试过你们build议的。 它的工作,但只是一段时间。 服务器启动一段时间后,内存使用量不断增加,永远不会下降。

我的意思是,在启动服务器之后,我们假设有500个用户在线。 服务器将消耗X RAM。 2小时后,同样的500个用户在线,服务器将消耗10X RAM。

有没有办法避免这一点,否则我将不得不继续观看服务器,并不时重新启动它?

    调整Apache内存使用的主要参数是MaxClients 。 值太低,您将用尽可用的插槽来提供客户端请求。 太多,你会用尽所有的内存,并开始使用交换空间,这将杀死性能(这可能是一个服务器崩溃)。

    调整MaxClients一种方法是观察系统的内存使用情况,并根据需要调整设置。 如果服务器开始交换编辑它。 如果服务器有空闲的内存把它。

    您也可以通过查看Apache的内存使用情况来估计最大值。 从top开始,按M按内存sorting进程。 你应该看到像这样的东西:

      PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd 18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd 22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd 18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd 18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd 18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd 

    减去RES和SHR列以获得每个Apache实例的近似内存使用量。 在这种情况下,大约是16MB。 如果我有4GB的内存,并希望3GB的用于Apache我的MaxClients设置将是:

     MaxClients = 3000/16 = 188 

    因此,在这种情况下,我可能从150-200的值开始,但是我会观察内存使用情况,如果它开始接近使用swap,我会减lessMaxClients 10-20%。 另外请注意,3GB的值只是一个随机的例子。 在只运行Apache的服务器上,我可以使用几乎所有的4GB。 在其他情况下,我可能只希望1或2GB的Apache保存剩余的其他应用程序,系统或caching。

    编辑:回答其他问题

    MaxClients或其他的Apacheconfiguration参数通常没有什么神奇的价值,这会让你的服务器突然快两倍。 有些服务器似乎运行得很好,无论MaxClients是10还是1000.有两种MaxClients设置为“不良”的主要情况:

    • 太低 :当MaxClients太低时,您将遇到所有Apache客户端正在被使用并且新连接进入队列等待下一个客户端可用的情况。 如果启用Apache的mod_status,则可以实时查看有多less客户端在任何一个时间点处于忙碌状态。 这个状态比较容易诊断,因为在高stream量时间站点会变慢,所有的客户端都可以被观察到在使用中。
    • 太高 :当MaxClients太高时,您将进入耗尽所有内存并开始使用交换的情况。 当发生这种情况时,您的网站的性能将下降到基本上为零(考虑RAM和磁盘之间的速度差异)。 这个状态可能更难以观察和诊断,因为服务器运行得很好,MaxClients很高,直到遇到stream量高峰为止。 例如,在一个小时内点击几次的网站上,我可以将MaxClients设置为1000,远远超过RAM可支持的范围,但从来没有遇到过由于Apache一次只需要使用一个或两个客户端的问题。 我只会发现问题,当我得到一个交通高峰,增加了同时使用的客户端的数量,直到内存耗尽,需要交换空间。

    虽然我不知道您的服务器,应用程序或通信的细节,我可以build议以下configuration值作为起点。 尝试使用它们,监视服务器的负载和使用情况,并根据需要更改设置。

    • mod_status :启用这个,你可以看到Apache的用法。 要获得更高级的统计信息,请安装像Zabbix / Nagios这样的监控应用程序,以便您可以跟踪服务器使用情况和stream量模式
    • MaxClients :设置为100-200的值。 如果不确定和监视内存/ CPU / Apache的使用情况,我会从较低的值开始。 这将是调整的主要参数。
    • MaxRequestsPerChild :指定何时重新启动Apache客户端/子项。 没有错误的价值(尽pipe非常小的值可能是低效的),这取决于你服务的内容。 对于dynamic内容,一个大的非零值(比如说1000)将会阻止你的httpd进程最终变得太大。
    • 其他参数 :虽然我还没有完成其他参数的基准testing,但它们应该有相对较小的影响,除非将它们设置为非常低或非常高的值。 对大多数网站使用默认值应该没问题。 请参阅Apache Prefork或工作者模块文档以获取有关参数的完整说明以及每个模块中使用的内容(尝试调整不使用的参数没有意义)。
    • 基准testing :当您调整参数时,我会build议使用ab(ApacheBench)或围攻等基准testing工具来获取服务器function的定量数字。 依靠感觉或更糟糕,看看它是否崩溃,不是调整Web服务器参数的好方法。