免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1957 | 回复: 2
打印 上一主题 下一主题

[其他] erlang,10W并发,大家看看,我这样测试方法不正确么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-21 16:33 |只看该作者 |倒序浏览
本帖最后由 arserangel 于 2014-04-21 16:46 编辑

这是服务端的代码,接收请求,处理数据:
----------------------------------------------------------------------------------------------------------
  1. -module(t_server).
  2. -export([start/0, start/1, wait_connect/1, response/1]).

  3. -define(PORT, 8091).

  4. start() -> start(?PORT).
  5. start(Port) ->
  6.     {ok, Lsocket} = gen_tcp:listen(Port, [binary, {active, false}, {reuseaddr, true}]),
  7.     wait_connect(Lsocket).

  8. wait_connect(Lsocket) ->
  9.     {ok, Socket} = gen_tcp:accept(Lsocket),
  10.     spawn(?MODULE, wait_connect, [Lsocket]),
  11.     get_request(Socket, []).

  12. get_request(Socket, BinaryList) ->
  13.     case gen_tcp:recv(Socket, 0) of
  14.         {ok, Binary} ->
  15.             get_request(Socket, [Binary | BinaryList]);
  16.         {error, closed} ->
  17.             response(lists:reverse(BinaryList))
  18.     end.

  19. response(_Data) ->
  20.     ok.
复制代码
这是客户端的代码,就是发送一个链接,然后,发送过去一个数字而已:
----------------------------------------------------------------------------------------------------------
  1. -module(t_client).
  2. -export([start/0, start/1, connect/2]).

  3. -define(HOST, {127, 0, 0, 1}).
  4. -define(PORT, 8091).
  5. -define(NUM, 102400).

  6. start() -> start(?NUM).
  7. start(Num) ->
  8.     io:format("Starting to test the concurrent~n", []),
  9.     io:format("Current: ~p ~p~n", [date(), time()]),
  10.     connect(Num, Num).

  11. connect(0, MaxNum) ->
  12.     io:format("Over, finish to test concurrent[~p]: ~p ~p~n", [MaxNum, date(), time()]);
  13. connect(CurNum, MaxNum) when CurNum =< MaxNum ->
  14.     case gen_tcp:connect(?HOST, ?PORT, [binary, {packet, 0}]) of
  15.         {ok, Socket} ->
  16.             gen_tcp:send(Socket, io_lib:fwrite("~p", [CurNum])),
  17.             spawn(?MODULE, connect, [CurNum - 1, MaxNum]);
  18.         _R ->
  19.             io:format("Error: ~p, CurNum: ~p, MaxNum: ~p~n", [_R, CurNum, MaxNum])
  20.     end.
复制代码
这些配置:
ulimit -n 51200
ip_local_port_range 1024 61000
也设置过了,

现在 10万并发, 要7秒左右。

我机器配置是: 4核, I5-5320, 6G 内存, erlang 版本是 1603B
我测度过,除掉 socket连接,单单生成进程,100万,约1秒时间,但涉及 socket 慢了 10倍。。。

有加参数优化  -K true -S 4 -P 204800
问题出在了哪里了?

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
2 [报告]
发表于 2014-04-21 16:51 |只看该作者
好上流,看不懂
whatsapp后台就是erlang写的。

论坛徽章:
0
3 [报告]
发表于 2014-04-22 23:13 |只看该作者
timespace 发表于 2014-04-21 16:51
好上流,看不懂
whatsapp后台就是erlang写的。


哈哈,谢谢啊。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP