我有一个带有docker的AWS t2.micro EC2实例,我提出了以下实例;
这导致类似docker stats
;
CONTAINER MEM USAGE/LIMIT MEM %
wordpress 331.9 MB/1.045 GB 31.77%
nginx 18.32 MB/1.045 GB 1.75%
mysql 172.1 MB/1.045 GB 16.48%
然后,我运行siege's默认的15个并发连接,它产生多个apache进程,达到EC2实例的内存限制,由于没有更多内存而崩溃docker和bash,需要我干预才能获得它全部再次运行。
我对此有几个问题。
*我已经完成this将mysql内存从22%降至15%。
答案 0 :(得分:4)
鉴于t2.micro总共只有1GB,并且每个容器本身都有1GB限制,您是否尝试限制每个容器上的最大内存使用量(按http://docs.docker.com/engine/reference/run/#user-memory-constraints),以便总计内存限制不超过1GB?
答案 1 :(得分:2)
阻止EC2实例崩溃的最大影响是限制了一个docker容器可以使用@ palfrey的答案使用-m
选项的内存。
需要进行一些额外的调整以减少内存占用并使服务响应15个并发用户,尽管速度有些慢。这包括;
performance_schema
KeepAlive
限制服务器:
<IfModule mpm_prefork_module>
StartServers 1
MinSpareServers 1
MaxSpareServers 3
MaxRequestWorkers 10
MaxConnectionsPerChild 3000
</IfModule>
我创建了一些扩展默认图像的docker图像,以包含这些优化;
我blog post中的详细信息。
答案 2 :(得分:0)
可能微型只有1GB的内存。您可以在没有docker的情况下运行此配置,但您必须调整内存限制。 Docker可能会增加一些开销。是否有理由同时运行nginx和apache?
通常,您测试并限制线程到系统可以处理的内容,您可以使用缓存来帮助提高性能。 Apache,nginx,php-fpm都有可以控制允许创建的线程数的设置。