web-services – gen_tcp接收极高的CPU

web-services – gen_tcp接收极高的CPU,第1张

概述对不起,我是一个Erlang新手,可能会提出愚蠢的问题.但请帮我解决这个问题. 我已经编写了一个Erlang服务器来替换我正在使用的Node.js,它占用了我所有的记忆,我祈祷Erlang可能是一个出路. 服务器在单元测试和内部测试下正常工作,但在压力测试中面临高CPU使用率. 在减少之后,我发现CPU突发是由于客户端的TCP接收造成的. receiveClientPacket(Sock) -> 对不起,我是一个Erlang新手,可能会提出愚蠢的问题.但请帮我解决这个问题.

我已经编写了一个Erlang服务器来替换我正在使用的Node.Js,它占用了我所有的记忆,我祈祷Erlang可能是一个出路.
服务器在单元测试和内部测试下正常工作,但在压力测试中面临高cpu使用率.

在减少之后,我发现cpu突发是由于客户端的TCP接收造成的.

receiveClIEntPacket(Sock) ->  inet:setopts(Sock,[{active,once},{buffer,?CLIENTHEARTBEATSIZE}]),receive    {tcp,Sock,Data} ->      {ok,Data};    {tcp_closed,Sock} ->      {error,closed}    after ?CLIENTRECCEIVETIMEOUT ->      {error,timeout}  end.

我试着在函数开始时让进程休眠10个小时(以防止它调用receive),cpu根本没有爆发.
因此我得出结论,cpu的突发是由于TCP接收造成的. (如果我犯了任何错误,请纠正我)

以下是有关压力测试的信息:

>启动Erlang服务器:erl zdbbl 2097151 -K true A 128 P.
> 5000000将5000个客户端连接到每个连接的Erlang服务器
>客户端每隔1分钟就向服务器发送一个2字节的数据
>连接完成,(即每分钟仅执行2字节数据),cpu突发到~30%sy(来自“top”)

我正在为Erlang服务器使用Amazon linux AMI(大型实例,64位).是由于linux的爆发?因为我不知道系统将如何耗尽cpu.或者这是我糟糕的代码问题? (我相信是这样…)

在实际情况中,我们的服务器不仅接收乒乓球,还接收消息,这是更多的负载……这只是第一步……

数以百万计的感谢任何能救我的人.

梅艳芳〜*

~~~~~~~~~~~~~~~~~~~~~~~

有关大型实例的信息(供参考):

> 7.5 GB内存
> 4个EC2计算单元(2个虚拟核,每个具有2个EC2计算单元)
> 850 GB实例存储
> 64位平台
> I / O性能:高

解决方法 这篇关于 Building a non-blocking TCP server using OTP principles的文章对您来说可能是一本有趣的读物.您还可以查看 Ranch,它是 Cowboy Erlang http服务器使用的,它可以支持大量连接,保持较低的内存占用. 总结

以上是内存溢出为你收集整理的web-services – gen_tcp接收极高的CPU全部内容,希望文章能够帮你解决web-services – gen_tcp接收极高的CPU所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1135652.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存