• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            教父的告白
            一切都是紙老虎
            posts - 82,  comments - 7,  trackbacks - 0
            原文網址: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. 接著還是如此,折騰了幾天,最終還是沒有搞明白。
            于是就求助于公司的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%左右。內存也不是很大~~
            posted on 2009-09-14 11:20 暗夜教父 閱讀(503) 評論(0)  編輯 收藏 引用 所屬分類: erlang

            <2009年9月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            常用鏈接

            留言簿(2)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久久久综合日本亚洲| 人妻丰满?V无码久久不卡| 一本久久免费视频| 久久综合视频网站| 国产成人无码精品久久久免费| 国产精品久久久久无码av| 潮喷大喷水系列无码久久精品| 亚洲AV无码久久精品狠狠爱浪潮| 久久乐国产综合亚洲精品| 亚洲国产精品成人AV无码久久综合影院| 久久99精品久久久久久9蜜桃 | 四虎亚洲国产成人久久精品| 久久久久亚洲精品中文字幕| 国产精品99久久精品爆乳| 精品久久人人妻人人做精品| 伊人久久大香线蕉无码麻豆 | 丁香五月综合久久激情| 久久精品这里只有精99品| 亚洲人AV永久一区二区三区久久 | 精品久久久久中文字幕日本| 久久精品欧美日韩精品| 国产高清国内精品福利99久久| 日日狠狠久久偷偷色综合96蜜桃| 一本久久a久久精品亚洲| 精品国产91久久久久久久| 久久精品国产72国产精福利| 久久99久国产麻精品66| 国内精品伊人久久久久AV影院| 9999国产精品欧美久久久久久| 午夜精品久久久久9999高清| 国产精品一久久香蕉产线看| 久久人人爽人人爽人人片AV东京热| 精品国产乱码久久久久久呢| 99久久精品国产一区二区蜜芽| 久久99九九国产免费看小说| 久久99久久99小草精品免视看| 午夜精品久久久久久影视riav| 久久最近最新中文字幕大全 | 久久久久婷婷| 精品精品国产自在久久高清| 久久人做人爽一区二区三区 |