如何微调牛仔的运行时行为?

时间:2014-06-20 13:29:43

标签: performance erlang elixir cowboy phoenix-framework

我正在为我的高吞吐量Web服务器选择技术。我创建了两个天真的实现,一个在Go中,另一个在Elixir中,使用Phoenix。

我已在AWS上的超大型计算机上部署了这些版本,并使用围攻来衡量其性能。

设置GOMAXPROCS后,我设法提高了Go的性能,但运行Elixir版本似乎在充分利用机器的CPU或内存之前很久就达到了最佳性能。

我似乎找不到任何关于如何在生产设置中微调牛仔行为的文档或解释,因此它将正确利用它运行的机器,并产生每个人都谈论的性能......

我很确定有一个简单的地方(文件或环境变量),我可以调整一两个值来产生更好的结果。

谁能告诉我这个地方可能在哪里?

2 个答案:

答案 0 :(得分:6)

根据评论中的建议,我使用plug代替phoenix重新实施了我的项目。

具有相同的功能(将帖子体分析为JSON,调用DynamoDB,从Amnesia表中读取并格式化JSON响应)我收到了更好的性能,资源利用率更高。

我想我仍然可以每秒“挤出”更多的请求(目前我每秒可以获得大约500个请求),但它现在与同样的Go实现相当......

答案 1 :(得分:6)

我没有足够的代表直接评论,所以我会在这里回答。我很想看到凤凰城的数据。你在prod模式下运行?如果您在dev(默认)中运行,则Perf会慢得多,因为启用了代码重新加载并检查每个请求。 Vanilla Plug的工作量将比Phoenix少,但不会少。标准的Phoenix路由器/控制器应该或多或少地与最终的插件代码一致。