Its taken us a while, but Java 7 support is finally here!
If you use the Chronon Recording Server, you have to add one extra argument (alongside the jaavaagent arguments): -XX:-UseSplitVerifier
Note that we don't support other dynamic jvm languages like Groovy, etc, so the invokedynamic instruction in the jvm (which is used by these lanagues, not Java) is not supported by Chronon.
We usually update Chronon so often (almost every few days) that when we even sometimes we do a traditional company style update, which takes a few weeks, our users get a little upset :-)
But not to worry, because version 3.2 is finally here!
We got delayed a bit with this one because some of the bugfixes and performance enhancements we wanted to make needed us to change the recording file format in a way that broke compatibility with previous versions of the debugger. Thus we combined a bunch of fixes/updates into one big update. Here is what it contains:
Unpacker Performance and File size improvements
Both the file size and time taken to unpack have been reduced by almost 20%. Enjoy a faster Chronon experience!
Tons of them. If you were running into bugs in the debugger, you couldn't be anymore. If you use the Chronon Recording Server, make sure to update the Chronon Controller since this one contains a critical bugfix.
Enjoy the new Chronon and rest assured our future updates will not take this long.
Its not even been 2 weeks and 3.1 is already here! We told you we will be releasing fast from now on.
3.1 is a bugfix release.
If you had any issues with the debugger, eg NullPointerExceptions, unpacking issues, etc; they should all be fixed now.
For the Recording Server, all issues with recorder crashing or corrupt recordings should be fixed. If you have an existing Chronon 3 Recording Server installation, you dont need to update the controller processes. Also if your Chronon 2 trial has expired, you should now see a form to automatically download an updated trial license (instead of needing to send us a mail).
We have had great feedback on the improved performance of Chronon! Enjoy!
Its been a long time coming, but Chronon 3 is finally here!
In the next few posts, we will dive deep into what took us so long and all the technical magic that makes Chronon 3 tick. For now lets see what Chronon 3 brings us:
- Enormous performance upgrade
The number one issues of Chronon users has been running into OutOfMemoryErrors and all of Chronon 3 is dedicated to eradicating that. The all new, rewritten from scratch Recorder is built to conserve memory. It uses off heap memory as much as possible and even then limits the amount of total data collected by the Recorder to be many times lower than that of previous versions. This graph gives you an idea of the improvement.
- 5x faster unpacking
The Unpacker is much faster too! Apart from consuming much, much less resources, it also runs 5x faster!
- Per Thread Time
With Chronon 3, we are introducing Per Thread Time, which gives each thread its own timeline, facilitating in must easier and faster debugging. Now the timeline view shows you the time and progess of the current thread instead of the whole system, giving you much more focused data. This is carried on in other views too, like the Stack view shows the current thread only instead of cluttering the view with all the threads in the system. The result of this is much more focused data and it also allows us to make the recorder more concurrent and faster.
- On Demand Split
In case you missed it, a few months back we also introduced On Demand Split in the Recording Server, allowing you to split recordings anytime, without having to wait for a split interval.
- Support for JBoss
Previously, Jboss 7 was having issues with Chronon due to OSGI classloader issues. With Chronon 3, this should be solved and you should be able to fully record your JBoss apps.
Now that we are done with this huge release, we will be doing much, much faster releases to keep bringing you new features. Due to time constraints for this release, we have decided not to include the 'Recorded Console' view. We think with Post Execution Logging you can achieve the same goal without cluttering your code with println() statements. However, if there is demand for it, we will bring the view back in the next update.
If you don't own a Chronon subscription and your trial has expired, dont worry! You'll get a fully renewed trial now when you download Chronon 3. Same goes for students. If your student license has expired, request your student license again and you will get a renewed one too.
This is our final feature update for Chronon 2 before the Chronon 3 release. The update is mainly to the Chronon Debugger and contains some bugfixes and polish of existing features:
Keyboard shortcuts in Stack View
Chronon 3 recording warning
If you try to open a Chronon 3 recording in Chronon 2, instead of just a random crash, an appropriate error message is displayed.
More polished Select Value dialog in Method History View
When you select to filter by 'Local' expressions in Method History view, the 'Select Value' dialog now enables/disables controls as you select them and does validation on each field to make sure you enter a correct value.
Next up... Chronon 3
As mentioned previously, next post onwards we will start talking exclusively about Chronon 3. Why we got delayed? What have we been upto? How does Chronon 3 get its insane speed?
We know you have many questions. Take the red pill and come with us down the rabbit hole. The answers are coming!
While we get Chronon 3 ready, we thought of making an interim release with some goodies our users have been asking for:
Chronon Recording Server
Recording Server is the highlight of this release, and contains the most voted feature from our users:
On Demand Split
Now when you encounter a bug while testing/QA, no longer do you have to wait for an 'automatic split interval' or do a 'Stop Recording' which results in a lengthy 'deinstrumentation' phase and then 'Start Recording' again (which will result in another lengthy 'instrumentation' phase).
Just click the new 'Split Recording' button and a recording is created instantly on disk and the recorder keeps running!
Here is a demo video demonstrating this feature:
Make sure you get the latest version of Recording Server now!
Chronon Time Travelling Debugger
Some enhancements based on user feedback:
- An Id column has been added to allow easily referring to each time bookmark by an id, instead of a complex, lengthy 'time' value.
- All columns are now sortable.
- An Id column has been added here too.
Dont forget to update your debugger!
Embedded Chronon and Chronon Recorder
If you were getting a corrupt recording when using either Embedded Chronon or Chronon Recording Server, these bugfixes should now prevent that.
Also for the first time we have updated the native agents too, from version 1.0 to 1.1.0.
Bugfix release for the Recording Server UI.
This is a bit of a late announcement since the binaries have been available since middle of last week.
If you are using v 2.x of Recording Server, then you can just update the .war file to get the new fixes.
You should no longer see screens like this anymore with v 2.3
This is mainly a bugfix release for all components.
Some enhancements to the Debugger UI:
Import/Export available for 'Post Execution Logging' and 'Timeline' views
Servers tab now has 'Record' button in main toolbar
Bugfixes for all 3 components: recordingserver.war, controller and recorder.jar.
Each component in this release can be updated indepently.
Thus for example, if you dont want to update the controller on each box, you can just replace the recorder.jar files with the updated one and leave the rest still running.
If however you are updating from a beta version, you will need to update all 3 components at once.
Grab the latest version from our download page now!
We have updated the Chronon Eclipse plugin to support the Google GWT plugin. You need GWT plugin version 2.4.2 or higher for the Chronon plugin to be enabled for it.
With the GWT support:
- You can record GWT applications easily in development mode.
- The GWT 'Development mode' view has the Chronon 'blue' stop button that is enabled when you are recording a GWT application. Make sure to use that instead of the 'red' button to stop your GWT applications, otherwise the recording wont be saved properly.
Now that the Chronon Recording Server is out of beta, here are some changes we made to it based on a lot of feedback from our customers to improve the experience for everyone:
The complex installation procedure of the Recording Server was among the biggest complaints during the beta period, so we sought to make it much more simpler.
The complaints centered around an understanding of the various ports used for communication and the high amount of configuration needed. We have cut down on both in this release.
The biggest change we made was with respect to the Recording Server .war file itself. During the beta period, you had to put a special configuration file to tell the Recording Server which port to listen on. This was confusing in many ways:
- The xml file with the context parameter was specific to the container, so you had to figure out how to pass the context parameter for your specific container.
- The mention of port itself was confusing to a lot of people. They couldn't differentiate between the port used for accessing the web ui in the container and the port at which the recording server was listening. We would get frequent complaints like "I configured port 80 for the recording server, but when I type localhost:80/recordingserver nothing happens". And we would have to explain that the web ui was still running at the port of the container it was deployed on, eg localhost:8080/recordingserver. But by this time it was all too confusing for the user.
We have made the experience much simpler now, by removing the need for the xml file entirely. Now you just deploy the .war file normally in your container. When the recording server is first accessed, it will ask the user to specify a port to listen for controllers.
This has multiple benefits:
- No xml file needed to configure the port. Its all done in the UI and can also be changed directly from the UI at any point.
- Since the user accessed the recording server web UI the first time using the port of the container in which it was deployed, eg by using localhost:8080/recordingserver, he no longer has confusions as to differentiating between the port at which to access the UI and the port at which the Recording Server listens.
- Since the UI explicitly states that the port the user is specifying is the one at which the recording server will be listening to controllers, when editing the controller config file, the user knows exactly which port number to use.
Result - Install in < 2 mins
We have even made a video of the recording server installation along with 2 controllers. The video is < 2 mins in length and goes to show how simple it is to install the recording server now.
Running Controller without admin privileges
Another issue during the beta period was some people not having admin access to install the controller and instead of getting admin permission, they wanted to quickly evaluate the product. We have now updated the documentation to show how to use the Controller temporarily without requiring administrator privileges.
The Recorder Status panel in the Recording Server now has a button to get a Thread Dump of the application being recorded. Can come in handy if your application freezes for some reason or if you just want to know what is going in all those threads.
Recording for long periods of time
We even made a big change with the recorder to allow running it for long periods of time.
Previously we were using a custom thread local mechanism which needed you to specify the total number of threads created in advance. This was set by default to a high number like 5000. However, there are many programs out there that do not use thread pooling and would create and destroy threads, moving the thread id number to cross whatever 'max' value you put.
Thus we decided to use a different algorithm now, which completely removes the need for specifying a max value. You can create and destroy as many new threads as you want now!
This has made the configuration simpler both in the Recording Server UI and the Chronon Eclipse plugin, since there are no longer any fields needed for specifying maximum threads.