Jakob,

I did install VisualVM but it is not capturing org.apache.* classes or
com.mycompany.* classes. I did not find a setting on how to enable capturing
data for all the classes I want. Can you tell me where to specity the
packages for which I want to capture CPU usage?

Vinay


On Mon, Jan 11, 2010 at 4:05 PM, Ravi Kapoor <ravikapoor...@gmail.com>wrote:

> Jakob,
>
> The beans are not big. Also these tests have been performed under a single
> user to measure the CPU timing. So I doubt locking/synchronization is an
> issue.
>
> I would think that if there is synchronization, then the threads could be
> waiting for long time, but lack of synchronization can only lead to corrupt
> data not to higher CPU. Can you explain little bit how lack of
> synchronization can add to CPU?
>
> I have never used VisualVM, I can try it sometime this week. I am assuming
> it will work with Websphere 6.1
>
> Regards
> Ravi
>
>
> On Mon, Jan 11, 2010 at 3:03 PM, Jan-Kees van Andel <
> jankeesvanan...@gmail.com> wrote:
>
>> Hi Ravi,
>>
>> Just a stupid question. Are your beans extremely big? Since FacesBean
>> doesn't do much locking/synchronizing (none if I'm correctly), the
>> only reason I can imagine it to eat CPU cycles is because of its
>> size...
>>
>> Also, is it possible for you to do a profiling run using VisualVM?
>> I've been profiling Trinidad with VisualVM myself and maybe we can
>> compare numbers... Using the same tool might make it easier to
>> compare...
>>
>> /JK
>>
>>
>> 2010/1/11 Ravi Kapoor <ravikapoor...@gmail.com>:
>> > I am thinking if that was the case, I would see high CPU in
>> > java.util.HashMap instead of org.apache.faces.*
>> >
>> > If you disagree, please explain and I can try using HashTable to store
>> data
>> > and get fresh numbers.
>> >
>> >
>> > On Mon, Jan 11, 2010 at 10:00 AM, Jakob Korherr <
>> jakob.korh...@gmail.com>wrote:
>> >
>> >> Maybe it happens when accessing the value from the Map with
>> >> "#{bean.get['memid']}", because the Map is not properly synchronized,
>> thus
>> >> its internal structure is broken and thus it is running in infinite
>> loops.
>> >>
>> >> Are your resources properly synchronized?
>> >>
>> >> Just a guess in the blue...
>> >>
>> >> Regards,
>> >> Jakob Korherr
>> >>
>> >> 2010/1/11 Ravi Kapoor <ravikapoor...@gmail.com>
>> >>
>> >> > Another thing, most of our EL expressions are one of the following
>> types
>> >> >
>> >> > "#{bean.active}"
>> >> > or
>> >> > "#{bean.get['memid']}"
>> >> >
>> >> > Parsing of these expressions probably happens within
>> org.apache.myfaces.*
>> >> > classes. These are fairly basic EL expressions and should not be
>> taking
>> >> > much
>> >> > time. We know, the final getter method is not taking much time.
>> >> >
>> >> > Do you know if the page (and EL expressions) are parsed each time a
>> page
>> >> is
>> >> > rendered? If pages are parsed only once, then the parsing time should
>> >> also
>> >> > be almost negligible.
>> >> >
>> >> > - Ravi
>> >> >
>> >> > On Mon, Jan 11, 2010 at 8:28 AM, Ravi <ravikapoor...@gmail.com>
>> wrote:
>> >> >
>> >> > >
>> >> > > Matthias,
>> >> > >
>> >> > > If the issue is in bean, it should show up in my analysis. Also
>> >> > getProperty
>> >> > > is only 40% CPU, there is additional 45% cpu consumed by rest of
>> the
>> >> > > trinidad classes totaling 85% total CPU, all within
>> >> org.apache.myfaces.*
>> >> > > classes
>> >> > >
>> >> > > Ravi
>> >> > >
>> >> > >
>> >> > >
>> >> > > Matthias Wessendorf wrote:
>> >> > >
>> >> > >> Ravi,
>> >> > >>
>> >> > >> spoke to a guy that does performance testing/improvement for
>> Oracle
>> >> > >> Applications. He said that there is some % CPU in Trindad but I
>> would
>> >> > >> not give it more them 20%. The heavy hitters is getClientId (Blake
>> -
>> >> > >> see dev@ thread - is doing some optimization there).
>> >> > >>
>> >> > >> Now if getProperty is some el expression and expression is
>> expensive
>> >> > >> the problem is in expression not in Trinidad (perhaps that is the
>> case
>> >> > >> where you have el epression but beans behind it are not that
>> good).
>> >> > >>
>> >> > >> -Matthias
>> >> > >>
>> >> > >> On Mon, Jan 11, 2010 at 6:45 AM, Ravi Kapoor <
>> ravikapoor...@gmail.com
>> >> >
>> >> > >> wrote:
>> >> > >>
>> >> > >>> Hi Jan-Kees,
>> >> > >>>
>> >> > >>> You are right, the getProperty method is only taking 2K units.
>> >> However
>> >> > if
>> >> > >>> I
>> >> > >>> dig deeper, I find that most of the cumulative time is being
>> spent
>> >> > within
>> >> > >>> Trinidad classes. The final call to java getters consumes
>> negligible
>> >> > >>> time.
>> >> > >>>
>> >> > >>> I was unable to create thread structure like you showed (JProbe
>> keeps
>> >> > >>> getting crashed). But I took another screenshot that shows almost
>> >> > similar
>> >> > >>> details you are looking for. It highlights the classes that are
>> >> taking
>> >> > >>> maximum time (cumulative time again) but as you can see, all the
>> >> > classes
>> >> > >>> are
>> >> > >>> just trinidad classes.
>> >> > >>>
>> >> > >>>
>> >> >
>> >>
>> http://docs.google.com/Doc?docid=0AbuQsSDG0X9_ZGhraHFwejJfNGRjcGNiN2hk&hl=en
>> >> > >>>
>> >> > >>> Regards,
>> >> > >>> Ravi
>> >> > >>>
>> >> > >>> On Sun, Jan 10, 2010 at 12:54 PM, Jan-Kees van Andel <
>> >> > >>> jankeesvanan...@gmail.com> wrote:
>> >> > >>>
>> >> > >>>  Hey Ravi,
>> >> > >>>>
>> >> > >>>> Looking at your JProbe screenshots for the second time, I think
>> >> you're
>> >> > >>>> misinterpreting the graphs (but I haven't used JProbe before, so
>> I
>> >> > >>>> might be mistaking ;-) ).
>> >> > >>>>
>> >> > >>>> In your first screenshot (upper left corner) you can see the
>> total
>> >> > >>>> time the getProperty method takes.
>> >> > >>>> This includes its self time and the time taken by its children.
>> Its
>> >> > >>>> self time is 2781 and the child time is 29609.
>> >> > >>>> A large portion (around 85%) comes from the getLocalProperty and
>> >> > >>>> ValueBinding.getValue methods.
>> >> > >>>>
>> >> > >>>> However, these two methods don't do much, since they delegate to
>> >> other
>> >> > >>>> methods to do the real work. Maybe even invoking application
>> code,
>> >> > >>>> like managed beans.
>> >> > >>>>
>> >> > >>>> Can you provide a more detailed call tree with more info about
>> the
>> >> > >>>> child methods that are invoked? I'm especially interested in the
>> >> > >>>> methods that are called by getLocalProperty and
>> >> ValueBinding.getValue
>> >> > >>>> and their children. I'm not that familiar with JProbe, but I'm
>> sure
>> >> it
>> >> > >>>> supports something like a call tree
>> >> > >>>> (
>> >> > >>>>
>> >> > >>>>
>> >> >
>> >>
>> http://www.ej-technologies.com/products/jprofiler/images/whatsnew/exceptional_methods_calltree.png
>> >> > >>>> ),
>> >> > >>>> so you can see the problematic method.
>> >> > >>>>
>> >> > >>>> Regards,
>> >> > >>>> Jan-Kees
>> >> > >>>>
>> >> > >>>>
>> >> > >>>> 2010/1/10 Ravi <ravikapoor...@gmail.com>:
>> >> > >>>>
>> >> > >>>>> Matthias, I think websphere 6.1 does not support JSF 1.2. I
>> will
>> >> > >>>>> doublecheck, let me know if this is incorrect. This mans I
>> cannot
>> >> try
>> >> > >>>>> trinidad version 1.2.12
>> >> > >>>>>
>> >> > >>>>> I will try out 1.0.11 release, but that is a minor release
>> update
>> >> and
>> >> > I
>> >> > >>>>> seriously doubt if it will fix such a performance issue.
>> >> > >>>>>
>> >> > >>>>> What other options do we have? Is there a way we can get
>> somebody
>> >> > >>>>>
>> >> > >>>> familiar
>> >> > >>>>
>> >> > >>>>> with trinidad architecture/code to look at this issue? This can
>> >> even
>> >> > be
>> >> > >>>>> a
>> >> > >>>>> paid assignment.
>> >> > >>>>>
>> >> > >>>>> Regards
>> >> > >>>>> Ravi
>> >> > >>>>>
>> >> > >>>>>
>> >> > >>>>> Matthias Wessendorf wrote:
>> >> > >>>>>
>> >> > >>>>>> Hello Ravi,
>> >> > >>>>>>
>> >> > >>>>>> I wonder what our last release for JSF 1.1 (1.0.11) does?
>> >> > >>>>>>
>> >> > >>>>>> Not sure, perhaps you may also try the JSF 1.2 version ?
>> (1.2.12)
>> >> > >>>>>> The JSF 1.2 version is the one that is best supported, these
>> days.
>> >> > >>>>>>
>> >> > >>>>>> Trinidad 2.0 is now in alpha stage, and I can understand that
>> you
>> >> > >>>>>> don't want to update on that version, now
>> >> > >>>>>>
>> >> > >>>>>> -Matthias
>> >> > >>>>>>
>> >> > >>>>>> On Sun, Jan 10, 2010 at 4:56 AM, Ravi <
>> ravikapoor...@gmail.com>
>> >> > >>>>>> wrote:
>> >> > >>>>>>
>> >> > >>>>>>> Scott, we do not have CPUs available. The time trinidad is
>> >> > consuming
>> >> > >>>>>>> is
>> >> > >>>>>>> supposed to be doing some other work. Hence this is costing
>> us
>> >> real
>> >> > >>>>>>> dollars
>> >> > >>>>>>> and hence our time and effort to resolve this.
>> >> > >>>>>>>
>> >> > >>>>>>> This is not initial hit of page. I always ignore the first
>> hit on
>> >> > all
>> >> > >>>>>>> pages,
>> >> > >>>>>>> I am only measuring CPU from 2nd hit onwards.
>> >> > >>>>>>>
>> >> > >>>>>>> Ravi
>> >> > >>>>>>>
>> >> > >>>>>>>
>> >> > >>>>>>> Scott O'Bryan wrote:
>> >> > >>>>>>>
>> >> > >>>>>>>> I don't know.  I'm of the camp that if the CPU time is
>> >> available,
>> >> > >>>>>>>> use
>> >> > >>>>>>>> it.  That said, is this load consistant or are you just
>> testing
>> >> an
>> >> > >>>>>>>> initial hit of each page.
>> >> > >>>>>>>>
>> >> > >>>>>>>> Sent from my iPhone
>> >> > >>>>>>>>
>> >> > >>>>>>>> On Jan 8, 2010, at 11:25 PM, Ravi <ravikapoor...@gmail.com>
>> >> > wrote:
>> >> > >>>>>>>>
>> >> > >>>>>>>>  Hi Jan-Kees,
>> >> > >>>>>>>>>
>> >> > >>>>>>>>> Now that I am reading your message again, I do want to
>> answer
>> >> > your
>> >> > >>>>>>>>> questions in detail. First I agree reflection is cheap,
>> that is
>> >> > why
>> >> > >>>>>>>>> reflection is not my concern. Time being spent in
>> reflection is
>> >> > >>>>>>>>> almost negligible compared to time being spent in trinidad
>> >> > classes.
>> >> > >>>>>>>>>
>> >> > >>>>>>>>> Secondly IO and locking etc contribute to clock time but
>> not to
>> >> > CPU
>> >> > >>>>>>>>> time. e.g. for IO, the thread may be in a wait state
>> waiting
>> >> for
>> >> > >>>>>>>>> data to arrive. In this case, the clock keeps ticking but
>> such
>> >> a
>> >> > >>>>>>>>> wait does not need CPU. My numbers are specifically CPU
>> time.
>> >> > Which
>> >> > >>>>>>>>> means trinidad is not waiting but executing CPU
>> instructions.
>> >> > >>>>>>>>>
>> >> > >>>>>>>>> This is why the user load is also irrelevant (high load
>> leads
>> >> to
>> >> > >>>>>>>>> adding clock time but not to CPU time). But since you
>> asked, to
>> >> > get
>> >> > >>>>>>>>> these numbers, I am not doing a load testing. I am simply
>> >> loading
>> >> > 4
>> >> > >>>>>>>>> screens 4 times in order (total 16 screens).
>> >> > >>>>>>>>>
>> >> > >>>>>>>>> Regards
>> >> > >>>>>>>>> Ravi
>> >> > >>>>>>>>>
>> >> > >>>>>>>>>
>> >> > >>>>>>>>>
>> >> > >>>>>>>>> Jan-Kees van Andel wrote:
>> >> > >>>>>>>>>
>> >> > >>>>>>>>>> I'm not sure, but I doubt the mailing list supports
>> >> attachments.
>> >> > >>>>>>>>>> Maybe you could provide a link to some image hosting site?
>> >> > >>>>>>>>>> My first thought, reflection is darn cheap, especially
>> since
>> >> > Java
>> >> > >>>>>>>>>> 5
>> >> > >>>>>>>>>> and even more since Java 6. I'm no IBM JVM specialist, but
>> I
>> >> > don't
>> >> > >>>>>>>>>> think there are major differences with HotSpot... Compared
>> >> with
>> >> > >>>>>>>>>> SQL
>> >> > >>>>>>>>>> queries, backend transactions, web service calls, etc.
>> >> > reflective
>> >> > >>>>>>>>>> method invocations really don't make a difference.
>> >> > >>>>>>>>>> Having said that, what kind of application are you
>> testing?
>> >> Does
>> >> > >>>>>>>>>>
>> >> > >>>>>>>>> this
>> >> > >>>>
>> >> > >>>>> application have any I/O, locking or other expensive things
>> that
>> >> may
>> >> > >>>>>>>>>> be the cause of the CPU-time imbalance?
>> >> > >>>>>>>>>> Also, what kind of load are you simulating on your
>> >> application?
>> >> > >>>>>>>>>> Long
>> >> > >>>>>>>>>> sessions with not much users? Lots of short sessions?
>> >> > Hyperactive
>> >> > >>>>>>>>>> users without any pauses?
>> >> > >>>>>>>>>> /JK
>> >> > >>>>>>>>>> Ps. How did you configure your profiler? Sampling or
>> >> > >>>>>>>>>> tracing/instrumentation? Although I don't think it makes a
>> >> > >>>>>>>>>>
>> >> > >>>>>>>>> difference
>> >> > >>>>
>> >> > >>>>> in this case, sampling is less accurate...
>> >> > >>>>>>>>>> 2010/1/8 Ravi Kapoor <ravikapoor...@gmail.com>:
>> >> > >>>>>>>>>>
>> >> > >>>>>>>>>>> The actual call to getter method is only using 2% CPU.
>> Rest
>> >> 38%
>> >> > >>>>>>>>>>> is
>> >> > >>>>>>>>>>> being
>> >> > >>>>>>>>>>> used within trinidad classes.
>> >> > >>>>>>>>>>> I am attaching two screenshots to give you more details.
>> >> > >>>>>>>>>>>
>> >> > >>>>>>>>>>> In first screenshot, you can see at the top left corner,
>> >> total
>> >> > >>>>>>>>>>> CPU
>> >> > >>>>>>>>>>> units
>> >> > >>>>>>>>>>> taken by getProperty are 32391
>> >> > >>>>>>>>>>> getProperty calls javax.faces.el.ValueBinding.getValue
>> which
>> >> > >>>>>>>>>>> calls
>> >> > >>>>>>>>>>> org.apache.myfaces.el.PropertyResolverImpl.getValue which
>> >> calls
>> >> > >>>>>>>>>>> org.apache.myfaces.el.PropertyResolverImpl.getProperty
>> which
>> >> > >>>>>>>>>>> calls
>> >> > >>>>>>>>>>> java.lang.reflect.Method.invoke.
>> >> > >>>>>>>>>>>
>> >> > >>>>>>>>>>> In second screenshot you can see that Method.invoke is
>> using
>> >> > only
>> >> > >>>>>>>>>>> 1781 units
>> >> > >>>>>>>>>>> of CPU. Rest of the time is being spent within trinidad
>> >> > classes.
>> >> > >>>>>>>>>>>
>> >> > >>>>>>>>>>> Does this help? Also the rest of trinidad using 45% CPU
>> usage
>> >> > is
>> >> > >>>>>>>>>>> also highly
>> >> > >>>>>>>>>>> concerning.
>> >> > >>>>>>>>>>>
>> >> > >>>>>>>>>>> Thanks
>> >> > >>>>>>>>>>> Ravi
>> >> > >>>>>>>>>>>
>> >> > >>>>>>>>>>>
>> >> > >>>>>>>>>>> On Fri, Jan 8, 2010 at 1:47 PM, Jan-Kees van Andel
>> >> > >>>>>>>>>>> <jankeesvanan...@gmail.com> wrote:
>> >> > >>>>>>>>>>>
>> >> > >>>>>>>>>>>> Hey,
>> >> > >>>>>>>>>>>>
>> >> > >>>>>>>>>>>> Is it possible that the getProperty indirectly invokes
>> some
>> >> > >>>>>>>>>>>> expensive
>> >> > >>>>>>>>>>>> computation? For example, do you have lots of logic
>> inside
>> >> > your
>> >> > >>>>>>>>>>>> getters?
>> >> > >>>>>>>>>>>>
>> >> > >>>>>>>>>>>> Regards,
>> >> > >>>>>>>>>>>> Jan-Kees
>> >> > >>>>>>>>>>>>
>> >> > >>>>>>>>>>>>
>> >> > >>>>>>>>>>>> 2010/1/8 Ravi Kapoor <ravikapoor...@gmail.com>:
>> >> > >>>>>>>>>>>>
>> >> > >>>>>>>>>>>>> Hi Matthias,
>> >> > >>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>> Here are the details:
>> >> > >>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>> Server: Websphere 6.1
>> >> > >>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>> Trinidad version: 1.0.7  (We cant upgrade to 2.0 until
>> we
>> >> > >>>>>>>>>>>>> upgrade
>> >> > >>>>>>>>>>>>> websphere
>> >> > >>>>>>>>>>>>> which will happen in due course. Even then if this
>> issue
>> >> has
>> >> > >>>>>>>>>>>>> not
>> >> > >>>>>>>>>>>>> been
>> >> > >>>>>>>>>>>>> addressed, the problem may exist in 2.0 as well.)
>> >> > >>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>> OS: Windows (Even though I am measuring numbers on
>> windows
>> >> > but
>> >> > >>>>>>>>>>>>> I
>> >> > >>>>>>>>>>>>> do not
>> >> > >>>>>>>>>>>>> think this is OS specific)
>> >> > >>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>> Let me know if you need to know anything else.
>> >> > >>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>> Regards
>> >> > >>>>>>>>>>>>> Ravi
>> >> > >>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>> On Fri, Jan 8, 2010 at 1:09 AM, Matthias Wessendorf
>> >> > >>>>>>>>>>>>> <mat...@apache.org>wrote:
>> >> > >>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>  Hello Ravi,
>> >> > >>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>> some more background would be good, e.g. what version
>> of
>> >> > >>>>>>>>>>>>>> Trinidad etc.
>> >> > >>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>> -Matthias
>> >> > >>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>> On Thu, Jan 7, 2010 at 11:25 PM, Ravi Kapoor
>> >> > >>>>>>>>>>>>>> <ravikapoor...@gmail.com
>> >> > >>>>>>>>>>>>>> wrote:
>> >> > >>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>>> Has anybody done performance tests on trinidad
>> >> application.
>> >> > I
>> >> > >>>>>>>>>>>>>>> have an
>> >> > >>>>>>>>>>>>>>> application and it appears that it is taking 80-90%
>> of
>> >> CPU
>> >> > in
>> >> > >>>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>> my
>> >> > >>>>
>> >> > >>>>> application, thus killing performance.
>> >> > >>>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>>> We ran load tests and our CPU went to 100% usage. At
>> this
>> >> > >>>>>>>>>>>>>>> point we
>> >> > >>>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>> measured
>> >> > >>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>>> how much time was being taken by each class/method.
>> Here
>> >> > are
>> >> > >>>>>>>>>>>>>>> some
>> >> > >>>>>>>>>>>>>>> interesting figures:
>> >> > >>>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>>> CPU usage by all Trinidad + myfaces classes = 80-90%
>> >> > >>>>>>>>>>>>>>> Myfaces CPU usage (without trinidad) = 8% (which
>> implies
>> >> > >>>>>>>>>>>>>>> trinidad is
>> >> > >>>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>> taking
>> >> > >>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>>> 70-80% of CPU)
>> >> > >>>>>>>>>>>>>>> Total time taken by one method
>> >> > >>>>>>>>>>>>>>>
>> >> > (org.apache.myfaces.trinidad.bean.FacesBeanImpl.getProperty)
>> >> > >>>>>>>>>>>>>>> =
>> >> > >>>>>>>>>>>>>>> 40%
>> >> > >>>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>>> Can anybody confirm that they have seen this
>> behavior?
>> >> > >>>>>>>>>>>>>>> Or if somebody can confirm that this does not happen
>> in
>> >> > their
>> >> > >>>>>>>>>>>>>>> performance
>> >> > >>>>>>>>>>>>>>> tests, that should help too.
>> >> > >>>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>>> Thanks
>> >> > >>>>>>>>>>>>>>> Ravi
>> >> > >>>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>>>  --
>> >> > >>>>>>>>>>>>>> Matthias Wessendorf
>> >> > >>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>> blog: http://matthiaswessendorf.wordpress.com/
>> >> > >>>>>>>>>>>>>> sessions: http://www.slideshare.net/mwessendorf
>> >> > >>>>>>>>>>>>>> twitter: http://twitter.com/mwessendorf
>> >> > >>>>>>>>>>>>>>
>> >> > >>>>>>>>>>>>>>
>> >> > >>>>>>
>> >> > >>>>>>
>> >> > >>>>>
>> >> > >>
>> >> > >>
>> >> > >>
>> >> > >
>> >> >
>> >>
>> >
>>
>
>

Reply via email to