[ 
https://issues.apache.org/jira/browse/LOG4J2-812?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14614541#comment-14614541
 ] 

Remko Popma commented on LOG4J2-812:
------------------------------------

The performance numbers Ralph posted on the ML look very nice. Let me reproduce 
them here for future reference (I find benchmark results easier to read 
formatted in Jira then on my phone mail app):
{quote}
I created an implementation that uses FastDateFormat and an AtomicReference.  I 
modified the benchmarks and the results are below.  atomicFormat is the new 
version. cachedFormat uses logic similar to what Remko proposed. fastFormat 
simply uses the FastDateFormat on every timestamp. synchronizedFormat uses 
logic similar to what is in the DatePatternConverter now. threadLocalFormat 
retrieves a threadLocal SimpleDateFormat and formats every timestamp with it.
{quote}

*1 Thread*

{code}
Benchmark                                                     Mode  Samples    
Score   Error  Units
o.a.l.l.p.j.SimpleDateFormatBenchmark.atomicFormat          sample    67961   
93.774 ± 3.928  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.baseline              sample    89151   
39.136 ± 2.352  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.cachedFormat          sample    66065   
74.033 ± 3.613  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.fastFormat            sample    79434  
316.701 ± 6.443  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.synchronizedFormat    sample    81409  
304.055 ± 5.835  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.threadLocalFormat     sample    84137  
298.179 ± 6.005  ns/op
{code}

*4 Threads*

{code}
Benchmark                                                     Mode  Samples     
Score     Error  Units
o.a.l.l.p.j.SimpleDateFormatBenchmark.atomicFormat          sample   270722    
82.465 ±   1.767  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.baseline              sample   290686    
46.817 ±   1.348  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.cachedFormat          sample   229500    
86.370 ±   2.102  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.fastFormat            sample   228713   
435.373 ±  20.030  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.synchronizedFormat    sample   293448  
2113.380 ± 138.919  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.threadLocalFormat     sample   283040   
507.937 ±  15.903  ns/op
{code}

*8 Threads*

{code}
Benchmark                                                     Mode  Samples     
Score     Error  Units
o.a.l.l.p.j.SimpleDateFormatBenchmark.atomicFormat          sample   389028   
120.208 ±  39.351  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.baseline              sample   523979    
62.972 ±   2.952  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.cachedFormat          sample   606880   
125.257 ±   7.320  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.fastFormat            sample   470751   
768.610 ±  24.760  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.synchronizedFormat    sample   614805  
4598.192 ± 107.378  ns/op
o.a.l.l.p.j.SimpleDateFormatBenchmark.threadLocalFormat     sample   434334   
884.489 ± 130.365  ns/op
{code}



> Performance optimization: avoid use of synchronized SimpleDateFormat in 
> Dat​ePatternCo​nverter 
> -----------------------------------------------------------------------------------------------
>
>                 Key: LOG4J2-812
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-812
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Pattern Converters, Performance Benchmarks
>    Affects Versions: 2.0.2
>            Reporter: Mohit Anchlia
>            Assignee: Remko Popma
>             Fix For: 2.3
>
>         Attachments: LOG4J2-812-patch.txt, LOG4J2-812.patch2.diff
>
>
> Threads seem to be blocking on class 
> org.apache​.loggin.lo​g4j.core.p​attern.Dat​ePatternCo​nverter. It's short 
> lived but is visible in profiler. It also is adding on to CPU. Here is the 
> mail conversation on the mailing list:
> {quote}
> Ralph Goers ralph.go...@dslextreme.com via logging.apache.org  
> The converter uses a SimpleDateFormat which is not thread safe and so is 
> synchronized. I am sure there might be minor optimizations that could be done 
> to this
>  What I would do is modify DatePatternConverter to
>  a) use Java 8’s java.time.format.DateTimeFormatter if running on Java 8
>  b) use Joda Time’s DateTimeFormat if it is present.
>  c) create a pool of SimpleDateFormat objects and use those.
>  Please create a Jira issue for this.
>  Ralph
> {quote}
> ----
> One alternative that  was suggested on the mailing list is to use commons 
> lang FastDateFormat to format log timestamps.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-dev-h...@logging.apache.org

Reply via email to