Please try to post an attachment here: http://www.nabble.com/Apache-MINA-Support-Forum-f16869.html
Please let me know if it doesn't work. Trustin On 9/18/07, 李向锋 <[EMAIL PROTECTED]> wrote: > > Sorry, the mail server reject my mail with attatchment ,please help check > this code,thanks. > > -----邮件原件----- > 发件人: Trustin Lee [mailto:[EMAIL PROTECTED] > 发送时间: 2007年9月18日 10:06 > 收件人: [email protected] > 主题: Re: Mina Performance > > Hi, > > Could you zip the source code files and attach to our support forum? > > Thanks, > Trustin > > On 9/18/07, 李向锋 <[EMAIL PROTECTED]> wrote: > > Hello, I Write a Server Demo use Mina-1.1.2,use the > > ObjectSerializationCodecFactory. But When Run This Server,Use a 100 > threads > > Client to test it's performance,it's performance is poor. Server machine > > is 2CPU *2.8G,1G memory ,Suse Linux 9. It Tran/sec only 60~80. I past > the > > code under, who can help me? > > > > > > > > Then,I Run the HttpServer exsample from Mina1.1.2 in same machine, I use > > the apche ab test it.When I use apace ab in 50 concurrency,it performance > > Trans/Sec is 4800,but when I use 100 or more concurrency,it performance is > > very poor, only 100~200 trans/sec. I cannot understand it ,who can tell me > > why? > > > > > > > > > -------------------------------------------Server:-------------------------- > > ----------------------- > > > > > > > > Main.java > > > > > > > > /* > > > > * Licensed to the Apache Software Foundation (ASF) under one > > > > * or more contributor license agreements. See the NOTICE file > > > > * distributed with this work for additional information > > > > * regarding copyright ownership. The ASF licenses this file > > > > * to you under the Apache License, Version 2.0 (the > > > > * "License"); you may not use this file except in compliance > > > > * with the License. You may obtain a copy of the License at > > > > * > > > > * http://www.apache.org/licenses/LICENSE-2.0 > > > > * > > > > * Unless required by applicable law or agreed to in writing, > > > > * software distributed under the License is distributed on an > > > > * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > > > > * KIND, either express or implied. See the License for the > > > > * specific language governing permissions and limitations > > > > * under the License. > > > > * > > > > */ > > > > package test.mina.server; > > > > > > > > import java.net.InetSocketAddress; > > > > import java.util.concurrent.Executors; > > > > > > > > import org.apache.mina.common.DefaultIoFilterChainBuilder; > > > > import org.apache.mina.common.IoAcceptor; > > > > import org.apache.mina.filter.LoggingFilter; > > > > import org.apache.mina.filter.codec.ProtocolCodecFilter; > > > > import > > > org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; > > > > import org.apache.mina.filter.executor.ExecutorFilter; > > > > import org.apache.mina.transport.socket.nio.SocketAcceptor; > > > > import org.apache.mina.transport.socket.nio.SocketAcceptorConfig; > > > > > > > > /** > > > > * (<b>Entry point</b>) Echo server > > > > * > > > > * @author The Apache Directory Project ([EMAIL PROTECTED]) > > > > * @version $Rev: 555855 $, $Date: 2007-07-13 12:19:00 +0900 (旮?, 13 7 > ��? > > 2007) $ > > > > */ > > > > public class Main { > > > > /** Choose your favorite port number. */ > > > > private static final int PORT = 8282; > > > > > > > > /** Set this to true if you want to make the server SSL */ > > > > private static final boolean USE_SSL = false; > > > > > > > > public static void main(String[] args) throws Exception { > > > > // IoAcceptor acceptor = new SocketAcceptor(); > > > > //IoAcceptorConfig config = new SocketAcceptorConfig(); > > > > IoAcceptor acceptor = new SocketAcceptor(4, > > Executors.newCachedThreadPool()); > > > > SocketAcceptorConfig config = new SocketAcceptorConfig(); > > > > > > > > // config.setReuseAddress(true); > > > > config.setBacklog(30); > > > > > > > > // Storager.create(); > > > > // config.getFilterChain().addLast( > > > > // "protocolFilter", > > > > // new ProtocolCodecFilter( > > > > // new TestProtocolCodecFactory(false))); > > > > > > > > config.getFilterChain().addLast( > > > > "protocolFilter", > > > > new ProtocolCodecFilter( > > > > new ObjectSerializationCodecFactory())); > > > > > > > > > > > > > > > > DefaultIoFilterChainBuilder chain = config.getFilterChain(); > > > > > > > > chain.addLast("threadPool", new > > ExecutorFilter(Executors.newCachedThreadPool()) ); > > > > > > > > // addLogger(chain); > > > > > > > > // Bind > > > > acceptor.bind(new InetSocketAddress(PORT), new > > EchoProtocolHandler(), > > > > config); > > > > > > > > System.out.println("Listening on port " + PORT); > > > > } > > > > > > > > > > > > > > > > private static void addLogger(DefaultIoFilterChainBuilder chain) > > > > throws Exception { > > > > chain.addLast("logger", new LoggingFilter()); > > > > System.out.println("Logging ON"); > > > > } > > > > } > > > > > > > > Handler: > > > > > > > > /* > > > > * Licensed to the Apache Software Foundation (ASF) under one > > > > * or more contributor license agreements. See the NOTICE file > > > > * distributed with this work for additional information > > > > * regarding copyright ownership. The ASF licenses this file > > > > * to you under the Apache License, Version 2.0 (the > > > > * "License"); you may not use this file except in compliance > > > > * with the License. You may obtain a copy of the License at > > > > * > > > > * http://www.apache.org/licenses/LICENSE-2.0 > > > > * > > > > * Unless required by applicable law or agreed to in writing, > > > > * software distributed under the License is distributed on an > > > > * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > > > > * KIND, either express or implied. See the License for the > > > > * specific language governing permissions and limitations > > > > * under the License. > > > > * > > > > */ > > > > package test.mina.server; > > > > > > > > import java.util.Properties; > > > > > > > > import org.apache.mina.common.ByteBuffer; > > > > import org.apache.mina.common.IdleStatus; > > > > import org.apache.mina.common.IoHandler; > > > > import org.apache.mina.common.IoHandlerAdapter; > > > > import org.apache.mina.common.IoSession; > > > > import org.apache.mina.common.TransportType; > > > > > > > > import org.apache.mina.transport.socket.nio.SocketSessionConfig; > > > > import org.slf4j.Logger; > > > > import org.slf4j.LoggerFactory; > > > > > > > > import test.mina.TestRequest; > > > > import test.mina.TestResponse; > > > > > > > > public class EchoProtocolHandler extends IoHandlerAdapter { > > > > private static final Logger log = LoggerFactory > > > > .getLogger(EchoProtocolHandler.class); > > > > > > > > public void sessionCreated(IoSession session) { > > > > if (session.getTransportType() == TransportType.SOCKET) { > > > > SocketSessionConfig config = (SocketSessionConfig) > > session.getConfig(); > > > > > > > > config.setReceiveBufferSize(2048); > > > > config.setSoLinger(0); > > > > } > > > > > > > > session.setIdleTime(IdleStatus.BOTH_IDLE, 10); > > > > > > > > } > > > > > > > > public void sessionIdle(IoSession session, IdleStatus status) { > > > > log.info("*** IDLE #" + session.getIdleCount(IdleStatus.BOTH_IDLE) > > > > + " ***"); > > > > } > > > > > > > > public void exceptionCaught(IoSession session, Throwable cause) { > > > > // cause.printStackTrace(); > > > > session.close(); > > > > } > > > > > > > > public void messageReceived(IoSession session, Object message) > > > > throws Exception { > > > > > > > > > > > > TestRequest req = (TestRequest)message; > > > > Processor p = new TESTProcessor(); > > > > > > > > TestResponse res = new TestResponse(0,"OK");// p.process( req ); > > > > session.write(res); > > > > > > > > session.close(); > > > > > > > > } > > > > } > > > > > > > > TestRequest: > > > > package test.mina; > > > > > > > > > > > > import java.io.Serializable; > > > > import java.util.Enumeration; > > > > import java.util.Properties; > > > > > > > > public class TestRequest implements Serializable { > > > > > > > > private String type; > > > > private Properties data; > > > > > > > > /** > > > > * @param type > > > > */ > > > > public TestRequest(String type) { > > > > this.type = type; > > > > } > > > > > > > > /** > > > > * @param type > > > > * @param data > > > > */ > > > > public TestRequest(String type, Properties data) { > > > > this.type = type; > > > > this.data = data; > > > > } > > > > > > > > public Properties getData() { > > > > return data; > > > > } > > > > > > > > public void setData(Properties data) { > > > > this.data = data; > > > > } > > > > > > > > public String getType() { > > > > return type; > > > > } > > > > > > > > public void setKeyValue(String key,String value){ > > > > if(data == null) > > > > data = new Properties(); > > > > data.setProperty( key,value ); > > > > } > > > > > > > > public String getKeyValue(String key){ > > > > if(data==null)return null; > > > > return data.getProperty(key); > > > > > > > > } > > > > > > > > @Override > > > > public String toString() { > > > > StringBuffer buff= new StringBuffer(); > > > > buff.append( "{[TestRequest]" ); > > > > buff.append("[request type:" + type + "]"); > > > > buff.append("[request data:"); > > > > if( data!=null ){ > > > > buff.append( data ); > > > > } > > > > buff.append("]"); > > > > > > > > buff.append("}"); > > > > return buff.toString(); > > > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > } > > > > > > > > TestResponse: > > > > > > > > package test.mina; > > > > > > > > import java.io.Serializable; > > > > import java.util.Properties; > > > > > > > > public class TestResponse implements Serializable { > > > > > > > > private int err=0; > > > > private String msg = "OK"; > > > > > > > > private Properties data; > > > > > > > > public TestResponse(int err, String msg, Properties data) { > > > > this.err = err; > > > > this.msg = msg; > > > > this.data = data; > > > > } > > > > > > > > > > > > public TestResponse(int err, String msg){ > > > > this(err,msg,null); > > > > } > > > > > > > > > > > > public Properties getData() { > > > > return data; > > > > } > > > > > > > > > > > > public void setData(Properties data) { > > > > this.data = data; > > > > } > > > > > > > > > > > > public int getErr() { > > > > return err; > > > > } > > > > > > > > > > > > public String getMsg() { > > > > return msg; > > > > } > > > > > > > > > > > > > > > > public String toString() { > > > > StringBuffer buff= new StringBuffer(); > > > > buff.append( "{[TestResponse]" ); > > > > buff.append("[response err:" + err + "]"); > > > > buff.append("[response msg:" + msg + "]"); > > > > buff.append("[response data:"); > > > > if( data!=null ){ > > > > buff.append( data ); > > > > } > > > > buff.append("]"); > > > > > > > > > > > > buff.append("}"); > > > > return buff.toString(); > > > > > > > > > > > > > > > > } > > > > > > > > } > > > > > > > > --------------------------------Client:----------------------------------- > > > > TestSign: > > > > > > > > package test.thread; > > > > > > > > import java.io.ByteArrayInputStream; > > > > import java.io.FileInputStream; > > > > import java.io.FileOutputStream; > > > > import java.io.PrintWriter; > > > > import java.security.KeyStore; > > > > import java.security.PrivateKey; > > > > import java.security.Security; > > > > import java.util.Enumeration; > > > > > > > > //import cn.com.infosec.jce.provider.InfosecProvider; > > > > > > > > /* > > > > * Created on 2005-10-18 > > > > * > > > > * TODO To change the template for this generated file go to > > > > * Window - Preferences - Java - Code Style - Code Templates > > > > */ > > > > > > > > /** > > > > * @author lixiangfeng > > > > * > > > > * TODO To change the template for this generated type comment go to > > > > * Window - Preferences - Java - Code Style - Code Templates > > > > */ > > > > public class TestSign { > > > > > > > > > > > > private static int finiCount = 0; > > > > private static int failCount = 0; > > > > public static Object synObj = new Object(); > > > > public static Object synObj2 = new Object(); > > > > public static Object synObj3 = new Object(); > > > > public static int threadCount = 0; > > > > public static void main(String[] args) { > > > > > > > > try { > > > > int uCount = Integer.parseInt(args[0]); > > > > int uTime = Integer.parseInt(args[1]); > > > > > > > > > > > > FileOutputStream fos = new FileOutputStream( > > "sign.log" ); > > > > PrintWriter pr = new PrintWriter( fos ); > > > > > > > > TestSignThread.init(); > > > > > > > > > > > > for (int i = 0; i < uCount; i++) { > > > > Thread th = new Thread(new > > TestSignThread( uTime, pr )); > > > > th.start(); > > > > } > > > > > > > > threadCount = uCount; > > > > System.out.println("testcount:" + > threadCount); > > > > System.out.println( "run time :" + uTime > + > > "s" ); > > > > System.out.println("test running,please > > wait..."); > > > > while( threadCount>0){ > > > > Thread.sleep( 1000 ); > > > > } > > > > > > > > System.out.println( "test finish......" ); > > > > System.out.println( "finish count :" + > > finiCount ); > > > > System.out.println( "failed count :" + > > failCount ); > > > > System.out.println( "speed:" + > (finiCount/uTime) > > ); > > > > > > > > > > > > > > > > } catch (Exception e) { > > > > e.printStackTrace(); > > > > } > > > > } > > > > > > > > > > > > public static void incSucc(){ > > > > synchronized(synObj){ > > > > finiCount++; > > > > } > > > > } > > > > > > > > public static void incFail(){ > > > > synchronized(synObj2){ > > > > failCount++; > > > > } > > > > } > > > > > > > > public static void stopThread(){ > > > > synchronized(synObj3){ > > > > threadCount--; > > > > } > > > > } > > > > > > > > > > > > } > > > > > > > > > > > > TestThread: > > > > > > > > package test.thread; > > > > > > > > import java.io.ByteArrayInputStream; > > > > import java.io.ByteArrayOutputStream; > > > > import java.io.DataInputStream; > > > > import java.io.DataOutputStream; > > > > import java.io.FileInputStream; > > > > import java.io.ObjectOutputStream; > > > > import java.io.PrintWriter; > > > > import java.net.InetSocketAddress; > > > > import java.net.Socket; > > > > import java.security.PrivateKey; > > > > import java.security.Security; > > > > import java.security.Signature; > > > > import java.text.ParseException; > > > > import java.text.SimpleDateFormat; > > > > import java.util.Date; > > > > import java.util.Properties; > > > > import java.util.TimeZone; > > > > > > > > import org.apache.mina.common.ConnectFuture; > > > > import org.apache.mina.common.IoSession; > > > > import org.apache.mina.common.RuntimeIOException; > > > > import org.apache.mina.filter.codec.ProtocolCodecFilter; > > > > import > > > org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; > > > > import org.apache.mina.transport.socket.nio.SocketConnector; > > > > import org.apache.mina.transport.socket.nio.SocketConnectorConfig; > > > > > > > > import test.mina.TestRequest; > > > > import test.mina.client.ClientSessionHandler; > > > > > > > > //import Test.TestResult; > > > > // > > > > //import cn.com.infosec.jce.provider.InfosecProvider; > > > > //import cn.com.infosec.netcert.crypto.CryptoHandler; > > > > //import cn.com.infosec.netcert.rads.CertManager; > > > > //import cn.com.infosec.netcert.rads.SysProperty; > > > > //import cn.com.infosec.netcert.rads.exception.CAException; > > > > //import cn.com.infosec.netcert.rads.exception.RAException; > > > > //import cn.com.infosec.netcert.resource.PropertiesKeysRes; > > > > > > > > /* > > > > * Created on 2005-10-18 > > > > * > > > > * TODO To change the template for this generated file go to > > > > * Window - Preferences - Java - Code Style - Code Templates > > > > */ > > > > > > > > /** > > > > * @author lixiangfeng > > > > * > > > > * TODO To change the template for this generated type comment go to > > > > * Window - Preferences - Java - Code Style - Code Templates > > > > */ > > > > public class TestSignThread implements Runnable { > > > > > > > > > > > > public long endTime = System.currentTimeMillis(); > > > > //public PrivateKey prik = null; > > > > public PrintWriter pr = null; > > > > public TestSignThread( int time, PrintWriter pr ){ > > > > endTime += time * 1000; > > > > //this.prik = prik; > > > > this.pr = pr; > > > > } > > > > > > > > private static String basedn = "o=infosec"; > > > > private static String template = "EE_SIGNING"; > > > > > > > > > > > > public static void init() throws Exception{ > > > > > > > > > > > > } > > > > > > > > public void run() { > > > > > > > > SocketConnectorConfig cfg = new SocketConnectorConfig(); > > > > cfg.setConnectTimeout(30); > > > > cfg.getSessionConfig().setSoLinger(0); > > > > > > > > cfg.getFilterChain().addLast( > > > > "codec", > > > > new ProtocolCodecFilter( > > > > new ObjectSerializationCodecFactory())); > > > > > > > > > > while( true ){ > > > > if(endTime < System.currentTimeMillis() ){ > > > > TestSign.stopThread(); > > > > break; > > > > } > > > > > > > > > > > > > > > > SocketConnector connector = new > > SocketConnector(); > > > > connector.setWorkerTimeout(1); > > > > > > > > IoSession session=null; > > > > try { > > > > ConnectFuture future = > > connector.connect(new InetSocketAddress( > > > > "192.168.0.111", > 8282), > > new ClientSessionHandler(), cfg); > > > > > > > > future.join(); > > > > session = future.getSession(); > > > > > session.getCloseFuture().join(); > > > > TestSign.incSucc(); > > > > //break; > > > > } catch (Exception e) { > > > > e.printStackTrace( pr ); > > > > TestSign.incFail(); > > > > } > > > > > > > > > > > > > > > > > > > > } > > > > > > > > } > > > > > > > > } > > > > > > > > ClientHandler: > > > > > > > > /* > > > > * Licensed to the Apache Software Foundation (ASF) under one > > > > * or more contributor license agreements. See the NOTICE file > > > > * distributed with this work for additional information > > > > * regarding copyright ownership. The ASF licenses this file > > > > * to you under the Apache License, Version 2.0 (the > > > > * "License"); you may not use this file except in compliance > > > > * with the License. You may obtain a copy of the License at > > > > * > > > > * http://www.apache.org/licenses/LICENSE-2.0 > > > > * > > > > * Unless required by applicable law or agreed to in writing, > > > > * software distributed under the License is distributed on an > > > > * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > > > > * KIND, either express or implied. See the License for the > > > > * specific language governing permissions and limitations > > > > * under the License. > > > > * > > > > */ > > > > package test.mina.client; > > > > > > > > import java.util.Properties; > > > > > > > > import org.apache.mina.common.IoHandler; > > > > import org.apache.mina.common.IoHandlerAdapter; > > > > import org.apache.mina.common.IoSession; > > > > import org.apache.mina.transport.socket.nio.SocketSessionConfig; > > > > > > > > import test.mina.TestRequest; > > > > import test.mina.TestResponse; > > > > > > > > /** > > > > * [EMAIL PROTECTED] IoHandler} for SumUp client. > > > > * > > > > * @author The Apache Directory Project ([EMAIL PROTECTED]) > > > > * @version $Rev: 555855 $, $Date: 2007-07-13 12:19:00 +0900 (旮?, 13 7 > ��? > > 2007) $ > > > > */ > > > > public class ClientSessionHandler extends IoHandlerAdapter { > > > > //private final int[] values; > > > > > > > > private boolean finished; > > > > > > > > > > > > public boolean isFinished() { > > > > return finished; > > > > } > > > > > > > > public void sessionOpened(IoSession session) { > > > > > > > > // System.out.println( "Thread" + Thread.currentThread() + " > > start at:" + System.currentTimeMillis() ); > > > > // SocketSessionConfig config = session.getConfig(); > > > > // config. > > > > //System.out.println( session.getConfig() ); > > > > SocketSessionConfig config = (SocketSessionConfig)session.getConfig(); > > > > config.setSoLinger(0); > > > > TestRequest req = new TestRequest("TESTMINA"); > > > > Properties p1 = new Properties(); > > > > p1.setProperty("CARDSN","1111000000000068993"); > > > > req.setData(p1); > > > > session.write(req); > > > > > > > > > > > > } > > > > > > > > public void messageReceived(IoSession session, Object message) { > > > > // server only sends ResultMessage. otherwise, we will have to > > identify > > > > // its type using instanceof operator. > > > > TestResponse res = (TestResponse)message; > > > > // System.out.println( res ); > > > > > > > > session.close(); > > > > finished = true; > > > > // System.out.println( "Thread" + Thread.currentThread() + " > > finish at:" + System.currentTimeMillis() ); > > > > > > > > } > > > > > > > > public void exceptionCaught(IoSession session, Throwable cause) { > > > > session.close(); > > > > } > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > what we call human nature is actually human habit > -- > http://gleamynode.net/ > -- > PGP Key ID: 0x0255ECA6 > > -- what we call human nature is actually human habit -- http://gleamynode.net/ -- PGP Key ID: 0x0255ECA6
