首页 文章

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

提问于
浏览
1

我正在使用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_packet = 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 user = me group = me processes = 7 threads = 20 maximum-requests = 1000000

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

2 回答

  • 0

    你所有的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 |
    +--------------+
    

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

    只有通过其中一项更改,您才能获得显着的性能提升 .

    如果您看到 threads_created 状态变量快速增加,您可以将 thread_cache_size 增加到大约30-50或更多 .

    当然还有很多进一步的优化,但这将使你获得可能的最大性能的80-90%左右 .

  • 1

    您是否在所有站点都进行了实时监控,以便了解它的确实在做什么?观看我的PyCon演讲,你会发现有一件事情,这一切都取决于你的具体应用,我们对此一无所知 .

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

相关问题