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

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

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

    ivaneeo's blog

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

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

    前些天給echo_server寫了個(gè)非常簡(jiǎn)單的連接壓力測(cè)試程序,

    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.

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

    于是就求助于公司的linux編程牛人,結(jié)果讓我一倒… 客戶端沒有修改文件描述符個(gè)數(shù). windows上得在注冊(cè)表里面改.

    牛人開始對(duì)這東西的性能感興趣了,剛好我摸了一陣子erlang的文檔,于是我倆就走向了erlang網(wǎng)絡(luò)連接的性能調(diào)優(yōu)之旅啦~~過程真是讓人興奮。 我們很快通過了1024這一關(guān)~~到了4999個(gè)連接,很興奮.

    但為什么4999個(gè)連接呢, 檢查一下代碼終于發(fā)現(xiàn)echo_server.erl定義了一個(gè)宏, 最大連接數(shù)為5000. 我又倒~~

    修改編譯之后, 連接數(shù)跑到101xx多了, 太哈皮了!

    再測(cè)102400個(gè)連接時(shí),到32767個(gè)連接數(shù)erl掛了~說是進(jìn)程開得太多了. 好在記得這個(gè)erl的參數(shù)+P,可以定義erlang能生成的進(jìn)程數(shù). 默認(rèn)是32768. 改了!

    后面不知怎么著,在81231個(gè)連接停止了. 新的性能瓶頸又卡了我們. 好在牛人對(duì)linux熟, 用strace(這東西會(huì)莫名地退出), stap查出一些苗頭. 我也想到在otp文檔好像提過另一個(gè)limit,那就是端口數(shù)…在此同時(shí)我們發(fā)現(xiàn)erlang在linux上是用的傳統(tǒng)poll模型. 但查erlang的源代碼發(fā)現(xiàn)是支持epoll的. 在網(wǎng)上搜了半天,終于搜到了個(gè)maillist的帖子.

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

    由于我們的測(cè)試服務(wù)器是雙核的,我們?cè)谂渲玫臅r(shí)候也打開了smp支持. 歡快的make & make install之后….
    把 /proc/sys/net/ipv4/ip_local_port_range 的內(nèi)容改成了1024到65535. 最多也也能改成65535 :)

    1. $echo 1024 65535 > ip_local_port_range

    另外再添加一個(gè)erl的環(huán)境變量

    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,表示使用內(nèi)核poll,+S 2 表示兩個(gè)核. 這樣可歡快啦~~~ 10w大關(guān)過咯! 而且比剛才沒用epoll的速度快暴多~~
    于是我們又開始了204800個(gè)連接發(fā)測(cè)試了~~~

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

    posted on 2009-10-27 15:49 ivaneeo 閱讀(371) 評(píng)論(0)  編輯  收藏 所屬分類: erlang-分布式語(yǔ)言
    主站蜘蛛池模板: 亚洲午夜精品久久久久久浪潮| 毛片无码免费无码播放 | 成人免费毛片内射美女-百度| 久久久久久AV无码免费网站 | 亚洲人成网站色在线观看| 亚洲精品国产电影午夜| 亚洲网址在线观看你懂的| 久久精品7亚洲午夜a| 久久亚洲精品成人| 久久亚洲精品无码VA大香大香| 7777久久亚洲中文字幕蜜桃| 亚洲电影免费观看| 久久精品国产亚洲AV忘忧草18| 亚洲一级特黄特黄的大片 | 亚洲美女又黄又爽在线观看| 精品亚洲综合久久中文字幕| 亚洲午夜免费视频| 亚洲性色成人av天堂| 亚洲国产乱码最新视频| 色偷偷噜噜噜亚洲男人| 污污视频网站免费观看| 羞羞视频免费网站在线看| 久草免费福利资源站| 国产成人免费高清激情明星| 成人免费视频观看无遮挡| 国产免费久久精品久久久| 亚洲精品美女久久久久99小说| 中文字幕无码精品亚洲资源网| 综合亚洲伊人午夜网| 亚洲电影中文字幕| 亚洲人成小说网站色| 人人爽人人爽人人片A免费| 成全视频在线观看免费| 永久在线免费观看| 免费看的黄色大片| 亚洲视频人成在线播放| 久久亚洲美女精品国产精品 | 亚洲中久无码永久在线观看同| 久久精品国产亚洲77777| 亚洲综合久久精品无码色欲| 一级特黄a免费大片|