[Java] Profilers voor Java-development

Pagina: 1
Acties:
  • 103 views sinds 30-01-2008
  • Reageer

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik ben op dit moment Optimizeit van Borland even aan het bekijken en op zich is die wel aardig informatief. Maar qua mogelijkheden en verschillende soorten view behoorlijk beperkt. Vroeger had je ook JProbe maar ik kan niet bij de site komen dus mijn vermoeden is dat die zijn langste tijd heeft gehad. Zijn er nog andere profilers uit voor Java?

  • Donderwolk
  • Registratie: Januari 2002
  • Laatst online: 06-05 10:14
Ik vind zelf JProfiler wel een goede tool. Ook wel aardig uitgebreid en goede support voor JBuilder.

http://www.ej-technologie...s/jprofiler/overview.html

[ Voor 68% gewijzigd door Donderwolk op 15-06-2004 10:34 ]

Pwnd


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 04-05 14:55

Janoz

Moderator Devschuur®

!litemod

Ik hoorde gister iets over ik dacht JProbe. Er zou een gratis lite versie zijn uitgekomen. Misschien is het daarom slecht bereikbaar?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Donderwolk schreef op 15 juni 2004 @ 10:31:
Ik vind zelf JProfiler wel een goede tool. Ook wel aardig uitgebreid en goede support voor JBuilder.
http://www.ej-technologie...s/jprofiler/overview.html
Ik zal er even naar kijken, thanx.

en wauw.. hier is iets in euro`s zelfs goedkoper dan in dollars!

  • JeroenTheStig
  • Registratie: Mei 2000
  • Laatst online: 05:55
Alarmnummer schreef op 15 juni 2004 @ 11:36:
[...]

Ik zal er even naar kijken, thanx.

en wauw.. hier is iets in euro`s zelfs goedkoper dan in dollars!
Euro: 1.000
US Dollars: 1.2004

B)

Zijn de tools die hier in dit topic gepost zijn te vergelijken met FxCop voor .NET? Ik zal me eens verdiepen in dit onderwerp.

  • BTB
  • Registratie: Augustus 2000
  • Laatst online: 20-03 17:34

BTB

 

Wij hebben een tijdje terug ook optimizeit geprobeerd, maar dat kon onze applicatie niet aan, werd veel te traag en zo. Met jprofiler hebben we veel betere ervaringen, en is ook veel goedkoper.

Bram Bouwens


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
bbouwens schreef op 15 juni 2004 @ 13:08:
Wij hebben een tijdje terug ook optimizeit geprobeerd, maar dat kon onze applicatie niet aan, werd veel te traag en zo. Met jprofiler hebben we veel betere ervaringen, en is ook veel goedkoper.
Het ligt er aan wat je met optimzeit doet. Als je in de memory profiling mode zit, dan merk je dat behoorlijk in performance (en dat zit je standaard). Maar als je in de cpu profiling mode zit, dan valt het best mee.

En verder vind ik dat ook niet zo`n probleem. Tenslotte is het niet de normale manier van gebruik maar alleen om bottlenecks op te sporen.
boktor
Euro: 1.000
US Dollars: 1.2004
Helemaal mee eens, maar vergelijk de prijzen in de vs en nederland maar eens met bv hardware.

[ Voor 25% gewijzigd door Alarmnummer op 15-06-2004 13:26 ]


Verwijderd

Ik zat heel even naar jprofiler te kijken en moet zeggen dat ik erg onder de indruk ben van de support voor platformen. Bij de IDE's staat bv ook Eclipse. Er is tevens support voor J2EE en er staan daar zelfs andere application servers bij dan die eeuwige tomcat waar je normaal mee doodgegooid wordt.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Op Javaworld staat een review van deze 3 profilers:
http://www.javaworld.com/...003/jw-0822-profiler.html

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik ben nu met JProfiler bezig en het is dus erg informatief, erg goed afgewerkt product. ALs ik nu een zou moeten kiezen, zou ik echt voor deze gaan. (En dan ook nog eens die prijs!)

Verwijderd

Mischien even aardig om te vragen:

Wat vinden jullie van het gebruik van een profiler? Is dit een noodzakelijke tool voor jullie die je minstens 1 maal per X dagen zou moeten gebruiken, of vinden jullie profilers (net zoals debuggers) totale onzin?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 09:55

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ligt een beetje aan de app waaraan je werkt denk ik. Het profilen van een reguliere GUI app vind ik een beetje onzin, hoewel je met profilers natuurlijk ook dingen als memory usage enzo kunt meten, wat altijd wel handig is. Als je echter aan applicaties werkt waarbij performance een must is, zoals bijv. games, simulaties en server-side apps, dan is een profiler essentieel om een indicatie te krijgen waar de bottleneck zit en wat je dus moet optimizen. Optimizen zonder het gebruik van een profiler heeft niet veel nut, kans is groot dat je dan aan het "mierenneuken" bent door een stukje sneller te maken wat amper aangeroepen wordt vanuit de code, of wat sowieso al niet heel erg langzaam was.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Verwijderd schreef op 15 juni 2004 @ 19:34:
Mischien even aardig om te vragen:

Wat vinden jullie van het gebruik van een profiler? Is dit een noodzakelijke tool voor jullie die je minstens 1 maal per X dagen zou moeten gebruiken, of vinden jullie profilers (net zoals debuggers) totale onzin?
Je moet een profiler gebruiken als daar reden voor is. Gebruikt je applicatie belachelijk veel geheugen, of is die onnodig traag.. dan in een profilere gewoon de enigste oplossing. Je krijgt inzicht wie de objecten loopt aan te maken en hoeveel, wie loopt de cpu tijd te verzieken.

Ik zag net dat de remove(0) van een LinkedList erug veel trager is dan de removeFirst van een LinkedList. Tja.. daar was ik dus anders nooit achter gekomen.

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

offtopic:
LinkedList is gewoon altijd erg traag Alarmnummer :p. Gebruik nooit een LinkedList :p Zijn er trouwens nog zinnige List implementaties behalve de ArrayList? Ik heb wel eens een HashList gemaakt. Maar die heeft moeite met de index vinden van een object (net zo traag als een LinkedList)

[ Voor 57% gewijzigd door Macros op 15-06-2004 20:17 ]

"Beauty is the ultimate defence against complexity." David Gelernter


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Macros schreef op 15 juni 2004 @ 20:15:
offtopic:
LinkedList is gewoon altijd erg traag Alarmnummer :p. Gebruik nooit een LinkedList :p Zijn er trouwens nog zinnige List implementaties behalve de ArrayList? Ik heb wel eens een HashList gemaakt. Maar die heeft moeite met de index vinden van een object (net zo traag als een LinkedList)
Ik heb die hele list er intussen al uitgeknikkerd en vervangen door een bloedsnelle ringed buffer (die ik ook nog eens cache en die intern ook niet eens onnodig objecten aanmaakt)

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Alarmnummer schreef op 15 juni 2004 @ 21:02:
[...]

Ik heb die hele list er intussen al uitgeknikkerd en vervangen door een bloedsnelle ringed buffer (die ik ook nog eens cache en die intern ook niet eens onnodig objecten aanmaakt)
Wel op basis van een array hoop ik?

"Beauty is the ultimate defence against complexity." David Gelernter


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Macros schreef op 15 juni 2004 @ 21:05:
[...]

Wel op basis van een array hoop ik?
Nee op basis van een linkedlist natuurlijk!! (uhh.. voor de anderen.. een array (2 zelfs doordat in de queue altijd per 2 termen liggen opgeslagen))

[ Voor 12% gewijzigd door Alarmnummer op 15-06-2004 21:26 ]


Verwijderd

Macros schreef op 15 juni 2004 @ 20:15:
offtopic:
LinkedList is gewoon altijd erg traag Alarmnummer :p. Gebruik nooit een LinkedList :p Zijn er trouwens nog zinnige List implementaties behalve de ArrayList? Ik heb wel eens een HashList gemaakt. Maar die heeft moeite met de index vinden van een object (net zo traag als een LinkedList)
Waarom gebruik je dan geen HashMap?

  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
Alarmnummer schreef op 15 juni 2004 @ 21:02:
[...]
Ik heb die hele list er intussen al uitgeknikkerd en vervangen door een bloedsnelle ringed buffer (die ik ook nog eens cache en die intern ook niet eens onnodig objecten aanmaakt)
Nou dacht ik m'n datastructuren wel te kennen, maar wat is een 'ringed buffer' voor iets ?? :?

Zeker zelf bedacht, want zelfs Google kent 'em niet...

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Een HashMap is een implementatie van een Map structuur, dat is heel iets anders dan een List. Een ringed buffer is in dit geval een cyclische buffer. Het is een soort Lijst die oneindig groot is, maar als je over de grootte van de lijst heen gaat overschijft hij het 'oudste' opject. Een soort FIFO buffer.

"Beauty is the ultimate defence against complexity." David Gelernter


Verwijderd

Macros schreef op 16 juni 2004 @ 10:28:
Een HashMap is een implementatie van een Map structuur, dat is heel iets anders dan een List.
Klopt tis een soort array, met daarin de hahwaardes van de key als index. Mocht 2 keer dezelfde hash togevoegd worden wordt er weer gebruik gemaakt van een linked list. Voordeel van een Hasmap is dat deze zeer snel is: O(1) voor het opvragen van een element. Dat is stukken beter dan O(n) voor een LinkedList.
Macros schreef op 16 juni 2004 @ 10:28:
Een HashMap is een implementatie van een Map structuur, dat is heel iets anders dan een List. Een ringed buffer is in dit geval een cyclische buffer. Het is een soort Lijst die oneindig groot is, maar als je over de grootte van de lijst heen gaat overschijft hij het 'oudste' opject. Een soort FIFO buffer.
Een stack met een maximale waarde dus?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Verwijderd schreef op 16 juni 2004 @ 18:28:
Een stack met een maximale waarde dus?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
final public class EquationQueue {
    private Term[] _leftItems;
    private Term[] _rightItems;

    // Size of the current queue
    private int _size = 0;
    // Indexes of front and back of queue in the array.
    private int _front = 1;
    private int _back = 0;

    public EquationQueue(int length) {
        _leftItems = new Term[length];
        _rightItems = new Term[length];
    }

    public void addBack(Term leftTerm, Term rightTerm){
        assert!isFull();

        _size++;
        _back++;
        if (_back == _leftItems.length)
            _back = 0;

        _leftItems[_back] =leftTerm;
        _rightItems[_back]=rightTerm;
    }

    public Term getCurrentLeft(){
        assert!isEmpty();
        return _leftItems[_front];
    }

    public Term getCurrentRight(){
        assert !isEmpty();
        return _rightItems[_front];
    }

    public void removeFront(){
        assert !isEmpty();

        _size--;
        _front++;
        if (_front == _leftItems.length)
            _front = 0;
    }

    public boolean isFull() {
        return _size == _leftItems.length;
    }

    public void clear(){
        _size = 0;
        _front = 1;
        _back = 0;
    }

    public boolean isEmpty() {
        return _size == 0;
    }
}

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Wilt niet zeggen dat die code van Alarmnummer duidelijk is, maar volgens mij wel correct :)

"Beauty is the ultimate defence against complexity." David Gelernter


Verwijderd

Moet dit weer niet worden afgesplitst richting het fameuze "Array/ArrayList/Vector/Hashmap?"-topic? :D

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Verwijderd schreef op 16 juni 2004 @ 21:13:
Moet dit weer niet worden afgesplitst richting het fameuze "Array/ArrayList/Vector/Hashmap?"-topic? :D
Nope.

Ik maakte alleen een opmerking over het feit dat ik met die profiler achter info ben gekomen waar ik gewoonlijk nooit achter was gekomen. Dat voorbeeldje hierboven was puur omdat iemand erom vroeg.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik ben intussen van 2000/3000 LIPS (Logical Inference Per Second) al naar een 100.000 LIPS gegaan. Dit komt oa door JProfiler doordat ik goed inzicht krijg op bottlenecks en veel efficientere structuren kan gebruiken (vaak custom made).

Ik moet nu minimaal nog een factor 10 versnellen (eigen eis) en ik kan me gelukkig nog vergrijpen aan allerlei compiletechnische optimalisaties.

[edit]
En nu zit ik op 150K :D

[edit2]
186K :D :D

[ Voor 9% gewijzigd door Alarmnummer op 17-06-2004 21:45 ]


Verwijderd

Alarmnummer schreef op 17 juni 2004 @ 13:26:
Ik ben intussen van 2000/3000 LIPS (Logical Inference Per Second) al naar een 100.000 LIPS gegaan. Dit komt oa door JProfiler doordat ik goed inzicht krijg op bottlenecks en veel efficientere structuren kan gebruiken (vaak custom made).

Ik moet nu minimaal nog een factor 10 versnellen (eigen eis) en ik kan me gelukkig nog vergrijpen aan allerlei compiletechnische optimalisaties.
Beetje offtopic, maar uhh, gebruik je nu zelf ook prolog om te programmeren?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Verwijderd schreef op 17 juni 2004 @ 14:36:
Beetje offtopic, maar uhh, gebruik je nu zelf ook prolog om te programmeren?
Voor bepaalde problemen wel ja. We zijn nu bezig met een stemwijzer waarachter een expertsysteem zit. En dit expertsysteem is geschreven in Prolog (mbv metainterpreter/metaprogramma dus niet rechtstreeks in Prolog). Prolog is voor sommige problemen net ff wat handiger dan Java.

  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 12:31
En weer omhoog

Ik heb een budget gekregen voor het aanschaffen van een profiler. JProfiler is tot nu toe erg handig geweest, omdat die een aantal zere plekken op de server heeft blootgesteld.

Daarmee is het nut ook wel duidelijk geworden voor me en wil ook alle opties afwegen voordat ik er een koop.

Ik gebruikt Eclipse als IDE, JBoss & OC4J als app server, Java 5 en Oracle10g als DB

Tot nu toe heb ik alleen JProfiler geprobeerd -> erg onder de indruk, goed uitgewerkt

JDBInsight en Yourkit Profiler worden ook aangeraden, maar heeft iemand hier ervaring mee?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Alarmnummer schreef op donderdag 17 juni 2004 @ 13:26:
Ik ben intussen van 2000/3000 LIPS (Logical Inference Per Second) al naar een 100.000 LIPS gegaan. Dit komt oa door JProfiler doordat ik goed inzicht krijg op bottlenecks en veel efficientere structuren kan gebruiken (vaak custom made).

Ik moet nu minimaal nog een factor 10 versnellen (eigen eis) en ik kan me gelukkig nog vergrijpen aan allerlei compiletechnische optimalisaties.

[edit]
En nu zit ik op 150K :D

[edit2]
186K :D :D
500 MLips op mijn werk... :D en er kan nog een hele zooi geoptimaliseerd worden, oa indexeren op de argumenten.

[ Voor 7% gewijzigd door Alarmnummer op 04-05-2005 11:00 ]


  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 12:31
Alarmnummer schreef op woensdag 04 mei 2005 @ 10:59:
[...]

500 MLips op mijn werk... :D en er kan nog een hele zooi geoptimaliseerd worden, oa indexeren op de argumenten.
Hehe...zit je je eigen werk even op te geilen? :P

Verwijderd

Alarmnummer schreef op woensdag 04 mei 2005 @ 10:59:
[...]

500 MLips op mijn werk... :D en er kan nog een hele zooi geoptimaliseerd worden, oa indexeren op de argumenten.
En hoeveel tijd en geld heeft het ondertussen gekost?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
Verwijderd schreef op woensdag 04 mei 2005 @ 11:57:
[...]


En hoeveel tijd en geld heeft het ondertussen gekost?
Of opgeleverd ... :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • RSchellhorn
  • Registratie: Augustus 2001
  • Laatst online: 02-05 20:03
Er bestaat ook een Eclipse subproject die zich met dit soort zaken bezig houdt: Eclipse Test & Performance Tools Platform.

Heb het toevallig sinds een paar dagen in gebruik, dus beperkte ervaring nog. Er zijn drie modi van de plugin: code coverage, execution history en memory analysis. Je kan per run slechts een modus gebruiken, wat dus een nadeel is: het is of cpu tijd bekijken of geheugen. Bovendien is het vrij traag.

Goede punten dan, het is overzichtelijk geintegreerd in Eclipse en het is gratis.

"Ik heb zo veel soep gegeten, dat kan een mens niet aan. Ik heb zo veel soep gegeten, kan bijna niet meer staan. Ik zat daar maar te slurpen achter die grote kop en als ik bijna klaar was, dan schepten ze weer op!" (Hans Teeuwen)


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Verwijderd schreef op woensdag 04 mei 2005 @ 11:57:
[...]
En hoeveel tijd en geld heeft het ondertussen gekost?
Het is voornamelijk mijn eigen tijd dat daar in is komen te zitten. Ik heb op mijn werk alleen een betere computer staan ;)

En check verder hetgeen wat ik heb geoptimaliseerd. Het is instructieset van Prolog (geschreven in Java) en als je dit serverside wilt draaien en interessante dingen wilt doen, dan zul je wel een verdomd snelle implementatie moeten hebben als je veel data wilt verwerken. Met prolog krijg je namelijk bliksemsnel combinatorische explosies.

[ Voor 48% gewijzigd door Alarmnummer op 04-05-2005 12:20 ]


  • ronaldmathies
  • Registratie: Juni 2001
  • Niet online
JProbe bestaad nogsteeds (heb vorige week nog een mailing binnen gekregen met een CD). En deze is opzich erg uitgebreid en erg mooi.

De site is inderdaad wat traag zeg maar :-)

Verder heb ik alleen ervaring met een open source profiler maar deze kan niet met Applicatie Servers omgaan en hij heeft erg weinig views.

3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line


Verwijderd

Verwijderd schreef op woensdag 16 juni 2004 @ 18:28:
[...] Voordeel van een Hasmap is dat deze zeer snel is: O(1) voor het opvragen van een element. Dat is stukken beter dan O(n) voor een LinkedList. [...]
Ik vermoed dat het moet zijn O(log(n)) ipv O(1), maar dat is nog steeds zeer efficiënt.

Is er toevallig iemand die iets interessants kan zeggen over het gebruik van profilers in serverside omgevingen, bijv. Tomcat? In client side omgeving heb ik goede ervaring met verschillende profilers om heel gericht de pijnpunten in een programma aan te pakken en de rest ongemoeid te laten. In een webapplicatie vind ik het lastig om het resourceverbruik van de webapplicatie te scheiden van het resourceverbruik van de servercontext.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Verwijderd schreef op woensdag 04 mei 2005 @ 20:53:
[...]


Ik vermoed dat het moet zijn O(log(n)) ipv O(1), maar dat is nog steeds zeer efficiënt.
Eerder O(c).. c = constant, als je goeie verdeling hebt. Jij beschrijft bv de complexiteit van zoeken een boomstructuur.
Is er toevallig iemand die iets interessants kan zeggen over het gebruik van profilers in serverside omgevingen, bijv. Tomcat? In client side omgeving heb ik goede ervaring met verschillende profilers om heel gericht de pijnpunten in een programma aan te pakken en de rest ongemoeid te laten. In een webapplicatie vind ik het lastig om het resourceverbruik van de webapplicatie te scheiden van het resourceverbruik van de servercontext.
Check jdbinsight. En verder hebben de meeste profilers ondersteuning voor applicatieservers.

[ Voor 5% gewijzigd door Alarmnummer op 04-05-2005 20:56 ]


  • paulh
  • Registratie: Juli 1999
  • Laatst online: 12-03 16:31
Ik heb ook wel eens met Rational Purify gewerkt. Werkt prima maar is
wel van Rational (IBM) en dus heel duur.

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


  • windancer
  • Registratie: Maart 2000
  • Laatst online: 05-05 14:39
O(1) betekent dat de complexiteit beschreven kan worden als een constante maal 1, dus O(c) is hetzelfde als O(1). Voor meer info : http://en.wikipedia.org/wiki/Big_O_notation
Alarmnummer schreef op woensdag 04 mei 2005 @ 20:55:
Eerder O(c).. c = constant, als je goeie verdeling hebt. Jij beschrijft bv de complexiteit van zoeken een boomstructuur.
.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
windancer schreef op donderdag 05 mei 2005 @ 21:27:
O(1) betekent dat de complexiteit beschreven kan worden als een constante maal 1, dus O(c) is hetzelfde als O(1). Voor meer info : http://en.wikipedia.org/wiki/Big_O_notation
[...]
Zeurkous ;)
Pagina: 1