`
轮回记忆
  • 浏览: 10349 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

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%左右。内存也不是很大~~
分享到:
评论

相关推荐

    走向Erlang网络编程性能调优之旅

    Erlang网络编程性能调优之旅 Erlang是一种功能强大的编程语言,擅长于开发高性能的网络应用程序。在这篇文章中,我们将探索Erlang网络编程性能调优的旅程,从开始的简单连接压力测试到最后的高性能网络服务器的实现...

    erlang简介

    在开发、测试和部署方面,Erlang提供了一系列工具,如开发环境、性能调优工具、调试和跟踪工具。部署时,Erlang支持standalone模式,允许不停机维护和在线升级。此外,Erlang还提供了强大的远程维护功能,如SSH、...

    Manning.Erlang.and.OTP.in.Action.May.2010.MEAP.rar

    8. **性能优化**:探讨Erlang性能调优的技巧,包括内存管理、并发优化和代码优化策略。 这本书对于希望学习Erlang和OTP,或者已经在使用它们进行系统开发的读者来说,是一份宝贵的资源。通过深入学习,读者可以掌握...

    网络优化测试题及答案

    1. 话务量单位是Erlang,表示系统繁忙程度。 2. 天线的主要电气参数包括增益、频带宽度、极化方向和波瓣角宽度等。 3. 蜂窝系统中的分集方式有空间分集、时间分集、频率分集和多径分集等。 4. 小区覆盖过大的原因...

    Erlang.and.OTP.实战

    通过阅读《Erlang 和 OTP 实战》,你将学习如何利用Erlang和OTP的这些特性,构建出能够应对现代网络挑战的系统。书中涵盖了从基础语法到高级特性的全面讲解,还有大量实战案例帮助巩固理解。同时,提供的"更多erlang...

    一个用Erlang公告板系统在一个局域网内构造 BBS 集群,

    10. **性能优化**:针对Erlang的并发特性和BBS的业务特点,进行性能调优,如合理设置进程数量、优化数据结构和查询操作等。 通过上述技术手段和设计策略,我们可以利用Erlang在局域网内构建出一个高可用、高性能的...

    rabbitmq-erlang-client:RabbitMQ的Erlang客户端

    在Erlang客户端中,`connection`模块是与RabbitMQ服务器建立连接的基础,它负责管理网络连接,包括打开、关闭以及心跳检测。`channel`模块则是在连接之上建立的逻辑信道,多个通道可以在单个连接上并发运行,这样...

    服务器测试.zip

    7. **性能优化**:尽管Erlang天生适合处理并发,但仍然需要学习如何编写高效代码,避免内存泄漏,以及如何使用Erlang的性能分析工具进行调优。 通过深入学习和实践这个"服务器测试.e"文件,我们可以逐步掌握Erlang...

    otp_win64_22.0.exe下载

    Erlang以其并发能力、轻量级进程以及内置的故障恢复机制而闻名,这些特性使得它非常适合于构建实时通信系统,如电话交换网络和现代互联网服务。 在标题提到的"otp_win64_22.0.exe"中,“OTP”是“Open Telecom ...

    gen_udt:实现 UDT 协议的 Erlang 模块

    - **性能监控**:提供统计信息,如传输速率、丢包率等,便于性能调优。 **4. 使用gen_udt** 使用`gen_udt`模块,开发者需要遵循Erlang的行为模式,创建和管理UDT服务器。首先,定义服务器行为,然后初始化连接,...

    rabbitmq-server-3.7.16-1.el7.noarch.zip

    socat是一款多功能网络工具,常用于数据传输和端口转发,这里可能是为了实现RabbitMQ与其他服务或系统的通信桥梁。 “启动rabbit就可以使用”简单地概述了启动RabbitMQ服务的步骤。在RHEL 7上,一般通过`systemctl ...

    RabbitMQ消息服务用户手册2

    - 集群允许单个节点故障,但网络分区(network partitions)可能导致复杂问题,集群推荐在局域网(LAN)环境下运行。在广域网(WAN)环境下,建议使用Shovel或Federation插件来实现跨节点的数据同步。 7. **节点...

    EMQTT(Erlang MQTT消息服务器) v2.3.5 for windows7 x64

    - 对服务器性能进行调优,根据实际负载调整配置。 了解以上知识点,你可以有效地利用EMQTT搭建稳定、高效的MQTT消息服务器,满足物联网应用的需求。在实践中,结合Erlang的并发特性和MQTT的轻量级特性,可以构建出...

    otp-win64-25.1.2 rabbitmq-server-3.11.2

    它提供了强大的并发处理、错误恢复以及容错机制,特别适合于构建大规模并发的网络服务,如即时通讯系统、数据库系统等。OTP的25.1.2版本可能包含了一些性能优化、新功能和已知问题的修复。 "rabbitmq-server-3.11.2...

    emqttd-centos7-v2.3.11.zip

    **MQTT协议与EMQTT介绍** MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅式...在实际操作中,根据具体项目需求,还需要关注EMQTT的监控、故障排查和性能调优等方面,以确保服务的稳定性和效率。

    kazoo呼叫检查器

    5. **性能调优**:通过持续监控和分析,Kazoo可以帮助优化网络配置,提升通话质量和用户体验。 四、使用与部署 Kazoo呼叫检查器通常作为一个独立的服务运行,可以集成到现有的通信系统中。部署过程包括安装、配置...

    淘宝RabbitMQ实验资料_的安装管理以性能优化使用方案及测试_rabbitmq_

    同时,需要安装 Erlang 语言环境,因为 RabbitMQ 是用 Erlang 开发的。 2. **安装**:通过官方仓库或者源码编译安装 RabbitMQ。在 Ubuntu 上可以使用 `apt-get`,在 CentOS 上使用 `yum` 或 `dnf`。 3. **启动与停止...

    Rabbit详细使用手册

    **3.2 性能调优** - **内存管理**: - 优化 Erlang 虚拟机的内存配置以提高性能。 - 可以调整最大堆大小、垃圾回收策略等参数。 - **网络配置**: - 调整网络缓冲区大小、连接超时时间等。 - 提高网络传输效率...

Global site tag (gtag.js) - Google Analytics