I would love to see what's really causing this bug. We read so many times over the weekend to either reboot or just run that date command - but nobody is telling us what's causing the problem.
Also, seeing that other threaded applications had similar problems, I doubt this is a java issue - more likely a pthread, glibc or even kernel issue
Apparently the issues might be due "to the leapsecond being added without calling clock_was_set() to notify the hrtimer subsystem of the change", a possible fix being to patch kernel/time/timekeeping.c to be leapsecond aware.
That's predominantly about the kernel crash, not the high-CPU futex issue. One of the most maddening things about this is that there have been several different issues related to leap seconds on Linux, making it all the harder to get information.
Hard to call this a Java bug when many other, non-Java things are affected. It's a critical Linux bug that causes futex to timeout, and anything that uses it to behave incorrectly.
It's probably that Java heavily utilizes the multi-thread support and the kernel bug is showing up as a Java bug. It just means Java really exercises the system's concurrent support.
ecopoesis, you are not the only one saying that it's a linux bug instead of a java bug even though the link title says "Critical Linux bug that leads 100% CPU (leap second)".
Did the link title change from a Java title, like the article, to a Linux title to match the actual root cause?
Thank you for that link! I had been scratching my head about that server even though it wasn't mine to take care of (the other service I'm involved with here, that I helped plan, uses Postgres, which does not seem to have problems).
I saw what is likely a related issue on one of our AWS EC2 instances, where exactly at midnight UTC there was a high percentage of 'steal' CPU time in our server monitoring charts.
I wonder if this was caused by another VM on the same physical box being hit by the bug and as a result stole CPU time from our VM.
I resolved the issue by moving to a different VM (Rebooting didn't help), to get away from my greedy neighbor.
My rig crashed all weekend because of this POS bug, I had to boot back to Windows to get anything done (oh cmd, I really didn't miss you at all you insufferable bitch...)
So if the leap second was handled in userspace instead of the kernel, just like a normal ntp time update, all would have been fine. Why not just do that?
On Sunday I noticed that Gerrit (code review, written in Java) was chewing through CPU on one of our servers. Just applied this it appears to have settled down.
I hate tzdata updates with a passion, politicians should just get a grip and stop messing around with timezones. I'm all for ideas that create new jobs but this isn't one of them.
If you come up with a way of predicting when leap seconds will be needed (hint: it's not a constant regular time interval), let us all know. Until then, there will need to be adjustments.
Leap seconds aren't needed at all. I'd rather let them accumulate until there's a leap hour that can be rolled into DST (although DST may not exist that far in the future).
DST doesn't exist in UTC, so that's irrelevant. A one-hour UTC shift would totally, utterly, screw stuff up. But, at the current rate, a one-hour "leap" would happen in thousands of years, so maybe it's not such a bad idea after all. But I think the reason for leap seconds has to do with keeping UTC in sync with other clock systems, and that probably overrides any inconvenience to software.
I wonder why they don't implement the google solution on pool.ntp.org.
I.e. gradually slow/accelerate time over the course of a day, rather than stepping it hard at once.
I'd say this approach would be vastly preferable for about 100% of the systems relying on pool.ntp.org.
The remaining 0%, e.g. scientific applications that absolutely need the leap second to appear at exactly the right moment, most likely don't use pool.ntp.org anyways.
And for those who do they could create a second pool with the old behavior. Maybe call it science.ntp.org.
The solution is not to change UTC, but just to rotate the time zones of each country every now and then. DST has proven that a country is able to change time zones twice a year. This would happen far less often.
A one-second UTC shift seems to be pretty good at totally screwing stuff up already. At least a one-hour shift would happen once every few centuries instead of once every few years.
You don't think the leap-hour will be a new millennium bug?
When you look at how much people crap their pants over the leap second - a relatively common thing - I dread to think how unprepared people would be for something 3,600 times less common.
Yes, it would be similar to Y2K. Hopefully politicians could agree decades in advance so people would have plenty of time to prepare. Also, since you're only changing the tzdata and not UTC, much less would break and most of the breakage would be purely cosmetic. Right now we have several tzdata changes per year and they cause much less disruption than leap seconds.
I can't switch to TAI because then I'd be 30 seconds off from everybody else. And everybody can't switch to TAI because that disruption would be even larger than what we saw this weekend. IMO the solution is to leave the leap seconds that were already added but not add any more.
Also, seeing that other threaded applications had similar problems, I doubt this is a java issue - more likely a pthread, glibc or even kernel issue