<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的目標就是簡單高效。
    主站蜘蛛池模板: 国产一卡2卡3卡4卡无卡免费视频 国产一卡二卡3卡四卡免费 | 热re99久久6国产精品免费| 久久久久久影院久久久久免费精品国产小说 | 久久久精品免费视频| 99久久99这里只有免费费精品| 成年美女黄网站18禁免费 | 亚洲人成网站色在线入口| 激情97综合亚洲色婷婷五| 亚洲人成网站影音先锋播放| 亚洲国产人成在线观看| 国产精品亚洲精品久久精品| 国产免费MV大全视频网站| 免费看又黄又无码的网站| 男女交性永久免费视频播放 | 亚洲精品成人片在线播放| 亚洲国产综合精品| 国产亚洲综合一区二区三区| 免费看黄的成人APP| 最新免费jlzzjlzz在线播放| 亚洲综合亚洲综合网成人| 亚洲四虎永久在线播放| 亚洲丰满熟女一区二区哦| 韩国免费A级毛片久久| 思思re热免费精品视频66| 亚洲国产成人久久综合野外| 久久夜色精品国产噜噜噜亚洲AV| 亚洲国产美女精品久久久| a毛片久久免费观看| 成人免费毛片观看| 久久精品国产亚洲av四虎| 亚洲av无码兔费综合| 日本卡1卡2卡三卡免费| 日本免费一区二区三区最新| 亚洲av日韩综合一区在线观看| 亚洲人成网站18禁止| 久久狠狠躁免费观看| 全黄a免费一级毛片人人爱| 亚洲制服中文字幕第一区| 黄页网址在线免费观看| 亚色九九九全国免费视频| 亚洲自偷自偷在线制服|