【转】erlang 网络调优实战

原文网址:erlang网络编程的几个性能调优和注意点
原文作者:coderplay

前些天给echo_server写了个非常简单的连接压力测试程序,
下载: stress_test.erl

-module(stress_test).

-export([start/0, tests/1]).

start() ->
tests(12345).

tests(Port) ->
io:format("starting~n"),
spawn(fun() -> test(Port) end),
spawn(fun() -> test(Port) end),
spawn(fun() -> test(Port) end),
spawn(fun() -> test(Port) end).

test(Port) ->
case gen_tcp:connect("192.168.0.217", Port, [binary,{packet, 0}]) of
{ok, _} ->
test(Port);
_ ->
test(Port)
end.

一开始我的这个stress_test客户端运行在windows上面, echo_server服务器端运行在linux上面。结果接受了1016个连接就停止了. 于是我用ulimit -n 改了服务器端的文件描述符数量为10240. 接着还是如此,折腾了几天,最终还是没有搞明白。

于是就qiuzhu于公司的linux编程牛人,结果让我一倒… 客户端没有修改文件描述符个数. windows上得在注册表里面改.

牛人开始对这东西的性能感兴趣了,刚好我摸了一阵子erlang的文档,于是我俩就走向了erlang网络连接的性能调优之旅啦~~过程真是让人兴奋。 我们很快通过了1024这一关~~到了4999个连接,很兴奋.

但为什么4999个连接呢, 检查一下代码终于发现echo_server.erl定义了一个宏, 最大连接数为5000. 我又倒~~

修改编译之后, 连接数跑到101xx多了, 太哈皮了!

再测102400个连接时,到32767个连接数erl挂了~说是进程开得太多了. 好在记得这个erl的参数+P,可以定义erlang能生成的进程数. 默认是32768. 改了!

后面不知怎么着,在81231个连接停止了. 新的性能瓶颈又卡了我们. 好在牛人对linux熟, 用strace(这东西会莫名地退出), stap查出一些苗头. 我也想到在otp文档好像提过另一个limit,那就是端口数…在此同时我们发现erlang在linux上是用的传统poll模型. 但查erlang的源代码发现是支持epoll的. 在网上搜了半天,终于搜到了个maillist的帖子.

$./configure --enable-kernel-poll

由于我们的测试服务器是双核的,我们在配置的时候也打开了smp支持. 欢快的make & make install之后….
把 /proc/sys/net/ipv4/ip_local_port_range 的内容改成了1024到65535. 最多也也能改成65535

$echo 1024 65535 > ip_local_port_range

另外再添加一个erl的环境变量

$export ERL_MAX_PORTS=102400

于是开始跑了,不过这次跑不一样了
echo_server

$erl -noshell +P 102400 +K true +S 2 -smp -s echo_server start

stress_test

$erl -noshell +P 102400 +K true +S 2 -smp -s stress_test start

这里的+K true,表示使用内核poll,+S 2 表示两个核. 这样可欢快啦~~~ 10w大关过咯! 而且比刚才没用epoll的速度快暴多~~
于是我们又开始了204800个连接发测试了~~~

用top一看cpu占用率极低,服务器只在5%左右。内存也不是很大~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值