On 10 January 2013 23:30,  <debop...@2pirad.com> wrote:
> Because, to process the request object (in #7), the methods which are
> present in the google protobuf generated file are called. The protobuf
> request object contains multiple requests, and the time taken to extract
> these (requests) is gradually increasing with time.

If you think about it, it is pretty unlikely that the generated code
will get 'slower' over time.
Typically, I have seen JVMs slow down because they get busy with
garbage collecting. So this kind of behavior might be related to
memory allocation in the system and subsequently slower garbage
collection (from your description it sounds like  you're using Java).
Garbage collection that kicks in in the middle of processing will make
things slower. If you see such huge degradation of performance, then
doing a memory profiling will bring you do some good insight what is
happening. The JVM has some built-in diagnosis as well that you can
use initially (such as percentage of time it spends garbage
collecting).

Of course, it could be as something else, like increasing size of the
data you parse with the protocol buffers ? Or maybe somewhere in the
IO sub-system a buffer is not cleared and you parse a  huge chunk of
byte-array ? You could probably see that by adding a debugging log
that shows you the byte-buffer size before you call parseFrom().

Hope this helps,
 -h

> I think this is protobuf problem because these classes where generated by
> the protobuf compiler (from the .proto file).
>
>
> On Friday, January 11, 2013 12:41:35 PM UTC+5:30, Feng Xiao wrote:
>>
>> What makes you think it's protobuf's problem?
>>
>> On Friday, January 11, 2013 2:50:54 PM UTC+8, debo...@2pirad.com wrote:
>>>
>>> My application uses Google Protocol Buffer with Apache MINA. There are
>>> clients who connect to the MINA Connector, send request to the server and
>>> then wait for the response from the server. The flow of control is as
>>> follows:
>>> 1. Client sends request
>>>     2. Request received at MINA filter (<Class> extends
>>> CumulativeProtocolDecoder)
>>>         3. doDecode() method is called
>>>             4. A request object (generated from *.proto file) is created
>>> using the <RequestObject>.parseFrom(bytes)
>>>                 5. The request is passed on to the IOHandler (<Class>
>>> extends IoHandlerAdapter)
>>>                     6. messageReceived() method is called
>>>                         7. In this method, the request object (from #6)
>>> is processed to create the list of requests which has been sent by the
>>> client.
>>>                         8. At this point, we have noticed that the time
>>> taken to process the request object (#7) is gradually degrading with time.
>>> From a initial period of around 2 ms, the time period is going up to 200 ms
>>> in just 8 days of continuous usage. And this value gradually increases with
>>> time.
>>>                             9. The request list is processed in the
>>> application
>>>                           10. The response object is created
>>>                       11. The response is sent to the client.
>>>
>>> Any suggestion would be highly appreciated.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/protobuf/-/IRKxKX0EKRUJ.
>
> To post to this group, send email to protobuf@googlegroups.com.
> To unsubscribe from this group, send email to
> protobuf+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/protobuf?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to protobuf@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to