只要阅读让EC2-Micro上的WordPress稳定
在“调整Apache”部分,我不能完全弄清楚他是如何为自己的preforkconfiguration提供数字的。
他解释了如何获得一个平均的过程,我得到的数字。 但是之后:
或者每个进程大约53MB …在这种情况下,十个线程应该是安全的。 这意味着,如果我们收到超过10个并发请求,其他请求将排队,直到一个工作线程可用。 为了最大限度地提高性能,我们还将configuration系统使这个线程数始终可用。
从每个进程53MB,与613MB的RAM,他不知何故得到这个configuration,我不明白:
<IfModule prefork.c> StartServers 10 MinSpareServers 10 MaxSpareServers 10 MaxClients 10 MaxRequestsPerChild 4000 </IfModule>
他是如何从每个进程53MB获得的,限制为613MB?
奖金的问题
从下面的小实例(1.7 GB内存),好的设置是什么?
bitnami@ip-10-203-39-166:~$ ps xav |grep httpd 1411 ? Ss 0:00 2 0 114928 15436 0.8 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf 1415 ? S 0:06 10 0 125860 55900 3.1 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf 1426 ? S 0:08 19 0 127000 62996 3.5 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf 1446 ? S 0:05 48 0 131932 72792 4.1 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf 1513 ? S 0:05 7 0 125672 54840 3.1 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf 1516 ? S 0:02 2 0 125228 48680 2.7 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf 1517 ? S 0:06 2 0 127004 55796 3.1 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf 1518 ? S 0:03 1 0 127196 54208 3.0 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf 1531 ? R 0:04 0 0 127500 54236 3.0 /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf
计算背后的想法是,您需要为其他事情保留一些内存 – 运行在实例上的操作系统和其他服务。 之后,不pipe你剩下的是什么,你除以平均使用的内存(驻留集大小 – RSS列)来获得服务器可以处理的最大线程数量,而不会耗尽内存。
也就是说,我喜欢稍微改变一下我的计算方法,但是我会在稍后解决。
从httpd.conf:
prefork MPM
您所显示的configuration将保持不断运行10个进程:启动10个进程(StartServers),最多允许10个服务器进程(MaxClients)。 在这种情况下,MinSpareServers和MaxSpareServers不应该发挥作用。 服务器进程处理了4000个请求之后,它将被终止并在其位置创build一个新的(试图限制内存泄漏等)
所以,假设是你的服务器上的其他所有内容都会使用大约80MB的内存 – 530MB。 除以你的平均进程大小(53MB)得到10个进程。
我build议这个假设是有一点的。 如果你在服务器上运行其他任何东西(比如MySQL),你肯定需要保留更多的内存。 此外,没有考虑变化的空间。为了估计,我将为操作系统和其他服务留出至less120MB的空间,然后将差额减less10%。 所以,大约有8个apache进程。
<IfModule prefork.c> StartServers 2 MinSpareServers 1 MaxSpareServers 3 MaxClients 8 MaxRequestsPerChild 1000 </IfModule>
所以,以上 – 最多有8个进程。 我们只是开始2.我们希望在任何时候至less有一个闲置 – 但不超过3空闲。 此外,由于内存是一个问题,MaxRequestsPerChild已经减less。
现在,我更喜欢通过实际运行一下服务器来计算数量,然后停止apache并查看系统其余部分使用了多less内存。 从总数中减去这个数字,取90%,除以你的平均apache进程大小。 特别是对于更复杂的设置,这给了一个更现实的价值。
作为提及的一点,在内存受限的盒子上,Nginx可能比Apache更适合作为networking服务器。 另外,你肯定希望在t1.micro上有一些交换空间(尽pipe你不应该使用它)。
将MinSpareServers设置为与MaxSpareServers相同的值并没有什么意义 – 这相当于支持需求pipe理的滞后目的。
我没有看到你引用的post中的“调整Apache”部分。 我可以看到,似乎没有提供作者如何测量Web服务器的足迹的任何解释。 看到这个问题和答案 。
5的keepAliveTimeout似乎很高 – 也没有提供任何解释。
我没有看到将maxKeepAliveRequests设置为“大约三分之二的MaxClients”的逻辑
假设一个平均53Mb的进程(这对我来说似乎相当大)和613Mb的空闲内存,我会从如下开始:
keepAliveTimeout 1 maxKeepAliveRequests 15 <IfModule prefork.c> StartServers 5 MinSpareServers 2 MaxSpareServers 4 MaxClients 10 MaxRequestsPerChild 4000 </IfModule>
但是如果你有很多从每个页面引用的静态文件,那么你可能想强制更多的服务器运行。
maxrequestsperchild设置为1000可能是好的。