繁体   English   中英

如何使用Django / Apache / mod_wsgi / MySQL在EC2上最大化性能?

[英]How can I maximize performance on EC2 with Django/Apache/mod_wsgi/MySQL?

我在具有Ubuntu 12.04 LTS的EC2 m1.medium实例(3.75 Gb内存,2个EC2计算单元,410 Gb实例存储,中等性能)上运行Django支持的站点。 我的EC2实例上的MySQL设置如下(来自/etc/mysql/my.cnf):

key_buffer = 16M
max_allowed_pa​​cket = 16M
thread_stack = 192K
thread_cache_size = 8
query_cache_limit = 1M
query_cache_size = 16M

来自/etc/apache2/sites-available/mysite.com的mod_wsgi设置:

WSGIDaemonProcess mysite.com用户=我组=我进程= 7个线程= 20个最大请求= 1000000

给定我的配置,我可以设置的最大进程/线程/请求数是多少? 我尝试了一些值,但它们导致MySQL崩溃。 是否可以将MySQL key_buffer设置为0.75Gb(EC2实例上3.75Gb RAM的20%)? 提前致谢!

您所有的MySQL变量似乎都很低。 首先,最重要的事情是:您使用什么存储引擎? Key_buffer_size仅对MyISAM存储引擎有效。

如果您使用的是MyISAM,请执行以下操作:

> select sum(index_length) / 1024 / 1024 as index_size_MB from information_schema.Tables where Table_schema = 'knagy' and Engine = 'MyISAM';
+---------------+
| index_size_MB |
+---------------+
|    0.16992188 |
+---------------+

这将向您显示索引的大小。 如果有足够的RAM,则应将此值大致设置为key_buffer_size 但是不要将其增加到超过可用RAM的50-60%。

如果您使用的是InnoDB,请尝试使用索引将innodb_buffer_pool设置为数据集的大小:

> select sum(index_length + data_length) / 1024 / 1024 as innodb_MB from information_schema.Tables where Table_schema = 'knagy' and Engine = 'InnoDB';
+--------------+
| innodb_MB    |
+--------------+
| 403.04687500 |
+--------------+

您可以将其设置为最多80%的可用RAM,当然要考虑其他应用程序的内存使用情况。

只有进行这些更改之一,您才能获得显着的性能提升。

如果看到threads_created状态变量快速增加,则可以将thread_cache_size增大为30-50左右或更多。

当然,还有很多进一步的优化,但这将使您获得可能的最高性能的80-90%。

您是否在所有站点上都进行实时监视,以便了解它的真正作用? 观看我的PyCon演讲,您将希望意识到的一件事是,这完全取决于您的特定应用程序,而我们对此一无所知。

http://lanyrd.com/2012/pycon/spcdg/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM