WebSphere - built-in memory profiler - websphere

I have tried some java profilers to profile WAS memory, but I guess due to the all SUN/IBM java thing, they don't support WAS.
Is there any built-in way to profile memory / analyze the heap dump a bit more / something in tracing and monitoring, perhepas?
If not, I know of some products - but the things is that we are in a closed enviornment - I can't just download and run. So if there is anything that comes with WAS, I would like to know.
Thank you.

Check out the HealthCenter
http://www.ibm.com/developerworks/java/jdk/tools/healthcenter/
It should be a reasonable one for you!

I am not aware of any profiler that comes with WebSphere but you can download IBM Support Assistant (Free) and download the HeapAnalyzer which is very good for analyzing heap dumps.
Personally I did not try v5 yet but used the heap analyzer a lot.I

There is no built-in thing to do that, but IBM offers a graphical GC and Heap Analysing Tool. You will have to download it from IBM.
Please have a look here:
https://www.ibm.com/developerworks/java/jdk/tools/gcmv/

The Eclipse Memory Analyzer can analyse both IBM and non-IBM heap dumps. It's also available in the IBM Support Assistant as a supported tool.

Related

How to see if a disk is full in WPA or PerfView

I am using WPA and PerfView to capture traces to diagnose why an IIS server hanged.
We have reasons to believe that at the time one of the disk was completely full.
Is there a way to see in these tools (WPA, PerfView) how full the disks are?
We get a lot of useful and detailed information out of the tool but I fail to find just this simple metric.
Thank you!
The Windows Performance Analyzer shows the free Clusters from the Windows Kernel/SystemConfig/LogDisk Event in System Configuration/Storage:
To see it in Perfview, search for LogDisk Event:

Memory profiling tools

Hi
I am trying to find a memory leak issue at a client site. They are using our application and over time while using it the application runs out of memory and throw an OutOfMemory exception. It would not be easy to replicate the issue inhouse since we will have to sit for hours to replicate their workflow. So I need to put a tool (possibly free) on their machine which should be able to tell me how the memory is being uesd by the application and some generation infor. So doen anybody know of a tool that can achieve this or can anybody point me in a direction that can help me find the problem without profiling the whole application in dev env
Assuming Java, you can set the -XX:+HeapDumpOnOutOfMemoryError flag, which will cause the JVM to dump the heap when it throws out of memory exceptions. Then, you can take the dump and run it through jhat to see where the memory is being allocated. (There's also an Eclipse based heap dump analysis tool.) I've used this in the past with great success.
It so happens that the new CLR Profiler with support for .NET 2.0 through 4.0 was just released by Microsoft:
David Broman's CLR Profiling API Blog: CLRProfiler V4 Released
It's free.

Reducing the size of minidumps of managed programs while keeping some heap information?

With the dump debugging support in .NET 4.0 we are looking into automatically (after asking the user of course :) creating minidumps of C# program crashes to upload them to our issue tracking system (so that the minidumps can assist in resolving the cause of the crash).
Everything is working fine when using the WithFullMemory minidump type. We can see both stack and heap variables. Unfortunately the (zipped) dumps are quite large even for small C# programs.
If we use the "Normal" minidump type we get a very small dump, but not even stack variable information is available in the managed debugger. In fact, anything less than WithFullMemory seems quite useless in the managed debugger. We have made a few attempts at using a MINIDUMP_CALLBACK_ROUTINE to limit the included module information to our own modules, but it seems that it has almost no effect on a managed dump but still manages to break the managed debugging?
Does anyone have any tips on how to trim the minidump while keeping it useful for managed debugging?
I use the following flags to save space will generating useful minidumps for C++ applications:
MiniDumpWithPrivateReadWriteMemory |
MiniDumpWithDataSegs |
MiniDumpWithHandleData |
MiniDumpWithFullMemoryInfo |
MiniDumpWithThreadInfo |
MiniDumpWithUnloadedModules
The flag values are specified in DbgHelp.h and would need to be marshaled into C#. The dump is further restricted by specifying a CallbackRoutine.
Just fyi, as mentioned above ClrDump looks very cool but it appears it only works with the 1.1. and 2.0 runtimes.
With all due respect, I STRONGLY encourage you to sign-up for a Microsoft WinQual account, register your applications with Microsoft.
http://www.microsoft.com/whdc/winlogo/maintain/StartWER.mspx
This will allow you to not only take advantage of Microsoft's extensive crash collection and analysis services (for free!), but will also allow you to publish fixes and patches for your applications through Windows' built-in error reporting facilties.
Further, by participating in the WinQual program, enterprises who deploy your app and who employ an in-house Windows Error Reporting system will be able to collect, report and receive patches for your app too.
Another benefit is that employing WinQual, you're one step closer to getting your app logo certified!
Every OEM & ISV I've worked with who uses WinQual saves an ENORMOUS amount of effort and expense compared to rolling their own crash collection and reporting system.
I wrote an email to author of ClrDump asking a question what MINIDUMP_TYPE parameters his tool used to create dumps in 'min' mode. I posted his answer here: What is minimum MINIDUMP_TYPE set to dump native C++ process that hosts .net component to be able to use !clrstack in windbg
ClrDump might help you out.
ClrDump is a set of tools that allow to produce small minidumps of
managed applications. In the past, it was necessary to use full dumps
(very large in size) if you needed to perform post-mortem analysis of
a .NET application. ClrDump can produce small minidumps that contain
enough information to recover the call stacks of all threads in the
application.

IBM RAD 7 and Websphere 6.1 is slow and unresponsive

How can I improve performance when developing locally with Websphere and RAD? I am using one web application of moderate size (1000? classes) and it is impossible to handle the app locally on a Windows box. The Websphere 6.1 configuration uses the default configs. RAD7 is configured to handle a max heap of 1024mb. I thought about increasing the heap of the server. At present, the min and max are 128/300mb.
In terms of unresponsiveness, sometimes it may take minutes to load a page, if the page loads at all. Also, I disabled "Build Automatically" and Publish Automatically. Maybe those should be turned on?
I'm not sure about RAD7 but from my past experience, I'd suggest to give MyEclipse Blue a try.
Since that might not be an option, here are some other usual culprits, you can check:
How much RAM does your machine have? It's good to give WS 1GB of RAM but if your computer only has 1GB of real RAM, it's going to swap itself to death. If your boss won't pay for it, go get some RAM with your own money. 2GB are less than $80 ATM. I suggest to get at least 4GB. Yes, Windows can only use 3.5GB even when 4 are installed but that half GB costs $20 or less. Even thinking about this for more than five minutes will cost more than simply buying it.
Next make sure whether you are using the correct Java GC options. There should be some info about this in the docs. Plus make sure that the process uses the "jvm.dll" from the "server" directory, not the "client" one. "Process Explorer" will help.
Since I'm not using RAD, I'm not 100% sure about "Build Automatically" and "Publish Automatically" but since RAD7 is based on Eclipse, these options will compile code in the background as you type. This will greatly reduce the time between you saving your last change and the moment the app server can start to load the new code.
When all else fails, run websphere in a profiler and look where it spends all the time.
Aaron had great advice.
I would also suggest using JConsole to see what is going on, to help you determine if you need more memory, larger heap size, etc. My experience with running Websphere and RAD locally is that it will be slow, but then I was on an old machine that needed more memory. :)
http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
Berlin,
RAD 7 saps your PC! When I was using it to develop Portlets, I followed this optimization guide and it made the IDE significantly quicker to develop Portlets in. Obviously it is aimed at Portlet development but it might help you.
Also following the advice given to the answer to this question will also help.
I definitely agree with Aaron Digulla. You will see a major performance improvement with 4GB RAM installed on your development machine. I developed an Eclipse/RAD plugin with some buddies of mine and we were able to measure how much time we saved by upgrading from 2GB to 4GB.
The plugin is available here: http://lopb.org/
After gathering some hard numbers on how much time we spent waiting for publishing and loading the app on our 2GB development machines, we were able to convince management to upgrade the rest of the developers on the team.
Anyway, you should really consider upgrading to 4GB if you want to run RAD 7 and Websphere 6 on the same development machine. Each one needs -Xms=512m -Xmx=1024m as JVM args to run well, and that means you will swap to disk way too much if you only have 2GB of RAM or less. HTH
Make sure your running was in development mode for your development and testing.
Option is under the server in the console.
Karl
hehe, we had the same problem with RAD6 and Websphere 6.
The way we speeded things up is moved to Eclipse and JBoss.
We developed on Eclipse and JBoss and then first round of testing was on Websphere. We had some issues with the differences but would never had completed the project were it not for out switch (a lot fewer issues than deving on RAD/WAS).
But to help you in the mean time...
Definitely, probably want build automatically and publish automatically off. That way you can make a bunch of changes and then tell RAD to compile and deploy while you go and get coffee.
There is a "run in dev mode" in Websphere (I know there was for 6.0) so track that down and turn it on (it's on the WAS console somewhere)
I found WAS's on stack replacement to work fairly well. I found that at the beginning of the day I'd deploy to WAS and then not have to redeploy at least until lunch time (as I was debugging). I would make changes and the changes would be fed to the server without my having to redeploy.
Chances are, even after running the profiler you'll find there's nothing much that you can do..
Turn off all validations (in RAD), they tend to take forever.
Depending on what you're doing with EE investigate the possibility of deving on another IDE/Server combo, maybe you can do the bulk of your work in there and then deploy from RAD/WAS to do some final testing. If you're using vanilla ejb's or web services this is feasible.
That max heap does sound a bit small to me. The suggestion to fire up JConsole is a good one cause it will tell you how much heap is being used, though I'm not sure if it will work on the IBM vm (RAD's). You might try and turn on the memory usage monitor in RAD, tells you how much memory is being used, that way you can tell if it's hitting the max.
JConsole will not work without specifically enabling it via a JVM command line switch.
Suggestions from Michael Wiles sound reasonable but please update your RAD first to the latest FixPack available.
You can also contact support.

Profiling a COM application?

I have a big application written in Visual Basic 6 and I need to profile it.
Is there something like ANTS Profiler but for COM applications?
I used to use VBWatch. I had a good experience with it and it helped me nail down and resolve some pesky performance problems
Have a look at VTune from Intel it has native profiling as well.
If you're having problems using VTune try AQTime profiler from AutomatedQA instead.
GlowCode is another good tool. I've used it successfully with VB6. The nice part is that you don't need to instrument or recompile your code. All you need is the symbols (.pdb file) that VB6 can already create for you.
Better late than never? VB6 has a "pause" button, right? Not only is it free, and requires no installation, but in my opinion it is by far the best tool for locating performance problems.
AutomatedQA
That's your best bet.

Resources