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

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

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

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    yanf4j 1.0-stable的一個壓測報告

    Posted on 2009-10-09 14:08 dennis 閱讀(3130) 評論(2)  編輯  收藏 所屬分類: java
        采用的是jboss netty的benchmark,環境是兩臺linux機器,都是4核16G內存以及2.6內核,網絡環境是公司內網,帶寬是1Gbps,JDK1.6.0_07。對比的是mina 2.0M6yanf4j 1.0-stable,兩者都在壓到16K,5000并發的時候客戶端退出,因此后面給出的圖有個16K的在5000并發為0,事實上只是幾個連接失敗,但是benchmark client就忽略了這個數據。實際過程還測試了1萬并發連接的情況,但是由于測試客戶端很容易退出,因此最后還是選定最大并發5000。注意,并非mina和yanf4j無法支撐1萬個連接,而是benchmark client本身的處理,再加上內核tcp參數沒有調整造成的。

    首先看源碼,mina的Echo Server:
    package org.jboss.netty.benchmark.echo.server;

    import java.net.InetSocketAddress;

    import org.apache.mina.core.buffer.IoBuffer;
    import org.apache.mina.core.service.IoHandlerAdapter;
    import org.apache.mina.core.session.IoSession;
    import org.apache.mina.filter.executor.ExecutorFilter;
    import org.apache.mina.transport.socket.SocketAcceptor;
    import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
    import org.jboss.netty.benchmark.echo.Constant;

    /**
     * 
    @author The Netty Project (netty-dev@lists.jboss.org)
     * 
    @author Trustin Lee (tlee@redhat.com)
     *
     * 
    @version $Rev: 394 $, $Date: 2008-10-03 12:55:27 +0800 (星期五, 03 十月 2008) $
     *
     
    */
    public class MINA {

        
    public static void main(String[] args) throws Exception {
            
    boolean threadPoolDisabled = args.length > 0 && args[0].equals("nothreadpool");

            SocketAcceptor acceptor 
    = new NioSocketAcceptor(Runtime.getRuntime().availableProcessors());
            acceptor.getSessionConfig().setMinReadBufferSize(Constant.MIN_READ_BUFFER_SIZE);
            acceptor.getSessionConfig().setReadBufferSize(Constant.INITIAL_READ_BUFFER_SIZE);
            acceptor.getSessionConfig().setMaxReadBufferSize(Constant.MAX_READ_BUFFER_SIZE);
            acceptor.getSessionConfig().setThroughputCalculationInterval(
    0);
            acceptor.getSessionConfig().setTcpNoDelay(
    true);
            acceptor.setDefaultLocalAddress(
    new InetSocketAddress(Constant.PORT));

            
    if (!threadPoolDisabled) {
                
    // Throttling has been disabled because it causes a dead lock.
                
    // Also, it doesn't have per-channel memory limit.
                acceptor.getFilterChain().addLast(
                        
    "executor",
                        
    new ExecutorFilter(
                                Constant.THREAD_POOL_SIZE, Constant.THREAD_POOL_SIZE));
            }

            acceptor.setHandler(
    new EchoHandler());
            acceptor.bind();

            System.out.println(
    "MINA EchoServer is ready to serve at port " + Constant.PORT + ".");
            System.out.println(
    "Enter 'ant benchmark' on the client side to begin.");
            System.out.println(
    "Thread pool: " + (threadPoolDisabled? "DISABLED" : "ENABLED"));
        }

        
    private static class EchoHandler extends IoHandlerAdapter {

            EchoHandler() {
                
    super();
            }

            @Override
            
    public void messageReceived(IoSession session, Object message)
                    
    throws Exception {
                session.write(((IoBuffer) message).duplicate());
            }

            @Override
            
    public void exceptionCaught(IoSession session, Throwable cause)
                    
    throws Exception {
                session.close();
            }
        }
    }


    再看Yanf4j的Echo Server,沒有多大區別:
    package org.jboss.netty.benchmark.echo.server;

    import java.nio.ByteBuffer;
    import org.jboss.netty.benchmark.echo.Constant;

    import com.google.code.yanf4j.config.Configuration;
    import com.google.code.yanf4j.core.Session;
    import com.google.code.yanf4j.core.impl.HandlerAdapter;
    import com.google.code.yanf4j.core.impl.StandardSocketOption;
    import com.google.code.yanf4j.nio.TCPController;

    public class Yanf4j {

        
    public static void main(String[] args) throws Exception {
            
    boolean threadPoolDisabled = args.length > 0
                    
    && args[0].equals("nothreadpool");
            Configuration configuration 
    = new Configuration();
            configuration.setCheckSessionTimeoutInterval(
    0);
            configuration.setSessionIdleTimeout(
    0);
            configuration
                    .setSessionReadBufferSize(Constant.INITIAL_READ_BUFFER_SIZE);
            TCPController controller 
    = new TCPController(configuration);
            controller.setSocketOption(StandardSocketOption.SO_REUSEADDR, 
    true);
            controller.setSocketOption(StandardSocketOption.TCP_NODELAY, 
    true);
            controller.setHandler(
    new EchoHandler());
            
    if (!threadPoolDisabled) {
                controller.setReadThreadCount(Constant.THREAD_POOL_SIZE);
            }
            controller.bind(Constant.PORT);
            System.out.println(
    "Yanf4j EchoServer is ready to serve at port "
                    
    + Constant.PORT + ".");
            System.out
                    .println(
    "Enter 'ant benchmark' on the client side to begin.");
            System.out.println(
    "Thread pool: "
                    
    + (threadPoolDisabled ? "DISABLED" : "ENABLED"));
        }

        
    static class EchoHandler extends HandlerAdapter {
            @Override
            
    public void onMessageReceived(final Session session, final Object msg) {
                session.write(((ByteBuffer) msg).duplicate());
            }

            @Override
            
    public void onExceptionCaught(Session session, Throwable t) {
                session.close();
            }

        }
    }

        兩者都啟用線程池(16個線程),開啟TCP_NODELAY選項,Client采用SYNC模式,壓測結果如下(僅供參考),分別是數據大小為128、1K、4K和16K情況下,隨著并發client上升吞吐量的對比圖:














    系統的資源消耗來看,Mina的load相對偏高。

    評論

    # re: yanf4j 1.0-stable的一個壓測報告  回復  更多評論   

    2009-10-10 10:05 by wzjin
    yanf4j 看來不錯!

    # re: yanf4j 1.0-stable的一個壓測報告  回復  更多評論   

    2009-10-10 11:10 by dennis
    @wzjin
    這個測試可能對mina不公平吧,畢竟mina封裝的比較多,包括ByteBuffer的封裝上面。只的定位不同,yanf4j的目標就是簡單高效。
    主站蜘蛛池模板: 亚洲色一色噜一噜噜噜| 亚洲欧美国产精品专区久久| 成人免费a级毛片无码网站入口| 一级毛片免费全部播放| 四虎必出精品亚洲高清| 亚洲ⅴ国产v天堂a无码二区| 免费人成网站7777视频| 成人男女网18免费视频| 18禁美女裸体免费网站| 怡红院免费全部视频在线视频| 亚洲另类自拍丝袜第五页| 亚洲国产精品久久网午夜| 亚洲成AV人片在WWW色猫咪| 亚洲国产黄在线观看| 免费鲁丝片一级观看| 国产免费毛不卡片| 96免费精品视频在线观看| 国产日韩AV免费无码一区二区 | 国产亚洲漂亮白嫩美女在线| 亚洲人成电影院在线观看| 亚洲视频在线免费观看| 亚洲精品国偷自产在线| 亚洲色大成网站WWW久久九九| 亚洲国产成人影院播放| 亚洲精品无码日韩国产不卡?V| 国产精品嫩草影院免费| 精品免费久久久久久成人影院| 美女网站免费福利视频| 99久久99这里只有免费费精品 | 亚洲阿v天堂在线2017免费| 成人看的午夜免费毛片| 最近中文字幕无免费视频 | 亚洲性猛交xx乱| 亚洲精品中文字幕无乱码| 久久久久亚洲AV无码永不| 久久久久亚洲精品无码蜜桃| 亚洲精品中文字幕麻豆| 亚洲国产日韩在线成人蜜芽| 亚洲xxxxxx| 亚洲国产成人AV在线播放| 精品韩国亚洲av无码不卡区|