You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by Michael Qi <fo...@gmail.com> on 2008/05/19 15:43:46 UTC
A big problem: SocketConnector blocked!
Hi,
I am using mina 1.1.7 and try to simulate many client to a server
for stress test.
and I make 50 clientSessoins, each has a SocketConnector, and the
ClientSession.start() is :
private static ThreadPoolExecutor exService = new ThreadPoolExecutor(20,
40, 60L, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(30),
new ThreadPoolExecutor.DiscardPolicy());
public void start() {
connector = new SocketConnector(4, exService);
SocketConnectorConfig scfg = connector.getDefaultConfig();
scfg.setThreadModel(ThreadModel.MANUAL);
scfg.setConnectTimeout(15);
scfg.getFilterChain().addFirst("mmog_protocol_filter",
new ProtocolCodecFilter(new MMOGCodecFactory()));
ConnectFuture cf = connector.connect(address, new ClientHandler());
cf.join();
if (cf.isConnected()) {
session = cf.getSession();
} else {
log.error("could not connect cm");
return;
}
Message m = null;
m = new Message();
m.setCommand(Message.LOGIN);
byte[] body = new byte[16];
byte[] tmp = Util.intToByteArray(streamId);
int p = 0, q = 0;
for (q = 0; q < 4; p++, q++) {
body[p] = tmp[q];
}
tmp = Util.floatToByteArray(x);
for (q = 0; q < 4; p++, q++) {
body[p] = tmp[q];
}
tmp = Util.floatToByteArray(y);
for (q = 0; q < 4; p++, q++) {
body[p] = tmp[q];
}
tmp = Util.floatToByteArray(0);
for (q = 0; q < 4; p++, q++) {
body[p] = tmp[q];
}
m.setBody(body);
WriteFuture wf = session.write(m);
wf.join();
}
The problem is: I new 50 ClientSession and call start one by one :
for (ClientSession cs : sessions) {
cs.start();
log.debug("start id = " + s);
s++;
}
and the log said :
08 May 19 21:31:44,645 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 0
08 May 19 21:31:44,648 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 1
08 May 19 21:31:44,650 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 2
08 May 19 21:31:44,653 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 3
08 May 19 21:31:44,656 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 4
08 May 19 21:31:44,658 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 5
08 May 19 21:31:44,660 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 6
08 May 19 21:31:44,666 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 7
08 May 19 21:31:44,668 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 8
08 May 19 21:31:44,670 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 9
08 May 19 21:32:44,640 [main] ERROR
com.qihe.study.ClientSession.start(ClientSession.java:64)
com.qihe.study.ClientSession - could not connect server
08 May 19 21:32:44,640 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 10
08 May 19 21:32:44,655 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 11
08 May 19 21:32:44,640 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 10
08 May 19 21:32:44,655 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 11
08 May 19 21:32:44,660 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 12
08 May 19 21:32:44,664 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 13
08 May 19 21:32:44,672 [main] DEBUG
com.qihe.study.ClientTest.main(ClientTest.java:107)
com.qihe.study.ClientTest - start id = 14
and then it hang!
after "start id = 9" it hanged too! After a while it said could not
connect to server
Why this? Could you please tell me?
Thank you.
Regards
QiHe
Re: A big problem: SocketConnector blocked!
Posted by Michael Qi <fo...@gmail.com>.
And the server is using mina SocketAcceptor.
On Mon, May 19, 2008 at 9:43 PM, Michael Qi <fo...@gmail.com> wrote:
> Hi,
> I am using mina 1.1.7 and try to simulate many client to a server
> for stress test.
>
> and I make 50 clientSessoins, each has a SocketConnector, and the
> ClientSession.start() is :
> private static ThreadPoolExecutor exService = new ThreadPoolExecutor(20,
> 40, 60L, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(30),
> new ThreadPoolExecutor.DiscardPolicy());
>
> public void start() {
> connector = new SocketConnector(4, exService);
> SocketConnectorConfig scfg = connector.getDefaultConfig();
> scfg.setThreadModel(ThreadModel.MANUAL);
> scfg.setConnectTimeout(15);
> scfg.getFilterChain().addFirst("mmog_protocol_filter",
> new ProtocolCodecFilter(new MMOGCodecFactory()));
> ConnectFuture cf = connector.connect(address, new ClientHandler());
> cf.join();
>
> if (cf.isConnected()) {
> session = cf.getSession();
> } else {
> log.error("could not connect cm");
> return;
> }
>
> Message m = null;
> m = new Message();
> m.setCommand(Message.LOGIN);
>
> byte[] body = new byte[16];
> byte[] tmp = Util.intToByteArray(streamId);
> int p = 0, q = 0;
> for (q = 0; q < 4; p++, q++) {
> body[p] = tmp[q];
> }
> tmp = Util.floatToByteArray(x);
> for (q = 0; q < 4; p++, q++) {
> body[p] = tmp[q];
> }
>
> tmp = Util.floatToByteArray(y);
> for (q = 0; q < 4; p++, q++) {
> body[p] = tmp[q];
> }
>
> tmp = Util.floatToByteArray(0);
> for (q = 0; q < 4; p++, q++) {
> body[p] = tmp[q];
> }
> m.setBody(body);
>
> WriteFuture wf = session.write(m);
> wf.join();
> }
>
>
> The problem is: I new 50 ClientSession and call start one by one :
> for (ClientSession cs : sessions) {
> cs.start();
> log.debug("start id = " + s);
> s++;
> }
>
> and the log said :
> 08 May 19 21:31:44,645 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 0
> 08 May 19 21:31:44,648 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 1
> 08 May 19 21:31:44,650 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 2
> 08 May 19 21:31:44,653 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 3
> 08 May 19 21:31:44,656 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 4
> 08 May 19 21:31:44,658 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 5
> 08 May 19 21:31:44,660 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 6
> 08 May 19 21:31:44,666 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 7
> 08 May 19 21:31:44,668 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 8
> 08 May 19 21:31:44,670 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 9
> 08 May 19 21:32:44,640 [main] ERROR
> com.qihe.study.ClientSession.start(ClientSession.java:64)
> com.qihe.study.ClientSession - could not connect server
> 08 May 19 21:32:44,640 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 10
> 08 May 19 21:32:44,655 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 11
> 08 May 19 21:32:44,640 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 10
> 08 May 19 21:32:44,655 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 11
> 08 May 19 21:32:44,660 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 12
> 08 May 19 21:32:44,664 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 13
> 08 May 19 21:32:44,672 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 14
>
>
> and then it hang!
> after "start id = 9" it hanged too! After a while it said could not
> connect to server
>
> Why this? Could you please tell me?
>
> Thank you.
>
>
> Regards
>
> QiHe
>
Re: A big problem: SocketConnector blocked!
Posted by Julien Vermillard <jv...@archean.fr>.
With using 1 SocketConnector for connecting 100 sessionqs, you will
share 1 selector among the 100 sessions.
Julien
On Wed, 21 May 2008 20:53:05 +0800
"Michael Qi" <fo...@gmail.com> wrote:
> Why is there is one selector per SocketConnector?
> Could it be reused system wide?
>
> On Tue, May 20, 2008 at 9:19 AM, 이희승 (Trustin Lee)
> <tr...@gmail.com> wrote:
> > Please provide a working test application, instead of partial code.
> >
> > On Mon, 19 May 2008 22:43:46 +0900, Michael Qi
> > <fo...@gmail.com> wrote:
> >
> >> Hi,
> >> I am using mina 1.1.7 and try to simulate many client to a server
> >> for stress test.
> >>
> >> and I make 50 clientSessoins, each has a SocketConnector, and the
> >> ClientSession.start() is :
> >> private static ThreadPoolExecutor exService = new
> >> ThreadPoolExecutor(20, 40, 60L, TimeUnit.SECONDS, new
> >> ArrayBlockingQueue<Runnable>(30),
> >> new ThreadPoolExecutor.DiscardPolicy());
> >>
> >> public void start() {
> >> connector = new SocketConnector(4, exService);
> >> SocketConnectorConfig scfg =
> >> connector.getDefaultConfig();
> >> scfg.setThreadModel(ThreadModel.MANUAL);
> >> scfg.setConnectTimeout(15);
> >> scfg.getFilterChain().addFirst("mmog_protocol_filter", new
> >> ProtocolCodecFilter(new MMOGCodecFactory()));
> >> ConnectFuture cf = connector.connect(address, new
> >> ClientHandler());
> >> cf.join();
> >>
> >> if (cf.isConnected()) {
> >> session = cf.getSession();
> >> } else {
> >> log.error("could not connect cm");
> >> return;
> >> }
> >>
> >> Message m = null;
> >> m = new Message();
> >> m.setCommand(Message.LOGIN);
> >>
> >> byte[] body = new byte[16];
> >> byte[] tmp = Util.intToByteArray(streamId);
> >> int p = 0, q = 0;
> >> for (q = 0; q < 4; p++, q++) {
> >> body[p] = tmp[q];
> >> }
> >> tmp = Util.floatToByteArray(x);
> >> for (q = 0; q < 4; p++, q++) {
> >> body[p] = tmp[q];
> >> }
> >>
> >> tmp = Util.floatToByteArray(y);
> >> for (q = 0; q < 4; p++, q++) {
> >> body[p] = tmp[q];
> >> }
> >>
> >> tmp = Util.floatToByteArray(0);
> >> for (q = 0; q < 4; p++, q++) {
> >> body[p] = tmp[q];
> >> }
> >> m.setBody(body);
> >>
> >> WriteFuture wf = session.write(m);
> >> wf.join();
> >> }
> >>
> >>
> >> The problem is: I new 50 ClientSession and call start one by one :
> >> for (ClientSession cs : sessions) {
> >> cs.start();
> >> log.debug("start id = " + s);
> >> s++;
> >> }
> >>
> >> and the log said :
> >> 08 May 19 21:31:44,645 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 0
> >> 08 May 19 21:31:44,648 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 1
> >> 08 May 19 21:31:44,650 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 2
> >> 08 May 19 21:31:44,653 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 3
> >> 08 May 19 21:31:44,656 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 4
> >> 08 May 19 21:31:44,658 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 5
> >> 08 May 19 21:31:44,660 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 6
> >> 08 May 19 21:31:44,666 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 7
> >> 08 May 19 21:31:44,668 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 8
> >> 08 May 19 21:31:44,670 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 9
> >> 08 May 19 21:32:44,640 [main] ERROR
> >> com.qihe.study.ClientSession.start(ClientSession.java:64)
> >> com.qihe.study.ClientSession - could not connect server
> >> 08 May 19 21:32:44,640 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 10
> >> 08 May 19 21:32:44,655 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 11
> >> 08 May 19 21:32:44,640 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 10
> >> 08 May 19 21:32:44,655 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 11
> >> 08 May 19 21:32:44,660 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 12
> >> 08 May 19 21:32:44,664 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 13
> >> 08 May 19 21:32:44,672 [main] DEBUG
> >> com.qihe.study.ClientTest.main(ClientTest.java:107)
> >> com.qihe.study.ClientTest - start id = 14
> >>
> >>
> >> and then it hang!
> >> after "start id = 9" it hanged too! After a while it said could not
> >> connect to server
> >>
> >> Why this? Could you please tell me?
> >>
> >> Thank you.
> >>
> >>
> >> Regards
> >>
> >> QiHe
> >
> >
> >
> > --
> > Trustin Lee - Principal Software Engineer, JBoss, Red Hat
> > --
> > what we call human nature is actually human habit
> > --
> > http://gleamynode.net/
> >
Re: A big problem: SocketConnector blocked!
Posted by Michael Qi <fo...@gmail.com>.
Why is there is one selector per SocketConnector?
Could it be reused system wide?
On Tue, May 20, 2008 at 9:19 AM, 이희승 (Trustin Lee) <tr...@gmail.com> wrote:
> Please provide a working test application, instead of partial code.
>
> On Mon, 19 May 2008 22:43:46 +0900, Michael Qi <fo...@gmail.com>
> wrote:
>
>> Hi,
>> I am using mina 1.1.7 and try to simulate many client to a server
>> for stress test.
>>
>> and I make 50 clientSessoins, each has a SocketConnector, and the
>> ClientSession.start() is :
>> private static ThreadPoolExecutor exService = new ThreadPoolExecutor(20,
>> 40, 60L, TimeUnit.SECONDS, new
>> ArrayBlockingQueue<Runnable>(30),
>> new ThreadPoolExecutor.DiscardPolicy());
>>
>> public void start() {
>> connector = new SocketConnector(4, exService);
>> SocketConnectorConfig scfg = connector.getDefaultConfig();
>> scfg.setThreadModel(ThreadModel.MANUAL);
>> scfg.setConnectTimeout(15);
>> scfg.getFilterChain().addFirst("mmog_protocol_filter",
>> new ProtocolCodecFilter(new
>> MMOGCodecFactory()));
>> ConnectFuture cf = connector.connect(address, new
>> ClientHandler());
>> cf.join();
>>
>> if (cf.isConnected()) {
>> session = cf.getSession();
>> } else {
>> log.error("could not connect cm");
>> return;
>> }
>>
>> Message m = null;
>> m = new Message();
>> m.setCommand(Message.LOGIN);
>>
>> byte[] body = new byte[16];
>> byte[] tmp = Util.intToByteArray(streamId);
>> int p = 0, q = 0;
>> for (q = 0; q < 4; p++, q++) {
>> body[p] = tmp[q];
>> }
>> tmp = Util.floatToByteArray(x);
>> for (q = 0; q < 4; p++, q++) {
>> body[p] = tmp[q];
>> }
>>
>> tmp = Util.floatToByteArray(y);
>> for (q = 0; q < 4; p++, q++) {
>> body[p] = tmp[q];
>> }
>>
>> tmp = Util.floatToByteArray(0);
>> for (q = 0; q < 4; p++, q++) {
>> body[p] = tmp[q];
>> }
>> m.setBody(body);
>>
>> WriteFuture wf = session.write(m);
>> wf.join();
>> }
>>
>>
>> The problem is: I new 50 ClientSession and call start one by one :
>> for (ClientSession cs : sessions) {
>> cs.start();
>> log.debug("start id = " + s);
>> s++;
>> }
>>
>> and the log said :
>> 08 May 19 21:31:44,645 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 0
>> 08 May 19 21:31:44,648 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 1
>> 08 May 19 21:31:44,650 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 2
>> 08 May 19 21:31:44,653 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 3
>> 08 May 19 21:31:44,656 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 4
>> 08 May 19 21:31:44,658 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 5
>> 08 May 19 21:31:44,660 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 6
>> 08 May 19 21:31:44,666 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 7
>> 08 May 19 21:31:44,668 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 8
>> 08 May 19 21:31:44,670 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 9
>> 08 May 19 21:32:44,640 [main] ERROR
>> com.qihe.study.ClientSession.start(ClientSession.java:64)
>> com.qihe.study.ClientSession - could not connect server
>> 08 May 19 21:32:44,640 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 10
>> 08 May 19 21:32:44,655 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 11
>> 08 May 19 21:32:44,640 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 10
>> 08 May 19 21:32:44,655 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 11
>> 08 May 19 21:32:44,660 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 12
>> 08 May 19 21:32:44,664 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 13
>> 08 May 19 21:32:44,672 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 14
>>
>>
>> and then it hang!
>> after "start id = 9" it hanged too! After a while it said could not
>> connect to server
>>
>> Why this? Could you please tell me?
>>
>> Thank you.
>>
>>
>> Regards
>>
>> QiHe
>
>
>
> --
> Trustin Lee - Principal Software Engineer, JBoss, Red Hat
> --
> what we call human nature is actually human habit
> --
> http://gleamynode.net/
>
Re: A big problem: SocketConnector blocked!
Posted by Michael Qi <fo...@gmail.com>.
Hi Lee,
I could not send the application, the gmail server report failure.
Could I send it direct to your gmail address?
Regards
HeQi
On Tue, May 20, 2008 at 9:19 AM, 이희승 (Trustin Lee) <tr...@gmail.com> wrote:
> Please provide a working test application, instead of partial code.
>
> On Mon, 19 May 2008 22:43:46 +0900, Michael Qi <fo...@gmail.com>
> wrote:
>
>> Hi,
>> I am using mina 1.1.7 and try to simulate many client to a server
>> for stress test.
>>
>> and I make 50 clientSessoins, each has a SocketConnector, and the
>> ClientSession.start() is :
>> private static ThreadPoolExecutor exService = new ThreadPoolExecutor(20,
>> 40, 60L, TimeUnit.SECONDS, new
>> ArrayBlockingQueue<Runnable>(30),
>> new ThreadPoolExecutor.DiscardPolicy());
>>
>> public void start() {
>> connector = new SocketConnector(4, exService);
>> SocketConnectorConfig scfg = connector.getDefaultConfig();
>> scfg.setThreadModel(ThreadModel.MANUAL);
>> scfg.setConnectTimeout(15);
>> scfg.getFilterChain().addFirst("mmog_protocol_filter",
>> new ProtocolCodecFilter(new
>> MMOGCodecFactory()));
>> ConnectFuture cf = connector.connect(address, new
>> ClientHandler());
>> cf.join();
>>
>> if (cf.isConnected()) {
>> session = cf.getSession();
>> } else {
>> log.error("could not connect cm");
>> return;
>> }
>>
>> Message m = null;
>> m = new Message();
>> m.setCommand(Message.LOGIN);
>>
>> byte[] body = new byte[16];
>> byte[] tmp = Util.intToByteArray(streamId);
>> int p = 0, q = 0;
>> for (q = 0; q < 4; p++, q++) {
>> body[p] = tmp[q];
>> }
>> tmp = Util.floatToByteArray(x);
>> for (q = 0; q < 4; p++, q++) {
>> body[p] = tmp[q];
>> }
>>
>> tmp = Util.floatToByteArray(y);
>> for (q = 0; q < 4; p++, q++) {
>> body[p] = tmp[q];
>> }
>>
>> tmp = Util.floatToByteArray(0);
>> for (q = 0; q < 4; p++, q++) {
>> body[p] = tmp[q];
>> }
>> m.setBody(body);
>>
>> WriteFuture wf = session.write(m);
>> wf.join();
>> }
>>
>>
>> The problem is: I new 50 ClientSession and call start one by one :
>> for (ClientSession cs : sessions) {
>> cs.start();
>> log.debug("start id = " + s);
>> s++;
>> }
>>
>> and the log said :
>> 08 May 19 21:31:44,645 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 0
>> 08 May 19 21:31:44,648 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 1
>> 08 May 19 21:31:44,650 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 2
>> 08 May 19 21:31:44,653 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 3
>> 08 May 19 21:31:44,656 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 4
>> 08 May 19 21:31:44,658 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 5
>> 08 May 19 21:31:44,660 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 6
>> 08 May 19 21:31:44,666 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 7
>> 08 May 19 21:31:44,668 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 8
>> 08 May 19 21:31:44,670 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 9
>> 08 May 19 21:32:44,640 [main] ERROR
>> com.qihe.study.ClientSession.start(ClientSession.java:64)
>> com.qihe.study.ClientSession - could not connect server
>> 08 May 19 21:32:44,640 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 10
>> 08 May 19 21:32:44,655 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 11
>> 08 May 19 21:32:44,640 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 10
>> 08 May 19 21:32:44,655 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 11
>> 08 May 19 21:32:44,660 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 12
>> 08 May 19 21:32:44,664 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 13
>> 08 May 19 21:32:44,672 [main] DEBUG
>> com.qihe.study.ClientTest.main(ClientTest.java:107)
>> com.qihe.study.ClientTest - start id = 14
>>
>>
>> and then it hang!
>> after "start id = 9" it hanged too! After a while it said could not
>> connect to server
>>
>> Why this? Could you please tell me?
>>
>> Thank you.
>>
>>
>> Regards
>>
>> QiHe
>
>
>
> --
> Trustin Lee - Principal Software Engineer, JBoss, Red Hat
> --
> what we call human nature is actually human habit
> --
> http://gleamynode.net/
>
Re: A big problem: SocketConnector blocked!
Posted by "이희승 (Trustin Lee)" <tr...@gmail.com>.
Please provide a working test application, instead of partial code.
On Mon, 19 May 2008 22:43:46 +0900, Michael Qi <fo...@gmail.com>
wrote:
> Hi,
> I am using mina 1.1.7 and try to simulate many client to a server
> for stress test.
>
> and I make 50 clientSessoins, each has a SocketConnector, and the
> ClientSession.start() is :
> private static ThreadPoolExecutor exService = new ThreadPoolExecutor(20,
> 40, 60L, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(30),
> new ThreadPoolExecutor.DiscardPolicy());
>
> public void start() {
> connector = new SocketConnector(4, exService);
> SocketConnectorConfig scfg = connector.getDefaultConfig();
> scfg.setThreadModel(ThreadModel.MANUAL);
> scfg.setConnectTimeout(15);
> scfg.getFilterChain().addFirst("mmog_protocol_filter",
> new ProtocolCodecFilter(new MMOGCodecFactory()));
> ConnectFuture cf = connector.connect(address, new ClientHandler());
> cf.join();
>
> if (cf.isConnected()) {
> session = cf.getSession();
> } else {
> log.error("could not connect cm");
> return;
> }
>
> Message m = null;
> m = new Message();
> m.setCommand(Message.LOGIN);
>
> byte[] body = new byte[16];
> byte[] tmp = Util.intToByteArray(streamId);
> int p = 0, q = 0;
> for (q = 0; q < 4; p++, q++) {
> body[p] = tmp[q];
> }
> tmp = Util.floatToByteArray(x);
> for (q = 0; q < 4; p++, q++) {
> body[p] = tmp[q];
> }
>
> tmp = Util.floatToByteArray(y);
> for (q = 0; q < 4; p++, q++) {
> body[p] = tmp[q];
> }
>
> tmp = Util.floatToByteArray(0);
> for (q = 0; q < 4; p++, q++) {
> body[p] = tmp[q];
> }
> m.setBody(body);
>
> WriteFuture wf = session.write(m);
> wf.join();
> }
>
>
> The problem is: I new 50 ClientSession and call start one by one :
> for (ClientSession cs : sessions) {
> cs.start();
> log.debug("start id = " + s);
> s++;
> }
>
> and the log said :
> 08 May 19 21:31:44,645 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 0
> 08 May 19 21:31:44,648 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 1
> 08 May 19 21:31:44,650 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 2
> 08 May 19 21:31:44,653 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 3
> 08 May 19 21:31:44,656 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 4
> 08 May 19 21:31:44,658 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 5
> 08 May 19 21:31:44,660 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 6
> 08 May 19 21:31:44,666 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 7
> 08 May 19 21:31:44,668 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 8
> 08 May 19 21:31:44,670 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 9
> 08 May 19 21:32:44,640 [main] ERROR
> com.qihe.study.ClientSession.start(ClientSession.java:64)
> com.qihe.study.ClientSession - could not connect server
> 08 May 19 21:32:44,640 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 10
> 08 May 19 21:32:44,655 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 11
> 08 May 19 21:32:44,640 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 10
> 08 May 19 21:32:44,655 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 11
> 08 May 19 21:32:44,660 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 12
> 08 May 19 21:32:44,664 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 13
> 08 May 19 21:32:44,672 [main] DEBUG
> com.qihe.study.ClientTest.main(ClientTest.java:107)
> com.qihe.study.ClientTest - start id = 14
>
>
> and then it hang!
> after "start id = 9" it hanged too! After a while it said could not
> connect to server
>
> Why this? Could you please tell me?
>
> Thank you.
>
>
> Regards
>
> QiHe
--
Trustin Lee - Principal Software Engineer, JBoss, Red Hat
--
what we call human nature is actually human habit
--
http://gleamynode.net/