Some times its hard to find a way of explaining to the technically less literate the power that the Unix shell hands you. The original ideas behing the combination wordprocessor and programmers work bench combined with the power of pipes make text processing easy.
So to today's problem - analysing GC logs for latency spikes. As we run the jvm with the following properties;
-XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime \ -XX:+PrintTenuringDistribution -Xloggc:/path/to/gc.logfile
A week ago Rhoda and I got married. It came together very smoothly, mainly down to Rhoda’s phenomenal organisational skills, as well as the wedding planner we hired – (W.E.D.). That by itself would be more than enough - but to top it off we also took a couple of side trips with our friends.
the role of the interruption monkey
I promised matt carter I'd start writing up aspects of how we run agile operations (aka devops) at LMAX. Apologies this is so overdue.
One of the major tensions in any small techical operations team is the tension between project work and "interrupt driven" work. Interrupt work is hard to define, other than the slightly circular "being anything that is not project work". In practise this ranges from problems in production through to getting users working mice.
Small IT teams are usually pretty bad at dealing with interruptions, so we've developed the concept of an "Interruption Monkey" to keep things manageable.
In this article I run through how to create a simple ticker app off the LMAX API using PHP.
LMAX is the London Multi Asset Exchange. This is a low latency financial exchange which can be accessed directly by retail customers over the web using JSON or XML over a REST based interface.
The raw protocol not that pretty, so there are client libraries written in C# and Java. For fun and monitoring, I have written an unofficial PHP client library which I'm using here.
Its a feature not a bug.
We do odd things with java, that most places would probably use C or python for. Having said that we have some very talented people who can make java do wonderful things.
However when those wonderful things require elevated privilege like CAP_NET_RAW for packet capture, we run into a problem, which is that the kernel treats any executable which has a capability assigned as being equivalent to one with the "setuid" bit set.
As Java loads shared libraries by relying on glibc doing expansion of the environment variable $ORIGIN this can get broken by the setuid bit and some rules introduced to close an exploit.