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

Uri*_*ssi 4 erlang performance elixir cowboy phoenix-framework

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

我已经在AWS上的一台超大型机器上部署了这些版本,并使用围攻来衡量它们的性能.

设置完成后我设法提高了Go的性能GOMAXPROCS,但是在完全利用机器的CPU或内存之前,运行Elixir版本似乎达到了最佳性能.

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

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

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

Uri*_*ssi 6

按照评论中的建议,我使用插件而不是凤凰重新实现了我的项目.

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

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


Chr*_*ord 6

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