Fix Version/s: 17
Compatibility Risk Description:This option is new and the default behavior is same as before. Therefore, no compatibility risk will be present.
Interface Kind:add/remove/modify command line option
Add a global option
-Xlog:async to the Hotspot command-line options, which directs unified logs to be written asynchronously.
Writing to logs may be blocked. For example, writing logs to a filesystem could be blocked by the kernel. Writing logs via a socket or other network-backed virtual filesystems could block due to network. If the block of log writing occurs when the VM wants to go to a safepoint, or initiate a handshake, then the VM can experience long pauses which then increase the response time of a Java application/service. In the worst case, hotspot may hang at a safepoint.
Our solution is to provide a new feature "Asynchronous Logging" for the unified logging subsystem. In asynchronous logging mode, log sites enqueue all logging messages to a buffer and a standalone thread is responsible of flushing them to the corresponding outputs. The intermediate buffer is bounded. Log entry write operations are guaranteed non-blocking. On buffer exhaustion the enqueuing message is discarded so that under no circumstances will logging block threads.
-Xlog:async Write all logging asynchronously.
If the user passes
-Xlog:async on the command-line, then the JVM uses "Asynchronous Logging" for all logging. This feature is disabled by default.
A new product option
-XX:AsyncLogBufferSize is added, which specifies the memory budget in bytes for the intermediate buffer. The default value should be big enough to cater for most cases. Users can provide a custom value to trade memory overhead for log accuracy if they need to.
product(size_t, AsyncLogBufferSize, 2*M, \ "Memory budget (in bytes) for the buffer of Asynchronous Logging (-Xlog:async). ") \ range(100*K, 50*M) \