I setup a tomcat server in win server2003.
My config. :
-jdk1.5.0_12
-Tomcat5.0.28
-struts
-hibernate3
-mssql2000
-pc memory 2G
-Xmx = 1024M
I checked the program that all session are close. I used "-Xincgc" for
force processing garbage collection but the memory usage increases
continuously. I also checked the full thread dump log but i can't find
any problem.
Tomcat hangs when memory usage exceed 1024M.
Anyone can help you? 萬分感謝
The full thread dump :
Full thread dump Java HotSpot(TM) Server VM (1.5.0_06-b05 mixed mode):
"TP-Processor20" daemon prio=6 tid=0x49dc4408 nid=0x167c runnable
[0x4e34f000..0
x4e34fd1c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x2d7dabf8> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor19" daemon prio=6 tid=0x49b05630 nid=0x12fc in
Object.wait() [0x4e3
0f000..0x4e30fd9c]
at java.lang.Object.wait(Native Method)
- waiting on <0x3120d690> (a
org.apache.tomcat.util.threads.ThreadPool$C
ontrolRunnable)
at java.lang.Object.wait(Object.java:474)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:655)
- locked <0x3120d690> (a
org.apache.tomcat.util.threads.ThreadPool$Contr
olRunnable)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor18" daemon prio=6 tid=0x49841608 nid=0xfbc in
Object.wait() [0x4e2c
f000..0x4e2cfc9c]
at java.lang.Object.wait(Native Method)
- waiting on <0x3120d6b0> (a
org.apache.tomcat.util.threads.ThreadPool$C
ontrolRunnable)
at java.lang.Object.wait(Object.java:474)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:655)
- locked <0x3120d6b0> (a
org.apache.tomcat.util.threads.ThreadPool$Contr
olRunnable)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor17" daemon prio=6 tid=0x493d5ef8 nid=0x11a4 in
Object.wait() [0x4e2
8f000..0x4e28fa1c]
at java.lang.Object.wait(Native Method)
- waiting on <0x3120d6d0> (a
org.apache.tomcat.util.threads.ThreadPool$C
ontrolRunnable)
at java.lang.Object.wait(Object.java:474)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:655)
- locked <0x3120d6d0> (a
org.apache.tomcat.util.threads.ThreadPool$Contr
olRunnable)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor16" daemon prio=6 tid=0x4b918008 nid=0xc84 runnable
[0x4e24f000..0x
4e24fb9c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x0cfe8fb0> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor15" daemon prio=6 tid=0x4a02ce80 nid=0x2f4 runnable
[0x4e20f000..0x
4e20fc1c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x0d000680> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor14" daemon prio=6 tid=0x49f25a48 nid=0x170 runnable
[0x4e1cf000..0x
4e1cfc9c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x12ef6388> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor13" daemon prio=6 tid=0x49fa4c68 nid=0xe90 runnable
[0x4e18f000..0x
4e18fd1c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x23c70a68> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor12" daemon prio=6 tid=0x4a469d68 nid=0x350 runnable
[0x4e14f000..0x
4e14fd9c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x1350c7b8> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor11" daemon prio=6 tid=0x4a469be0 nid=0xcf8 runnable
[0x4e10f000..0x
4e10fa1c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x23d329f8> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor10" daemon prio=6 tid=0x4a4a14f0 nid=0xd00 runnable
[0x4e0cf000..0x
4e0cfa9c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x0dfb27c0> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor9" daemon prio=6 tid=0x4a43fd18 nid=0x1d4 runnable
[0x4e08f000..0x4
e08fb1c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x257e3e50> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor8" daemon prio=6 tid=0x4a2a06a8 nid=0x100 runnable
[0x4e04f000..0x4
e04fc9c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x0e5f21a0> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor7" daemon prio=6 tid=0x49a41008 nid=0xad8 runnable
[0x4e00f000..0x4
e00fd1c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x16d67680> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor6" daemon prio=6 tid=0x49919e18 nid=0xc58 runnable
[0x4ddbf000..0x4
ddbfc1c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x37fbf7e8> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor5" daemon prio=6 tid=0x49412008 nid=0xe30 in
Object.wait() [0x4dd7f
000..0x4dd7fd9c]
at java.lang.Object.wait(Native Method)
- waiting on <0x09b79e88> (a
org.apache.tomcat.util.threads.ThreadPool$C
ontrolRunnable)
at java.lang.Object.wait(Object.java:474)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:655)
- locked <0x09b79e88> (a
org.apache.tomcat.util.threads.ThreadPool$Contr
olRunnable)
at java.lang.Thread.run(Thread.java:595)
"Store com.manning.hq.ch03.Event Expiry Thread" daemon prio=6
tid=0x4c51ab80 nid
=0xa3c waiting on condition [0x4de6f000..0x4de6fa9c]
at java.lang.Thread.sleep(Native Method)
at
net.sf.ehcache.store.DiskStore.expiryThreadMain(DiskStore.java:641)
at net.sf.ehcache.store.DiskStore.access$700(DiskStore.java:
89)
at net.sf.ehcache.store.DiskStore
$ExpiryThread.run(DiskStore.java:772)
"Store com.manning.hq.ch03.Event Spool Thread" daemon prio=6
tid=0x49d42c40 nid=
0xc90 in Object.wait() [0x4de2f000..0x4de2fb1c]
at java.lang.Object.wait(Native Method)
- waiting on <0x070ed3a0> (a net.sf.ehcache.store.DiskStore)
at java.lang.Object.wait(Object.java:474)
at
net.sf.ehcache.store.DiskStore.spoolThreadMain(DiskStore.java:476)
- locked <0x070ed3a0> (a net.sf.ehcache.store.DiskStore)
at net.sf.ehcache.store.DiskStore.access$600(DiskStore.java:
89)
at net.sf.ehcache.store.DiskStore
$SpoolThread.run(DiskStore.java:755)
"TP-Monitor" daemon prio=6 tid=0x4aed2190 nid=0xe64 in Object.wait()
[0x4dc4f000
..0x4dc4fb9c]
at java.lang.Object.wait(Native Method)
- waiting on <0x070cd9d8> (a
org.apache.tomcat.util.threads.ThreadPool$M
onitorRunnable)
at org.apache.tomcat.util.threads.ThreadPool
$MonitorRunnable.run(ThreadP
ool.java:559)
- locked <0x070cd9d8> (a
org.apache.tomcat.util.threads.ThreadPool$Monit
orRunnable)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor4" daemon prio=6 tid=0x4aed2008 nid=0xe80 runnable
[0x4dc0f000..0x4
dc0fd1c]
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
- locked <0x06ef06e0> (a java.net.SocksSocketImpl)
at java.net.ServerSocket.implAccept(ServerSocket.java:450)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at
org.apache.jk.common.ChannelSocket.accept(ChannelSocket.java:295)
at
org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.ja
va:638)
at
org.apache.jk.common.SocketAcceptor.runIt(ChannelSocket.java:847)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor3" daemon prio=6 tid=0x4a97bd40 nid=0x7f0 runnable
[0x4dbcf000..0x4
dbcfc9c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x18d44730> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor2" daemon prio=6 tid=0x4a9f7400 nid=0x638 runnable
[0x4b4af000..0x4
b4afd9c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x340d7f60> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"TP-Processor1" daemon prio=6 tid=0x4a230e60 nid=0xc94 runnable
[0x4b46f000..0x4
b46fc1c]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:
218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:
256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:
313)
- locked <0x0d0bfc48> (a java.io.BufferedInputStream)
at org.apache.jk.common.ChannelSocket.read(ChannelSocket.java:
598)
at
org.apache.jk.common.ChannelSocket.receive(ChannelSocket.java:535)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.ja
va:663)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadP
ool.java:683)
at java.lang.Thread.run(Thread.java:595)
"http-8080-Monitor" prio=6 tid=0x4a350d98 nid=0xaac in Object.wait()
[0x4db8f000
..0x4db8fb1c]
at java.lang.Object.wait(Native Method)
- waiting on <0x071d95e8> (a
org.apache.tomcat.util.threads.ThreadPool$M
onitorRunnable)
at org.apache.tomcat.util.threads.ThreadPool
$MonitorRunnable.run(ThreadP
ool.java:559)
- locked <0x071d95e8> (a
org.apache.tomcat.util.threads.ThreadPool$Monit
orRunnable)
at java.lang.Thread.run(Thread.java:595)
"http-8080-Processor25" daemon prio=6 tid=0x4a546a90 nid=0xc8c
runnable [0x4db4f
000..0x4db4fa1c]
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
- locked <0x06a64ee8> (a java.net.SocksSocketImpl)
at java.net.ServerSocket.implAccept(ServerSocket.java:450)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at
org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(De
faultServerSocketFactory.java:60)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoi
nt.java:368)
at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java
kaicallguy@gmail.com said:
>I setup a tomcat server in win server2003.
>My config. :
[quoted text clipped - 10 lines]
>continuously. I also checked the full thread dump log but i can't find
>any problem.
It looks like something leaves references to session data for closed
sessions - so that the data cannot be collected.
Look for places where you use aggregates (arrays, various collections),
and try to get a way to monitor their sizes. Heap analysis tools could
also tell the amounts of object instances, which might help in pinpointing
the problem.
Of commercial tools, I've succesfully solved similar problems with
YourKit - see http://yourkit.com/ . YourKit is a "fancy heap analysis
tool" (ok, it does other things as well, but for my use it has been
just that), which lets you drill into memory usage of a Java program
(standalone as well as server-based).

Signature
Wolf a.k.a. Juha Laiho Espoo, Finland
(GC 3.0) GIT d- s+: a C++ ULSH++++$ P++@ L+++ E- W+$@ N++ !K w !O !M V
PS(+) PE Y+ PGP(+) t- 5 !X R !tv b+ !DI D G e+ h---- r+++ y++++
"...cancel my subscription to the resurrection!" (Jim Morrison)