Friday, July 07, 2006

CruiseControl OutOfMemoryError - Part 1

DEV’de yaptığımız continous integration sisteminde(CruiseControl ile yapıyoruz);

CC build’i bitirdikten sonra yeni bir thread açmak istediğinde java.lang.OutOfMemory veriyordu... Biraz araştırdım ve aşağıdaki sorunla karşı karşıya olduğumuzu farkettim...

XML Logger conceptual usage

Dear Ant Developers

I'm a developer from Budapest, Hungary.

We have tried to use the CruiseControl in our continuous integration
process, but we run in some difficulties. We get a
java.lang.OutOfMemoryError.

After a few days spent near the CruiseControl I observerd, that the
CruiseControl uses the org.apache.tools.ant.XmlLogger for formatting
the ant output.

The problem is that our build process is so huge, that the result
doesn't fits in a DOM.

I have also tried to tell to the JVM to use more memory, but it
doesn't works.

I thing that conceptually it is not the best idea to use the a DOM implementation for logging
purposes. The log events musn't be stored in the memory for long time. (And this "long time"
in our case depends how long the build takes.) They should be flushed as soon as possible.

My question would be: Is there any change request which requests that
the XMLLogger not to use DOM API, rather some stream?

If there is, in which build the change will be released?

If not then I propose this change as a change request.

PS: By the time I solved the problem, I made a workaround, but the problem is still there...
:(

(The problem is that our build process is so huge, that the result doesn't fits in a DOM.)


Yani bizim build processin ürettiği output CC’nin loglama sınırını aşıyor, bunu yapan en büyük etken de stcheckout, çünkü output olayında aşan o...

Çözümler :

1) Çalıştırdığı her job için jvm ayarları ile oynanabiliyor...
jvmarg arg="-server"
jvmarg arg="-Xms64m
jvmarg arg="-Xmx512m"

Sonuç : Cık... Olmuyor...

2) Checkout kısmına filtre koyup output’u azaltmak, bu işlem yapıldığında oluşan output azaldığı için, sorun da kendiliğinden ortadan kalkıyor...