A nice infographic on how to scale the Chronon Recorder.
More details on our Performance Guide
Chronon will now instrument any Dynamic Proxy class that implements any interface that is ‘included’ in your Recorder Configuration.
Time Travelling Debugger Support
The Time Travelling Debugger knows about Proxy classes and will allow stepping inside any call made on a proxy object.
Chronon Recording Server Support
The Recording Server will now correctly identify the relevant Dynamic Proxy classes to instrument during a dynamic Start/Stop.
In order to get the Dynamic Proxy support in your Recording Server installation, you only need to update the ‘recorder.jar’ file for all applications, which can be found in the Standalone Recorder Pack on the downloads page.
Today we had a bit of a mishap with the 1.8.0 release.
Soon after we released 1.8.0, we discovered a fix for a longstanding bug in the Recorder which would throw exceptions while instrumentation.
Since we like to get features and bugfixes out as soon as possible to our users, we immediately updated the Recorder and Eclipse plugin to 1.8.5. We even starting sending out mails to some evaluators to update their Eclipse plugins or Recording Server installations to 1.8.5.
However, as we were doing so, somebody found a bug in the new 1.8.5 release! Apparently the fix we had put in introduced another bug which caused local variable assignments to be not recorded!
But all is good now
So here we are now, everything is finally fixed and we have updated the version to 1.8.7. This should solve both the exception issue and the issue with local variables not being recorded.
Sorry for all the confusion and next time we wont be so hasty in putting out a bugfix which we haven’t thoroughly tested
Another week, another release!
This time we have a bunch of productivity boosing features our users have been asking for:
Yes, they are finally here! There is now a keyboard shortcut for almost every operation in Chronon. Its amazing how fast debugging is with these!
For all the Solaris fans, Chronon is now officially supported on Solaris x86 and 864 (32 bit and 64 bit) platforms!
Native agent binaries are available with the Chronon Eclipse plugin and the Standalone Recorder download pack.
Double click to jump
In views like Exceptions View, Threads View, Current Line view, you can just double click on the appropriate exception, thread, method to jump directly to it. No need to click the ‘step to’ button. More productivity boost!
Faster Stack View
The Stack view now uses caching and is much, much faster. Along with the keyboard shortcuts for stepping, you will find using Chronon blazingly fast!
We fixed some bugs with the Recorder. If you are using the Chronon Recording Server 1.7 or higher, you can download the Standalone Recorder pack and use the recorder jar from there to get the bugfixes in your Recording Server installation.
If your Chronon evaluation has expired, but you still want to try out these awesome features, contact [email protected] and we will provide you with an extended evaluation!
So go ahead and Download now!
While you are at it, don’t forget to check out the Chronon Recording Server!
I recently came across Mind maps.
I find them to be excellent for designing/architecting. Much better than a design document with bullet points and long descriptions.
If you think about it, take any problem, you usually end up first breaking down the high level concepts, then working your way down to the details of each in a hierarchical manner. Mind maps allow that naturally, and I have found them better than anything else to put thoughts on paper.
Below is a mind map showing the design of the ‘Open External Recording‘ dialog in Chronon.
Notice how easy it is to see each case and go all the way down to the minute implementation details of each. It is much more consice that a long design document and conveys the information much more clearly.
How would it feel if every time you opened a program or a website it asked you how much memory it could use?
Or even worse it by itself decided some maximum memory value for you which is far lower than the amount of ram on your system. How would you then feel if that said program or website threw an error in your face complaining about memory, all this while you had more than enough ram on your system for it to use?
What Java does
Apparently that is exactly how Java programs behave or rather the JVM implementations compel java programs to behave.
What it should Do
Now I am sure there are good technical reasons why this is the case. However I will cite the age old programming quote:
First make it correct, then make it fast.
In this case going Out Of Memory on a system which does have enough memory is plain incorrect. Any program on a system can due to unforeseen circumstances might temporarily require more memory than its user thought it would. It could be that disk IO became slow or there were suddenly a traffic spike for a few minutes, etc. Operating Systems found a way around this a long time ago using virtual memory and disk swapping. Sure swapping causes your program to go slow but it doesn’t outright crash it.
I have 24gb of ram on my machine (since ram is super cheap nowdays). I should never see an OutOfMemoryException. Yet time and again I see it pop up in Java programs, even when they were using a mere fraction of my 24 gigs of ram.
Real World Experience
We have so many cases of people using Chronon on 64 bit machines and getting Out Of Memory Exceptions. We keep getting queries like “but my machine has 4 gigs of ram” and we always have to say “but did you allow the jvm to use it? whats your -Xmx value?“.
Since the performance of Chronon is greatly impacted by memory, with our Time Traveling Debugger Eclipse plugin, during installation we bump up the -Xmx value of Eclipse. Although all this does is allow Eclipse to use the extra memory if needed, due to the common misconception out there, people think just by setting a higher -Xmx value Eclipse is magically using more memory than before.
All said and done, I think the need to specify a max heap or randomly choosing a heap size less than the system memory highly impacts the usability of Java programs in a 64 bit world, and leads to confusion with people who get Out Of Memory errors even though they have plenty of memory. The performance gains are not worth the errors and confusion.
Today we are updating the Chronon Recording Server to 1.7.
Apart from the obvious download related bug fix, this release contains 2 new features:
1. Active Heap Info
Now you can see the heap size of the application you are recording.
Note that for performance reasons, the heap size is updated only every 5 seconds.
2. Better Recorder Start/Stop Progress Info
Now when you start/stop the recorder on your application:
Since this release required changes to the communication protocol, if you are upgrading your existing Recording Server installation, you will need to update all 3 components : recorder, controller and recordingserver.war
Last week we had a big issue on our hands. A lot of people trying out the Chronon Recording Server beta were reporting they were getting corrupt files when they would download a recording from the Recording Server UI. The issue was occurring at random. Sometimes the files would be corrupt and sometimes not. And try as we might we just weren’t able to reproduce the issue on our end. We looked through our code and made a bit of change to what we thought could have been the issue and sent out the updated binaries, just hoping the issue was fixed.
But luck wasn’t on our side, our blind, shot-in-the-dark fix did not work and we were getting overwhelmed with support requests of corrupt downloads. On our end we were trying everything possible, like introducing lag, reducing bandwidth, adding more machines,etc; but nothing was able to reproduce the issue on our end.
Then finally it struck me. We would use Chronon to debug Chronon!
I asked one of our customers to take the Chronon Recorder and use it to record the Chronon Recording Server. Thus the next time he ran into the corrupt download issue, he simply took the Chronon recording of the Chronon Server and sent it over to me. Once we had the Chronon recording it was only a matter of minutes till we drilled down to the root cause and solved the issue!
This was one of first times we ourselves experienced the power of having a tool like Chronon. Had it not been for the Chronon Recorder we would still be pulling our hair trying to reproduce the issue and then debug it. Our customers would have continued to grow unhappier with our product, our credibility would be on the decline and it would eventually affect our revenues. If you have had to support products out in the field, you know how it is when an unhappy customer calls you about an issue and you have to make him go through all these hoops to try to figure out the root cause, making him even more unhappy in the process, till he eventually just gives up your product altogether.
With Chronon, all this just vanishes! The customer in this case just sent us the recording and no other communication was needed. We have the bug fixed now and tests in place. If you are a company that prides itself on customer support or, like Chronon Systems, pretty much depends on it to drive sales and revenue, then with Chronon you have an invaluable tool that can literally change the public perception of your company. As far reaching as this may sound, we can stand behind this statement now since last week we got to experience this for ourselves.
The major theme of this release is improving the workflow of downloading a file from the Chronon Recording Server and opening it in Eclipse.
There are two major features to that purpose:
Open .tar file directly
The ‘Open Recording’ dialog now allows you to point direcly to a .tar file.
It will automatically do the job of extracting the .tar file and unpacking it.
No longer do you have to manually extract the .tar file and create folders to extract and unpack them.
Specify Source Lookup paths
This has been a big request for some time.
A lot of times you have multiple projects in a workspace which have the same package and class names.
When you open an external recording you want to tell Chronon which specific project to look into to find the correct class when debugging the recording.
To that end, the ‘Open Recording’ dialog now allows you to create ‘Source Lookup’ definitions.
Creating and selecting a Source Lookup definition while opening an external recording instruct the Chronon Eclipse plugin to look only inside the projects you specify for displaying source code.
So go ahead and upgrade your Chronon installation!
We have decided to deprecate the developer mode a little bit. It is now used only by the eclipse plugin while recording from within eclipse.
The reasons for doing so are:
While the Recording Server may require a bit of an initial setup due to the need to install the Controller process on each machine, even this takes less than a minute and needs to be done only once.
Thus due to all the benefits described above we believe the Recording Server is the way to move forward for recording outside of Eclipse. It removes all the manual process which was previously required and replaces it with a nice, clean and easy to use GUI.