Looking at the code, the CPU circuit breaker is unusable.

This actually does use Unix load average 
(operatingSystemMXBean.getSystemLoadAverage()). That is a terrible idea. 
Interpreting the load average requires knowing the number of CPUs on a system. 
If I have 16 CPUs, I would probably set the limit at 16, with one process 
waiting for each CPU.

Unfortunately, this implementation limits the thresholds to 0.5 to 0.95, 
because the implementer thought they were getting a CPU usage value, I guess. 
So the whole thing doesn’t work right.

I’ll file a bug and submit a patch to use 
OperatingSystemMXBean.getSystemCPULoad(). How do I fix the documentation?

wunder
Walter Underwood
wun...@wunderwood.org
http://observer.wunderwood.org/  (my blog)

> On Dec 16, 2020, at 10:41 AM, Walter Underwood <wun...@wunderwood.org> wrote:
> 
> In https://lucene.apache.org/solr/guide/8_7/circuit-breakers.html 
> <https://lucene.apache.org/solr/guide/8_7/circuit-breakers.html>
> 
> URL to Wikipedia is broken, but that doesn’t matter, because that article is 
> about a different metric. The Unix “load average” is the length of the run 
> queue, the number of processes or threads waiting to run. That can go much, 
> much higher than 1.0. In a high load system, I’ve seen it at 2X the number of 
> CPUs or higher.
> 
> Remove that link, it is misleading.
> 
> The page should list the JMX metrics that are used for this. I’m guessing 
> this uses OperatingSystemMXBean.getSystemCPULoad(). That metric goes from 0.0 
> to 1.0.
> 
> https://docs.oracle.com/javase/7/docs/jre/api/management/extension/com/sun/management/OperatingSystemMXBean.html
>  
> <https://docs.oracle.com/javase/7/docs/jre/api/management/extension/com/sun/management/OperatingSystemMXBean.html>
> 
> I can see where the “load average” and “getSystemCPULoad” names cause 
> confusion, but this should be correct in the documents.
> 
> Which metric is used for the memory threshold? My best guess is that the 
> percentage is calculated from the MemoryUsage object returned by 
> MemoryMXBean.getHeapMemoryUsage().
> 
> https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryMXBean.html
>  
> <https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryMXBean.html>
> https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryUsage.html
>  
> <https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryUsage.html>
> 
> wunder
> Walter Underwood
> wun...@wunderwood.org <mailto:wun...@wunderwood.org>
> http://observer.wunderwood.org/  (my blog)
> 

Reply via email to