2016-12-29 17 views
1

Я использую JavaEE7, зимует-jpa2.1
Моего проект слишком много объекта (около 2000 сущностей)
Если только 100 объект объекта, он запускается нормально.
Но теперь я добавил все классы бизнес-сущностей (2000), и я получил ошибку пространства для каждого.
При сканировании слишком много сущности в JPA спящего режима, GlassFish запуск очень медленно или memorry утечку

2016-12-29T11:40:36.903+0700|Severe: Exception in thread "DynamicReloader" 
    2016-12-29T11:40:36.904+0700|Severe: java.lang.OutOfMemoryError: GC overhead limit exceeded 
    2016-12-29T11:40:37.899+0700|Severe: Exception in thread "AutoDeployer" 
    2016-12-29T11:40:37.900+0700|Severe: java.lang.OutOfMemoryError: GC overhead limit exceeded 

Я улучшить параметры JVM памяти, но теперь мое приложение очень медленно во время пуска.
Итак, я бы знал, есть ли возможность быстрее загрузить эти объекты? Спасибо заранее

Это пример сущность

@Entity 
@Table(name = "TBL_USER") 
@NamedQueries({ 
     @NamedQuery(name = "TblUserO.findAll", query = "SELECT t FROM TblUserO t") 
}) 
public class TblUserO implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "USER_ID", unique = true, nullable = false, precision = 11) 
    private Long userId; 

persistence.xml

 <persistence-unit name="c1spostgre1" transaction-type="JTA"> 
     <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
     <jta-data-source>jdbc/__PSG1</jta-data-source> 
     <!-- Named JPQL queries per entity, but any other organization is possible --> 
     <properties> 
      <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform"/> 
      <property name="hibernate.enable_lazy_load_no_trans" value="true"/> 
      <!-- <property name="hibernate.archive.autodetection" value="class" /> --> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.format_sql" value="true" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL92Dialect" /> 
      <property name="hibernate.jdbc.batch_size" value="20" /> 
      <property name="hibernate.order_updates" value="true"/> 
      <property name="hibernate.order_inserts" value="true"/> 
     </properties> 
    </persistence-unit> 
    <persistence-unit name="c1spostgre2" transaction-type="JTA"> 
     <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
     <jta-data-source>jdbc/__PSG2</jta-data-source> 
     <properties> 
      <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform"/> 
      <property name="hibernate.enable_lazy_load_no_trans" value="true"/> 
      <!-- <property name="hibernate.archive.autodetection" value="class" /> --> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.format_sql" value="true" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL92Dialect" /> 
      <property name="hibernate.jdbc.batch_size" value="20" /> 
      <property name="hibernate.order_updates" value="true"/> 
      <property name="hibernate.order_inserts" value="true"/> 
     </properties> 
    </persistence-unit> 

ответ

0

Вы увеличили память кучи (не PermGen) настолько, что ваше приложение теперь может начать, но с так что нужно загружать в память, вы почти наверняка делаете много сборок мусора, пока все это загружается, что приведет к замедлению. Похоже, вам нужно выполнить расширенную настройку производительности вашего приложения, но это очень далеко выходит за рамки вопроса StackOverflow.

0

Кажется, что ваше приложение загружает слишком много данных из базы данных при запуске. Я предполагаю, что дополнительные объекты имеют слишком много нетерпеливых отношений, и ваше приложение загружает слишком много ненужных данных для того, что ему нужно делать.

Я рекомендую просмотреть сопоставления сущностей и уменьшить как можно больше отношений до лени (особенно * отношения ToMany должны быть лениво выбраны, что является значением по умолчанию). В поисках ненужных данных вы можете включить ведение журнала SQL-запросов для обнаружения SQL-скриптов, используемых для обработки данных. Ваше приложение может загружать все сущности из некоторых таблиц в память и впоследствии фильтровать их, что неэффективно.

Вы должны пересмотреть возможность фильтрации в JPQL-запросы. Вы также должны уменьшить использование запросов findAll или, по крайней мере, ограничить количество получаемых объектов setMaxResult() перед вызовом getResultList().

 Смежные вопросы

  • Нет связанных вопросов^_^