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

Posted

技术标签:

【中文标题】如何使用 Django/Apache/mod_wsgi/MySQL 最大化 EC2 的性能?【英文标题】:How can I maximize performance on EC2 with Django/Apache/mod_wsgi/MySQL? 【发布时间】:2012-08-01 01:49:13 【问题描述】:

我正在使用 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 线程堆栈 = 192K thread_cache_size = 8 query_cache_limit = 1M query_cache_size = 16M

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

WSGIDaemonProcess mysite.com user=me group=me processes=7 线程=20 最大请求数=1000000

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

【问题讨论】:

【参考方案1】:

您是否对您的所有网站进行了实时监控,以便了解它的实际用途?观看我的 PyCon 演讲,您希望会意识到这一切都取决于您的特定应用程序,而我们对此一无所知。

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

【讨论】:

【参考方案2】:

您的所有 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% 的可能最大性能。

【讨论】:

以上是关于如何使用 Django/Apache/mod_wsgi/MySQL 最大化 EC2 的性能?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?