I've done some tests with the below code
hope this helps
David
10 Processor Sun Sparc 2i 400Mhz (Solaris 2.8) jdk 1.4.0-b92
time java TestDatePerf 1 10000 real 0m2.096s user 0m1.901s sys 0m0.142s
time java TestDatePerf 2 10000 real 0m4.848s user 0m4.240s sys 0m1.372s
time java TestDatePerf 3 10000 real 0m7.449s user 0m6.530s sys 0m3.312s
time java TestDatePerf 4 10000 real 0m11.140s user 0m8.661s sys 0m4.543s
time java TestDatePerf 5 10000 real 0m13.194s user 0m11.001s sys 0m7.182s
time java TestDatePerf 6 10000 real 0m17.981s user 0m12.381s sys 0m8.602s
time java TestDatePerf 7 10000 real 0m20.659s user 0m15.271s sys 0m10.102s
time java TestDatePerf 8 10000 real 0m22.540s user 0m17.501s sys 0m13.603s
time java TestDatePerf 9 10000 real 0m26.457s user 0m19.991s sys 0m14.793s
time java TestDatePerf 10 10000 real 0m32.006s user 0m22.451s sys 0m15.923s
time java TestDatePerf 20 10000 real 0m57.951s user 0m43.660s sys 0m37.772s
time java TestDatePerf 30 10000 real 1m23.016s user 1m6.050s sys 0m56.952s
time java TestDatePerf 40 10000 real 1m52.507s user 1m28.651s sys 1m15.832s
time java TestDatePerf 50 10000 real 2m21.881s user 1m49.161s sys 1m35.772s
linux dual 2.8Ghz P4 (kernel 2.4.19 ) jdk1.4.1_03-b02
time java TestDatePerf 1 10000 real 0m0.453s user 0m0.410s sys 0m0.020s
time java TestDatePerf 2 10000 real 0m1.411s user 0m1.390s sys 0m0.410s
time java TestDatePerf 3 10000 real 0m3.119s user 0m2.890s sys 0m1.610s
time java TestDatePerf 4 10000 real 0m3.690s user 0m3.040s sys 0m1.780s
time java TestDatePerf 5 10000 real 0m4.630s user 0m3.330s sys 0m2.360s
time java TestDatePerf 6 10000 real 0m5.410s user 0m4.530s sys 0m2.480s
time java TestDatePerf 7 10000 real 0m6.310s user 0m5.030s sys 0m3.000s
time java TestDatePerf 8 10000 real 0m7.330s user 0m5.510s sys 0m3.590s
time java TestDatePerf 9 10000 real 0m8.682s user 0m6.970s sys 0m4.060s
time java TestDatePerf 10 10000 real 0m9.648s user 0m7.730s sys 0m4.760s
time java TestDatePerf 20 10000 real 0m19.270s user 0m15.500s sys 0m9.210s
time java TestDatePerf 30 10000 real 0m32.570s user 0m26.940s sys 0m14.740s
time java TestDatePerf 40 10000 real 0m42.492s user 0m35.130s sys 0m20.560s
time java TestDatePerf 50 10000 real 0m57.209s user 0m47.040s sys 0m25.330s
David Rees
<[EMAIL PROTECTED] To: Tomcat Developers List
<[EMAIL PROTECTED]>
.com> cc:
Subject: Re: java Date related classes
synchronization bottlenecks
11/07/2003 02:52
Please respond to
"Tomcat
Developers List"
On Thu, Jul 10, 2003 at 05:46:06PM -0500, Glenn Nielsen wrote:
>
> Now use jar to unarchive the src.jar file in your java SDK.
> Take a look at the java.sql.Timestamp.toString() method which the FileLogger
> above uses.
>
> To verify this look at the source for java.util.Date.getField().
Yes, that looks bad (looking at 1.4.2 src)! It appears that avoiding calls to the
Timestamp.toString() is really to be avoided if possible.
> And there are many other synchronization bottlenecks in the following Date
> related classes:
>
> java.util.Calendar.getInstance()
> java.util.Date
> java.util.TimeZone.getDefault()
> java.sql.Date
> java.sql.Time
> java.sql.Timestamp
I took a look at some of these, these don't appear to be as bad as the
Timestamp.toString().
I did a quick google of Date performance issues and didn't find
anything. Is this a well known bottleneck in multi-threaded
applications?
> > Does a simple test case which simply starts up a number of threads which
> > all use one of the classes shown below display the problem nicely?
>
> I am sure it would, I haven't had time to write one up yet.
I wrote a simple multithreaded program which makes calls to
Timestamp.toString() and varied the number of threads running and the
number of calls. On a single CPU system (a Duron 600), scaling from
1-20 threads performed as I expected, with the 20 thread iteration
taking only slightly longer than the single thread iteration.
However, when running this on a dual-cpu system (PIII 500), going from
1 to 2 treads took over twice as long for the same overall number of
calls to Timestamp.toString(). From 4-20 threads overall time
slightly increased most likely due to the overhead of scheduling
multiple threads.
You must be running on a multiple-CPU system as it doesn't appear to be
a bottle-neck (except for the fact that it's a slow operation) on a
single-cpu machine and only one multi-cpu machines.
Given that this is the case, a temporary fix in your case would be to
run as many Tomcat's as you have processors on that particular machine
(assuming you have enough memory)
-Dave
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
The following file(s) have been deleted by: David Cassidy on 11/07/2003 09:55:57
TestDatePerf.java
ATT1GXC9
--
This e-mail may contain confidential and/or privileged information. If you are not the
intended recipient (or have received this e-mail in error) please notify the sender
immediately and destroy this e-mail. Any unauthorized copying, disclosure or
distribution of the material in this e-mail is strictly forbidden.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]