2012-09-30 7 views
4

나는 글래스 피쉬 3.1 매우 매우 낮은 자바 EE의 성능 (EJB + JSF) 애플리케이션 및 최대 절전 모드 (3.6.8.Final 및 4.1.7.Final)에 직면 .2. 약 300 개의 선택 쿼리를 보내는 데 약 20 초가 걸립니다. 이것은 받아 들일 수 없다.매우 낮은 성능

나는 정확히 같은 응용 프로그램 보스와 TomEE에 배포 있습니다. 동일한 300 개의 선택 쿼리에는 약 1,5 초가 걸립니다.

Google에서 발견 한 답변이 hibernate.show_sql 인 경우 true 또는 hibernate.hbm2ddl이면 응용 프로그램이 느려집니다. 그러나 그것은 사실이 아닙니다. 나는 hibernate.show_sql을 끈다. 그러나 문제가되지 않는다. 더욱이 JBoss 및 TomEE 버전에서 이러한 옵션이 적용되며 10 배 빠른 속도로 작동합니다! 이것이 Glasfish와 Hibernate 사이의 문제라고 생각했습니다. 하지만 나는 같은 비즈니스 로직을 가진 다음 애플리케이션을 가지고있다. Hibernate가 제공하지만 Spring과 함께 구성되는 EntityManager와 동일한 DAO이다. 그리고 성능이 좋습니다. 이상하지 않니? 결함 버전

persistence.xml

:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 

    <persistence-unit name="jee_project" transaction-type="JTA"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>jdbc/PostgreSQL</jta-data-source> 
     <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> 
     <property name="hibernate.hbm2ddl.auto" value="update"/> 
     <property name="hibernate.show_sql" value="false"/> 
     <property name="current_session_context_class" value="thread"/> 
     </properties> 
    </persistence-unit> 

</persistence> 

글래스 피쉬 JDBC 구성

<jdbc-connection-pool driver-classname="" datasource-classname="org.postgresql.ds.PGConnectionPoolDataSource" res-type="javax.sql.ConnectionPoolDataSource" description="" name="PostgreSQLPool"> 
     <property name="User" value="postgresql"></property> 
     <property name="DatabaseName" value="qazxsw"></property> 
     <property name="LogLevel" value="0"></property> 
     <property name="Password" value="1234"></property> 
     <property name="ServerName" value="localhost"></property> 
     <property name="Ssl" value="false"></property> 
     <property name="ProtocolVersion" value="0"></property> 
     <property name="TcpKeepAlive" value="false"></property> 
     <property name="SocketTimeout" value="0"></property> 
     <property name="PortNumber" value="5432"></property> 
     <property name="LoginTimeout" value="0"></property> 
     <property name="UnknownLength" value="2147483647"></property> 
     <property name="PrepareThreshold" value="5"></property> 
    </jdbc-connection-pool> 
    <jdbc-resource pool-name="PostgreSQLPool" description="" jndi-name="jdbc/PostgreSQL__pm"></jdbc-resource> 
    <jdbc-resource pool-name="PostgreSQLPool" description="" jndi-name="jdbc/PostgreSQL__nontx"></jdbc-resource> 
+0

풀의 최소/최대 연결 수는 얼마입니까? – ewernli

+0

초기 및 최소 풀 크기 : 8, 초기 및 최소 풀 크기 : 32 – LancerX

+0

파일이 persistence.xml이 아닌 persistence.xml이라고 생각합니다. –

답변

0

에서 나는 원인을 발견했다. 대답은 위에 붙여 넣은 목록에 숨겨졌습니다. 3 개월 전에 나는 Glassfish에 같은 응용 프로그램을 배포했습니다. 그런 다음 Glassfish를 처음 사용했습니다. 일부 블로그에서 datasource (localhost : 4848)를 설정하는 방법을 찾았습니다. 내 데이터 소스의 이름이 jdbc/PostgreSQL이라고 가정합니다. 그럼 glassfish가 데이터 소스 jdbc/PostgreSQL__pm을 찾을 수 없다는 예외가 있습니다. 인터넷의 어딘가에서 접미사 __pm이 필요하다는 정보를 찾았습니다. 다음 예외는 접미어 __nontx에 관한 것입니다. 이름을 변경하면 응용 프로그램이 시작됩니다. 그러나 또한 매우 낮은 성능.

는 지금은 jdbc/PostgreSQL 이름과 좋은 성능을 작업 시작 데이터 소스를 추가! 데이터 소스의 이름이 잘못되어 어떻게 작동하고 있었는지 (느리게)?

0

는 읽기 전용 모드에서 거래입니다. 세션에 많은 객체가 포함되어있을 경우, 최대 절전 모드는 자동 더티 검사를 수행하는 데 많은 시간이 걸릴 수 있습니다. 어쩌면 당신의 거래는 바람둥이/제이 보스에서 읽기 전용 모드에 있지만 글래스 피쉬

관련 문제