<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ivaneeo's blog

    自由的力量,自由的生活。

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

    前些天給echo_server寫了個非常簡單的連接壓力測試程序,

    1. -module(stress_test)
    2.  
    3. -export([start/0tests/1])
    4.  
    5. start() -> 
    6.     tests(12345)
    7.  
    8. tests(Port) -> 
    9.     io:format("starting~n")
    10.     spawn(fun() -> test(Port) end)
    11.     spawn(fun() -> test(Port) end)
    12.     spawn(fun() -> test(Port) end)
    13.     spawn(fun() -> test(Port) end)
    14.  
    15. test(Port) -> 
    16.      case gen_tcp:connect("192.168.0.217"Port[binary,{packet0}])of 
    17.     {ok_} -> 
    18.             test(Port)
    19.     _ -> 
    20.         test(Port) 
    21.     end.

    一開始我的這個stress_test客戶端運行在windows上面, echo_server服務器端運行在linux上面。結果接受了1016個連接就停止了. 于是我用ulimit -n 改了服務器端的文件描述符數量為10240. 接著還是如此,折騰了幾天,最終還是沒有搞明白。

    于是就求助于公司的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的帖子.

    1. $./configure --enable-kernel-poll

    由于我們的測試服務器是雙核的,我們在配置的時候也打開了smp支持. 歡快的make & make install之后….
    把 /proc/sys/net/ipv4/ip_local_port_range 的內容改成了1024到65535. 最多也也能改成65535 :)

    1. $echo 1024 65535 > ip_local_port_range

    另外再添加一個erl的環境變量

    1. $export ERL_MAX_PORTS=102400

    于是開始跑了,不過這次跑不一樣了
    echo_server

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

    stress_test

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

    這里的+K true,表示使用內核poll,+S 2 表示兩個核. 這樣可歡快啦~~~ 10w大關過咯! 而且比剛才沒用epoll的速度快暴多~~
    于是我們又開始了204800個連接發測試了~~~

    用top一看cpu占用率極低,服務器只在5%左右。內存也不是很大~~

    posted on 2009-10-27 15:49 ivaneeo 閱讀(367) 評論(0)  編輯  收藏 所屬分類: erlang-分布式語言
    主站蜘蛛池模板: 男女拍拍拍免费视频网站| 添bbb免费观看高清视频| 国产无遮挡无码视频免费软件| 日本二区免费一片黄2019| 亚洲日日做天天做日日谢| 男女免费观看在线爽爽爽视频| 亚洲精品中文字幕麻豆| 99久久免费中文字幕精品| 最新国产成人亚洲精品影院| 免费看又黄又无码的网站| 久久精品国产亚洲av水果派| 19禁啪啪无遮挡免费网站| 亚洲国产av高清无码| 毛片视频免费观看| 亚洲AV噜噜一区二区三区| 免费一级毛片在线播放| 国产黄色片免费看| 亚洲va国产va天堂va久久| 曰批全过程免费视频播放网站| 亚洲免费人成视频观看| 热99re久久精品精品免费| 黄页网站在线免费观看| 亚洲国产精彩中文乱码AV| 日本在线看片免费人成视频1000 | 久久久亚洲裙底偷窥综合| 成年人视频免费在线观看| 国产亚洲精品国看不卡| 欧洲人免费视频网站在线| 亚洲精品综合久久| 国产免费一区二区三区不卡| 亚洲最大在线视频| 免费观看午夜在线欧差毛片| 中文字幕av免费专区| 亚洲成人免费网站| 亚洲国产精品视频| 91精品导航在线网址免费| 亚洲日韩国产欧美一区二区三区| 亚洲精品无码永久在线观看| 日韩中文字幕免费视频| 在线观看亚洲免费| 亚洲av无码精品网站|