Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Velocity exeption


Автор: Atum 19.3.2012, 15:00
Velocity (1.7) падает когда начинает испытывать значительную нагрузку : 

когда надо генерировать много много писем (как пример - отсылаем все пользователям форума - сообщение поменять пароль)


вот такая вот ошибка : 


Код

java.lang.RuntimeException: this should not happen
        at org.apache.velocity.util.MapFactory.create(MapFactory.java:108)
        at org.apache.velocity.runtime.resource.ResourceCacheImpl.<init>(ResourceCacheImpl.java:50)
        at sun.reflect.GeneratedConstructorAccessor16.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at org.apache.velocity.util.ClassUtils.getNewInstance(ClassUtils.java:105)
        at org.apache.velocity.runtime.resource.ResourceManagerImpl.initialize(ResourceManagerImpl.java:165)
        at org.apache.velocity.runtime.RuntimeInstance.initializeResourceManager(RuntimeInstance.java:730)
        at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:263)
        at org.apache.velocity.app.VelocityEngine.init(VelocityEngine.java:93)

....


Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedConstructorAccessor12.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at org.apache.velocity.util.MapFactory.create(MapFactory.java:103)
        ... 31 more
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded


или так

Код

org.apache.velocity.exception.VelocityException: Error loading directive.properties! Something is very wrong if these properties aren't being located.
 Either your Velocity distribution is incomplete or your Velocity jar file is corrupted!

        at org.apache.velocity.runtime.RuntimeInstance.initializeDirectives(RuntimeInstance.java:904)
        at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:264)
        at org.apache.velocity.app.VelocityEngine.init(VelocityEngine.java:93)
....


java.lang.OutOfMemoryError: GC overhead limit exceeded

именно каждый  раз падает на VelocityEngine.init

как настроить Velocity чтобы этого не происходило ? 

шаблон самый простой : 

Код

        
        VelocityEngine ve = new VelocityEngine();
        ve.setProperty("resource.loader", "class");
        ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
        ve.init();
        ...

в чем может быть проблема ? 

Автор: jk1 20.3.2012, 00:35
Цитата

java.lang.OutOfMemoryError: GC overhead limit exceeded


Здесь не велосити надо настраивать, а больше памяти приложению выделить. Ключ Xmx при запуске JVM за это отвечает.

Автор: Atum 21.3.2012, 18:02
проблема как мне кажется не с нехваткой памяти - эта ошибка вылетает не каждый раз ! 

чаще вторая вылетает !

там что то с Пулом - по умолчанию pool = 20 !

и видимо нужна корректное динамическое его увеличение. 

но как ? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)