Return-Path: X-Original-To: apmail-logging-log4j-dev-archive@www.apache.org Delivered-To: apmail-logging-log4j-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 1F9D019BBB for ; Wed, 27 Apr 2016 15:29:15 +0000 (UTC) Received: (qmail 561 invoked by uid 500); 27 Apr 2016 15:29:14 -0000 Delivered-To: apmail-logging-log4j-dev-archive@logging.apache.org Received: (qmail 99937 invoked by uid 500); 27 Apr 2016 15:29:14 -0000 Mailing-List: contact log4j-dev-help@logging.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Help: List-Post: List-Id: "Log4J Developers List" Reply-To: "Log4J Developers List" Delivered-To: mailing list log4j-dev@logging.apache.org Received: (qmail 99906 invoked by uid 99); 27 Apr 2016 15:29:13 -0000 Received: from arcas.apache.org (HELO arcas) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 27 Apr 2016 15:29:13 +0000 Received: from arcas.apache.org (localhost [127.0.0.1]) by arcas (Postfix) with ESMTP id 7C8E12C1F84 for ; Wed, 27 Apr 2016 15:29:13 +0000 (UTC) Date: Wed, 27 Apr 2016 15:29:13 +0000 (UTC) From: "Remko Popma (JIRA)" To: log4j-dev@logging.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Updated] (LOG4J2-1297) Document "gc-free" configuration and performance MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/LOG4J2-1297?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Remko Popma updated LOG4J2-1297: -------------------------------- Attachment: ResponseTimeSyncGarbageFree.png > Document "gc-free" configuration and performance > ------------------------------------------------ > > Key: LOG4J2-1297 > URL: https://issues.apache.org/jira/browse/LOG4J2-1297 > Project: Log4j 2 > Issue Type: New Feature > Components: Documentation > Affects Versions: 2.5 > Reporter: Remko Popma > Assignee: Remko Popma > Fix For: 2.6 > > Attachments: LatencyHistogram.png, ResponseTimeAllAsyncClassic5k-800k.png, ResponseTimeAllAsyncGarbageFree.png, ResponseTimeAllAsyncGarbageFree2.png, ResponseTimeSyncClassic.png, ResponseTimeSyncGarbageFree.png, garbage-free2.6-SyncThroughputLinux.png, log4j-2.5-FlightRecording.png, log4j-2.6-FlightRecording.png > > > Update the site with a description of which configurations are GC-free (i.e., that don't create temporary objects in steady running state). > Currently that means > * Loggers are all asynchronous (Log4jContextSelector is set to org.apache.logging.log4j.core.async.AsyncLoggerContextSelector). > * The configuration does not contain a section. > * The "steady-state" appenders are either RandomAccessFile or RollingRandomAccessFile Appenders (logging to any other appender will cause temporary objects to be created - including ConsoleAppender). > * The Layout is a PatternLayout that uses one of the pre-defined date formats, does not have any regular expression replacements, and does not have lookups (TODO: may need to restrict this further). > * The thread name is cached (this is the [default|https://issues.apache.org/jira/browse/LOG4J2-467]). Running with -DAsyncLogger.ThreadNameStrategy=UNCACHED will create garbage. > * In user code, when logging a parameterized message, the number of parameters is no more than ... (TBD pending discussion in LOG4J2-1278). > * In user code, when logging a parameterized message, parameters of primitive type are boxed in a reused StringBuilder (Log4j provides a utility to make this relatively painless). > Even with the above restrictions, Log4j may occasionally create garbage: > * Initially StringBuilders are presized to 128 characters. They may grow for larger messages (contributing to garbage in Old Gen). If the StringBuilder grows beyond 512 characters it is trimmed back to 512 characters to prevent memory leaks from excessively long messages. (TODO: the resizing algorithm is {{size = value.length * 2 + 2}}, so a better cutoff value is 518.) > * Messages containing {{"$\{"}} will be converted to a String and StrSubstitutor will be used to replace occurences of variables with their matching values. Multiple temporary objects are created during this process. > Furthermore, we need to explain that some of this functionality depends on ThreadLocals and so is disabled by default in web applications to prevent memory leaks. The page should also explain how to manually switch off the use of ThreadLocals. > Finally, the page should show a performance test comparison similar to the [performance section|http://logging.apache.org/log4j/2.x/manual/async.html#Performance] on the Async Loggers page. I'm thinking a comparison between Logback, Log4j-1, Log4j-2.0, Log4j-2.6 "classic" and Log4j-2.6 "gc-free" would be ideal. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org For additional commands, e-mail: log4j-dev-help@logging.apache.org