Memory 如何减少Apache的平均进程大小?

Memory 如何减少Apache的平均进程大小?,memory,amazon-ec2,apache2,flask-sqlalchemy,flask-restless,Memory,Amazon Ec2,Apache2,Flask Sqlalchemy,Flask Restless,我正在运行一个用Python()编写的数据库的API,并使用apache2和mod_wsgi提供服务 该应用程序托管在自动缩放组内的AWS EC2实例上。 我们目前正在托管m3.medium实例,这些实例具有: 1 vCPU 3.75 Gb内存 我们经常遇到的一个问题是内存错误。Apache耗尽了实例中的所有可用内存,并导致[关键内存分配]失败。apache的这个问题是 文档和其他S.O.问题解释说,我可以通过找到apache进程的平均大小,然后限制MaxRequestWorkers(也称为

我正在运行一个用Python()编写的数据库的API,并使用apache2和mod_wsgi提供服务

该应用程序托管在自动缩放组内的AWS EC2实例上。 我们目前正在托管m3.medium实例,这些实例具有:

  • 1 vCPU
  • 3.75 Gb内存
我们经常遇到的一个问题是内存错误。Apache耗尽了实例中的所有可用内存,并导致
[关键内存分配]
失败。apache的这个问题是

文档和其他S.O.问题解释说,我可以通过找到apache进程的平均大小,然后限制
MaxRequestWorkers
(也称为
MaxClients
)为了确保我不能启动超过可用内存的worker,但是大多数文档没有说明如何减少apache首先使用的RAM

我使用以下命令给出平均进程大小:

sudo ps-ylC apache2 | awk'{x+=$8;y+=1}END{print“Apache内存使用率(MB):“x/1024;print”平均进程大小(MB):“x/((y-1)*1024)}”

目前约为130Mb,这是一个不合理的大数字吗

sudo free-m
显示我有~3000Mb的可用内存,这样我就可以在使用太多内存之前拥有3000/130=~20个工作线程

我可以成功地限制工作进程的数量,以防止内存使用过多,但是当我这样做时,结果就是每分钟丢弃约100个请求,返回504个错误。在我的情况下,这是不可接受的

显然,我有两个选择,增加服务器中的RAM量或减少每个Apache进程消耗的内存量

我已经从apache中删除了不必要的模块,但我不再确定还能做些什么来减少每个apache2进程的内存占用。我想运行50-100个工人,这将需要13GB的内存,这似乎过高

WebApp用于管理一个由约30000个互联网连接产品组成的系统。大多数请求都是记录到系统的连接或向用户返回json数据数组

我的Apache2.conf文件如下:

Timeout 120
KeepAlive on
MaxKeepAliveRequests 100
KeepAliveTimeout 5
ThreadsPerChild 20
MaxRequestWorkers 100
ServerLimit 100
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
AccessFileName .htaccess
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
考虑到我认为我的应用程序不应该要求服务器具有13+Gb的RAM,并且我不想减少MaxRequestWorker的数量,因为这样做会导致系统拒绝大约100个请求/分钟,我现在可以采取哪些步骤