Improvements in Jenkins You Don't See

Nicolas wrote a post about recent UI improvements in Jenkins the other day, but Jenkins also has more improvements than what meets your eyes. So let me talk about some of these other improvements, to encourage you to upgrade.

One such area is in performance improvements. I recently took a good look at page loading performance, with help from people all around the world. The break-through came when I was able to route my packets through them to experience a large latency, which really magnified the problem. Thanks to this, I made all the generated HTML pages served with gzip compression on by default in 1.458. Those HTML pages compress really well, and on configuration pages it normally reduces the data transfer to 1/4 to 1/5. This made a drastic impact on the load time of a configuration page, especially in a large latency network due to the congestion control mechanism built into TCP.

The same investigation also made me improve the use of static assets in plugins. Static assets in the core are served with a proper set of HTTP headers to enable clients to cache them, without doing conditional GETS to the server. But the same wasn’t done for static assets in plugins. As you install more plugins, your browser spends more time doing conditional GETs, which adds up to the page loading time. We need to update plugins for this change to really make an impact, but that’s already starting to happen.

Another area of improvement is a file handle leak. Thanks to problem reports from our customers, I’ve developed a nice diagnosis plugin that helps us pinpoint where the leak is happening. Through this tool and with cooperation from our customers, we were able to plug a couple of file handle leaks. When your JVM can no longer open new file descriptors, your Jenkins is really hosed (and when it happens in a wrong moment, the JVM panics and quits!), so this should help keep your instances going longer.

There are a number of other memory related improvements already released and in the pipeline. These tend to involve in a sudden spike in a memory consumption — there are places where we anticipate just a small amount of data, so we casually use ByteArrayOutputStream or something. And next thing you know, you got 20 MB of data in it, and that puts a real strain on JVM!

Those are just a few examples of things that go into Jenkins releases. So really, you should upgrade!

 

- Kohsuke
Founder, Jenkins Project, &
Elite Developer and Architect, CloudBees
www.cloudbees.com

 

Blog Categories: 

Comments

Hi Kohsuke, It seems that the gzip compression that you mention in 1.458 is in conflict with cobertura plugin: I can no longer access the graphical code coverage results produced by the plugin since I upgraded. Did you check that? regards, didier

It isn't just Cobertura. I'm not sure which plugin i'm using that is causing problems but 1.463 is getting me a content encoding error when i try a 'build now'

Add new comment