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
